Equazioni differenziali a coefficienti non costanti

di
Anonimizzato9724
il
473 risposte

Equazioni differenziali a coefficienti non costanti

Salve a tutti,

devo risolvere due equazioni differenziali ed ho usato il seguente codice per la risoluzione simbolica:

inits='y(0)=0, Dy(0)=0, x(0)=0, Dx(0)=0';

[y,x]=dsolve('D2y=(q*B)/(m_H*v_H)', 'D2x=(q*E)/(m_H*v_H^2)', inits,'z');
e lui si fa i suoi conti e in qualche modo calcola la soluzione.

Il problema è che B ed E, campo elettrico e magnetico, sono definiti in una certa regione, diciamo per semplicità:
B=1 if 0<=z=<15 cm

E=1 if 8<=z<=16 cm

E=B=0 al di fuori.

In pratica posso considerarli come dei campi a gradino che sono paralleli tra loro e ortogonali a z, che è la variabile di integrazione.
In più vorrei risolvere le equationi per un percorso più lungo, diciamo fino a z=40cm, dove è posto un dispositivo di imaging.

Credo sia meglio utilizzare un metodo di risoluzione numerica, più utile per i miei scopi, e scrivere il codice tipo:

[z,x] = ode23(odefun1,[z0,zf],x0,options)
e un'alta istruzione analoga per l'altra equazione. Ma come passo le funzioni che descrivono i campi e le condizioni iniziali?

473 Risposte

  • Re: Equazioni differenziali a coefficienti non costanti

    Sull'help c'è l'esempio...
    devi scrivere la funzione in un m-file a parte e poi passarla come ingresso alla funzione ode.
  • Re: Equazioni differenziali a coefficienti non costanti

    Ho cercato sull'help ma non ho travo nulla di rilevante.
    Come lo trovo l'esempio che dici tu?
  • Re: Equazioni differenziali a coefficienti non costanti

    Qui http://www.mathworks.it/help/techdoc/ref/ode23.htm
    Mi sembra che nel terzo esempio sia comprensibile.
    Nel terzo pezzo di codice definisce la funzione esterna, nel quarto blocco di codice usa ode45 con all'interno il riferimento alla funzione.
  • Re: Equazioni differenziali a coefficienti non costanti

    Io ho equazioni del secondo ordine, quindi prima devo scriverle come equazioni del primo ordine, giusto?
    Poi per integrare rispetto ad una variabile diversa dal tempo mi basta specificarlo semplicemente, come con il dsolve? cioè nell'esempio se sostituisco t con z lui dovrebbe integrare rispetto a z...
    Poi avendo a che fare con 2 equazioni dovrei scrivere due blocchi di codice analoghi o posso fargliele risolvere contemporaneamente come con dsolve?
    Domani comincio a lavorarci su...
    Buonanotte e grazie
  • Re: Equazioni differenziali a coefficienti non costanti

    Dai un'occhiata qui: http://www.mathworks.it/support/tech-notes/1500/1510.html
    Nella section 4 ti spiega come risolvere equazioni differenziali di grado superiore al primo.
  • Re: Equazioni differenziali a coefficienti non costanti

    Ho provato con questo codice:
    
    m =	9.109*10^-31;
    q = -1.602*10^-19;
    v = 1*10^5;
    B = 5.7*10^-6;
    
    rhs = @(z,y) [y(2); (q/m)*(B/v)];
    [za, ya] = ode23t(rhs, [0 100], [0 0]);
    
    figure, hold on
    
    plot (za, ya(:,1))
    
    e i conti se li fa.

    Mi aspetterei però un risultato simile a quello prodotto da questo codice:
    
    t=linspace(0,100,100);
    omega = q*B/m;
    x = (v/omega)* sin(omega*t);
    y = (v/omega)* cos(omega*t);
    
    figure 
    plot (x,y)
    
    e non capisco perchè...

    ora provo seguendo la spiegazione nel linkche mi hai mandato.
  • Re: Equazioni differenziali a coefficienti non costanti

    Nell'esempio dice di fare una cosa simile a quella che ho fatto io, o no?
    sta cosa è un casino...
  • Re: Equazioni differenziali a coefficienti non costanti

    I plot che ottengo con lo script mio e seguendo l'esempio sono uguali, quindi mi fa pensare che siano due metodi analoghi
  • Re: Equazioni differenziali a coefficienti non costanti

    Sono passato all'altra equazione ed ho scritto;
    
    clear all
    q=1;
    E=1;
    v=1;
    m=1;
    %%%% eq differenziale
    rhs=@(z,x)[x(2);(q/m)*(E/v^2)];
    
    [za, xa] = ode45(rhs, [0 100], [0 0]);
    
    figure(1)
    
    plot (za, xa(:,1))
    
    %%%Formula analitica
    X=linspace(0,100,100);
    Y=0.5*q*E*(X.^2/m*v^2);
    
    figure(2)
    plot(X,Y)
    
    
    in questo caso i due plot sono uguali, quindi credo che sia giusta la risoluzione dell'equazione differenziale.
  • Re: Equazioni differenziali a coefficienti non costanti

    Bene!
  • Re: Equazioni differenziali a coefficienti non costanti

    Secondo the è corretto?
  • Re: Equazioni differenziali a coefficienti non costanti

    Sinceramente non so dirtelo... ma se fa esattamente quello che ti aspetti c'è una buona probabilità che sia giusto
    perché hai dubbi?
  • Re: Equazioni differenziali a coefficienti non costanti

    Sì, visto che sono una chiavica a programmare non mi sento di dire che è giusto sicuro.

    Vabbe, suppongo che sia giusto e passo al resto...
  • Re: Equazioni differenziali a coefficienti non costanti

    Purtroppo non è solo una questione di programmazione....
    A me sembra corretto dal punto di vista del codice, ma non so se il codice, anche se corretto, corrisponde a quello che avevi in mente di fare o a quello che ti è stato richiesto.
    Però, se hai la "prova", o se magari è qualcosa che puoi fare a mano per avere un riscontro, direi che va bene. Magari prova a sostituire qualche numero a mano per vedere se i punti sulla curva corrispondono...
Devi accedere o registrarti per scrivere nel forum
473 risposte