Equazioni differenziali a coefficienti non costanti

di il
473 risposte

473 Risposte - Pagina 21

  • Re: Equazioni differenziali a coefficienti non costanti

    Ora devo andare a lavoro, domani se ne parla
  • Re: Equazioni differenziali a coefficienti non costanti

    1keenan ha scritto:


    effettivamente qualcosa cambia.
    Faccio una matrice dove salvo le traiettore e poi le confronto tra quelle fatte con i due metodi...
    c'è un modo più corretto per verificare sta cosa?
    Puoi confrontare intanto cosa cambia all'uscita di quel blocco, lanci il codice due volte con le modifiche e poi con un grafico guardi le differenze. Immagino che ci saranno comunque delle differenze date dalla componente random del codice, però secondo me, se c'è differenza dovrebbe essere abbastanza evidente.
    Ovviamente dopo aver appurato che i due codici sono diversi, bisogna capire quale dei due è quello giusto.
    Intanto buon lavoro. A domani.
  • Re: Equazioni differenziali a coefficienti non costanti

    Allora, ho fatto la prova così (scusa, non ho resistito, ero curiosa...)
    Ho lanciato il vecchio codice. Poi ho assegnato la struttura ad un altra per non sovrascriverla
    Particella1=Particella;
    Poi ho cancellato le variabili che sarebbero cambiate con le modifiche, quindi:
    clear Particella v_x v_y v_z v_ion y_sorgente.
    Poi con un ciclo come questo ho confrontato tutti i campi della struttura:
    for i = 1:300
    x(i)=isequal(Particella(i).velocita,Particella1(i).velocita);
    end
    find(x==0)

    x è uguale a 1 se i due campi sono diversi.
    Le traiettorie hanno qualche campo che risulta diverso ma sembrano problemi di arrotondamento (in un caso mette 1, nell'altro 1.0000)
    Le velocità invece vengono tutte diverse. Ma vengono diverse anche se lanci lo stesso codice 2 volte. Quindi
    Particella2=Particella;
    e ho rilanciato lo stesso codice (quello modificato) e ho fatto la stessa verifica.
    Quindi Particella1 è dal codice vecchio, Particella2 e Particella è dal codice nuovo.
    Ora ho fatto dei plot. Ho plottato prima Particella1 con Particella2 (dati dai due codici diversi) e poi Particella e Particella2.
    for i = 1:300
    plot(Particella2(i).velocita(1,3),Particella(i).velocita(1,3),'*m');hold on;
    end
    Più o meno mi aspetto che il grafico sia intorno alla bisettrice del quadrante il che vorrebbe dire che sono uguali i numeri confrontati.
    Nell'allegato c'è il risultato.
    Allegati:
    9528_862bfa3b6112f173328cd8ae25786485.jpg
    9528_862bfa3b6112f173328cd8ae25786485.jpg
  • Re: Equazioni differenziali a coefficienti non costanti

    In blu c'è il confronto tra i due codici, in rosa il confronto tra i risultati ottenuti con lo stesso codice.
  • Re: Equazioni differenziali a coefficienti non costanti

    Buongiorno,

    Sono appena arrivato perchè ho dovuto sbrigare un pò di burocrazia.
    Ho fatto la stessa cosa che hai fatto tu, anzi grazie per aver verificato per me.

    Possiamo concludere che i due codici sono equivalenti a meno della componente random?
    Dimmi di sì o mi butto dalla finestra

    (sono al pian terreno)
  • Re: Equazioni differenziali a coefficienti non costanti

    No, non ti buttare... direi che possiamo concludere che sono equivalenti.
  • Re: Equazioni differenziali a coefficienti non costanti

    OK.

    Ora rimane il problema degli stati di carica più alti che non passano i collimatori.
    Volevo fare le seguenti prove:
    1) verficare che K_ion=normrnd(Ein_s,Ein_s/10) mi dà effettivamente una distribuzione normale
    2) verficare che angolo = A + (B-A) * rand(1) mi dà una distribuzione uniforme
    3) avevo calcolato l'angolo massimo che mi assicura il passaggio di tutte le particelle con un fascio monocarica, voglio vedere che succede con piùstati di carica: mi aspetto che passino tutte, o che ne perdo qualcuna.
    4) cambiare algoritmo di risoluzione delle equazioni differenziali nelle zone dove non ci sono campi. l'ode23t dovrebbe assicurare la conservazione della velocità e quindi assicura che il risultato in campo magnetico sia corretto. Mi chiedo se la correzione al runge-kutta apportata in questo algoritmo non crei problemi in una zona di deriva:magari apporta delle correzioni che se non sono necessarie vanno a creare problemi.

    Mi suggerisci qualcos'altro?
  • Re: Equazioni differenziali a coefficienti non costanti

    1keenan ha scritto:


    3) avevo calcolato l'angolo massimo che mi assicura il passaggio di tutte le particelle con un fascio monocarica, voglio vedere che succede con piùstati di carica: mi aspetto che passino tutte, o che ne perdo qualcuna.

    Allora, con l'angolo di 0.0571 non passano tutte, ma almeno le 6 parabole alla fine le vedo, quindi non ammazza gli stati di carica più alti.
    con 4 stati invece pure

    Questo potrebbe voler dire che la divergenza del fascio non è legata solo all'angolo ma anche all'energia... sempre ammesso che i conti se li faccia giusti o non ci sia qualcosa che non va nel codice...
  • Re: Equazioni differenziali a coefficienti non costanti

    I punti 1 e 2 non capisco perché devi verificarli, visto che stai usando funzioni di matlab...
  • Re: Equazioni differenziali a coefficienti non costanti

    giug ha scritto:


    I punti 1 e 2 non capisco perché devi verificarli, visto che stai usando funzioni di matlab...
    per vedere se posso fidarmi di lui visto che non c'è un buon rapporto... :p

    per verficare il punto 4 posso fare una cosa tipo quella che hai fatto tu prima immagino.
  • Re: Equazioni differenziali a coefficienti non costanti

    Con hist lo vedi subito...
  • Re: Equazioni differenziali a coefficienti non costanti

    giug ha scritto:


    con hist lo vedi subito...
    Ecco, io lo sapevo che non ci si può fidare.
    La distribuzione angolare non è uniforme.
    Mi aspetto una cosa piatta nell'intervallo: A_ang = -0.0571; B_ang = 0.0571;
    invece lui fa la cosa allegata.
    Uso le istruzioni:
    
    >> for i=1:n
    angolo(i)=A_ang + (B_ang-A_ang) * rand(1);
    end
    >> hist(angolo)
    
    n=100
    quella in energia invece è una gaussiana.


    ========= AGGIUNGO========
    anche se gli dico:
    
    for i=1:n
    T(i)=rand(1);
    end
    >> hist(T)
    
    lui fa un'altra porcheria.
    se estrae uniforme non dovrebbe essere piatta sta cosa? o sto dicendo fesserie?
    Allegati:
    9724_8355e0fdb712bff5929cde06093fb306.jpg
    9724_8355e0fdb712bff5929cde06093fb306.jpg

    9724_8fd5628c278d8e06a921bf8074a9b9bf.jpg
    9724_8fd5628c278d8e06a921bf8074a9b9bf.jpg
  • Re: Equazioni differenziali a coefficienti non costanti

    Devi usare più dati. Metti n=10000 e vedi che è uniforme. Gli estremi mi sembrano corretti.
  • Re: Equazioni differenziali a coefficienti non costanti

    giug ha scritto:


    Devi usare più dati. Metti n=10000 e vedi che è uniforme. Gli estremi mi sembrano corretti.
    hai ragione, come sempre... però se per avere una distribuzione random devo fargli fare i conti con 10000 particelle mi sbrigo domani mattina.
    VAbbe, uso un altro pc e faccio la prova.
  • Re: Equazioni differenziali a coefficienti non costanti

    Ma la distribuzione è random sia che usi 1 valore, sia che ne usi 10000. Solo che per "vederla" con un istogramma devi usare tanti dati.
    Matlab di default usa 10 bin per fare l'istogramma. Quindi se usi 100 dati vuol dire che per ogni barretta hai mediamente 10 valori, che sono un pò pochini per fare statistica.
    Puoi vederlo abbastanza bene passandogli anche il numero di bin. Anche se fai una distribuzione con 10000 dati, se usi 100 bin (devi mettere 100 come secondo argomento della funzione hist) vedrai che è molto meno uniforme rispetto al caso in cui ne usi 10. Ma i dati sono gli stessi... è solo una questione di rappresentazione...
Devi accedere o registrarti per scrivere nel forum
473 risposte