Equazioni differenziali a coefficienti non costanti

di il
473 risposte

473 Risposte - Pagina 3

  • Re: Equazioni differenziali a coefficienti non costanti

    Sicuramente c'è il modo di simularlo...cerco di farmi venire in mente qualcosa.
  • Re: Equazioni differenziali a coefficienti non costanti

    Ci credo che c'è, è che qua l'hanno fatto con MathCad che è una spece di foglio di calcolo (gli dai le equazioni e lui si fa i conti) e gli sembra che con MatLab è la stessa cosa...
  • Re: Equazioni differenziali a coefficienti non costanti

    Riguardando l'esempio 3 dell'help di ode45...
    Lui usa nell'espressione dei vettori (tramite il linspace definisce l'asse dei tempi e poi interpola - f e g).
    Quindi tu puoi all'interno della funzione ode definire una "curva" per uno delle tue variabili...
  • Re: Equazioni differenziali a coefficienti non costanti

    Ho pensato che c'è un altro problema: le condizioni iniziali devono cambiare all'uscita dal campo altrimenti avrei un plot tipo a gradino, nel senso che la traiettoria coincide con un asse fino all'ingresso nel campo, poi diventa una curva che all'uscita dal campo finisce in un certo punto dicoordinate (X, Y) diverso da (0, 0) e poi ritorna a seguire l'asse di ingresso.
    Questo perchè dove E=0 l'equazione è d^2y/dt^2=0 e la risolve con la condizione iniziale [0 0], che invece deve essere diversa.
    Sono arrivato a questa conclusione perchè avevo pensato di mettere l'eq differenziale nel ciclo che avevo usato per creare il vettore del campo e quindi fargli risolvere tante equazioni quanti sono gli elementi del campo e poi plottare solo solo una coppia di punti per ogni equazione che ha risolto.
  • Re: Equazioni differenziali a coefficienti non costanti

    E nel ciclo non puoi cambiare anche le condizioni iniziali? Magari con un secondo ciclo.
  • Re: Equazioni differenziali a coefficienti non costanti

    Si, è quello che sto provando a fare.
    anzi forse a questo punto non ho nemmeno bisogno del ciclo

    se risolvo l'equazione così:

    rhs=@(z,x)[x(2); (q/m).*(E/v^2)];
    [za, xa] = ode45(rhs, [0 100], [0 0]);

    dove ho il campo, potrei risolverla dopo il campo prendendo come condizione iniziale l'ultimo elemento di xa e la velocità associata che ora vedo come la calcolo.
    quindi all'uscita dal campo sarebbe:
    
    x_iniziale= xa(ultimo elemento della prima colonna che ora vedo come si stampa)
    xprimo_iniziale = tangete alla curva nell'ultimo xa
    IC = [ xiniz  xpinizi]
    
     rhs=@(z,x)[x(2); (q/m).*(E/v^2)];
    [za, xa] = ode45(rhs, [101 200], IC);
    
    concettualmente pensi che funziona?
  • Re: Equazioni differenziali a coefficienti non costanti

    X_iniziale= xa(end, 1)

    dovrebbe essere giusto...
  • Re: Equazioni differenziali a coefficienti non costanti

    Non saprei...
    prova così e poi cerca di capire dai risultati se sono plausibili.
    Probabilmente non è la stessa cosa che risolvere tutto insieme... però può essere un inizio. Il risultato sarà ovviamente corretto "a regime", probabilmente perderai le informazioni sul passaggio tra uno stato e l'altro.
  • Re: Equazioni differenziali a coefficienti non costanti

    Allora scrivendo:
    
    for n= 1:1:200
        
        if n<=100
                E=1;
                rhs=@(z,x)[x(2); (q/m).*(E/v^2)];
                [zaE, xaE] = ode45(rhs, [0 100], [0 0]);
        else
            E=0;
            IC = [xaE(end, 1) 0];
            rhs=@(z,x)[x(2); (q/m).*(E/v^2)];
            [za, xa] = ode45(rhs, [101 200], IC);
        end
    end
    
    %%%Plot
    ZA=[zaE; za];
    XA=[xaE; xa];
    
    figure
    
    plot( ZA, XA(:,1))
    
    ha fatto il plot come lo immaginavo.
    Ora vedo come posso valutare la tangente alla curva nel punto che mi interessa per dare l'altra condizione iniziale giusta.
  • Re: Equazioni differenziali a coefficienti non costanti

    Ormai sono il tuo incubo peggiore...

    se la tangente la calcolo usando:

    h=quiver(zaE(end), xaE(end,1));

    è corretto?
    la funzione quiver dovrebbe restituire la velocità, ma nonho ben capitose faccio la cosa giusta
  • Re: Equazioni differenziali a coefficienti non costanti

    Quiver credo serva solo per fare il grafico, non ti restituisce la velocità.
    cosa sono i due argomenti, due numeri? così fai la tangente di un punto?
  • Re: Equazioni differenziali a coefficienti non costanti

    I due argomenti sono due numeri che dovrebbero essere le coordinate dell'ultimo punto della traiettoria. A me interessa la tangente alla traiettoria in questo punto...
    Ho provato anche conquesto ciclo, ma il risultato mi convince poco:
    
             for i=1:1:length(xaE)-1
                 deriv(i)=(zaE(i+1,1)-zaE(i,1))/(xaE(i+1,1)-xaE(i,1));
             end
             dxaE= deriv(end);
    
    sì, quiver fa il grafico, hai ragione
  • Re: Equazioni differenziali a coefficienti non costanti

    Cos'è deriv? puoi usare diff per fare la derivata.
  • Re: Equazioni differenziali a coefficienti non costanti

    Derv è un nome che ho dato io, con il ciclo che ho fatto dovrebbe calcolare la derivata con la formula del rapporto incrementale.

    l'help dice:
    The quantity diff(y)./diff(x) is an approximate derivative.
    quindi dovrei scrivere una cosa tipo:

    diff(xaE)./diff(zaE)

    e prendere l'ultimo elemento...


    OK
    scrivo: dxaE = diff(xaE(:,1))./diff(zaE);
    e poi prendo l'ultimo elemento e lo passo come condizione iniziale.
    il risultato grafico sembra buono.
  • Re: Equazioni differenziali a coefficienti non costanti

    Bene
Devi accedere o registrarti per scrivere nel forum
473 risposte