Risoluzione di un Problema di Cauchy tramite metodo dei trapezi
Ciao a tutti, mi trovo davanti a un problema presumo semplice ma, in assenza di esempi svolti, sono un po' alla deriva. L'esercizio che mi è stato proposto è molto semplice:
Dato il problema di Cauchy
$ { ( y'=-1000y(t) ),( y(0)=1 ):} $
mi si chiede di calcolare la soluzione numerica in t=0.3 ,usando il passo di discretizzazione h = 0.1 mediante il metodo dei trapezi.
Ora, ho pensato che si dovesse calcolare la soluzione esatta in t=0.3 dell'equazione differenziale e poi confrontarla con il valore calcolato con la formula dei trapezi.
La soluzione generica del PC è (se non ho sbagliato):
$ y(t)=e^(-1000t) $
e $ y(0.3)=e^(-300) $ un valore veramente molto prossimo a zero.
Con il metodo dei trapezi invece:
$ y_(k+1)=y_k+h_k/2*(f(t_k,y_k)+f(t_(k+1),y_(k+1))) $
$ k=0 $
$ y_(1)=y_0+h_k/2*(y(0)+y(0.1))= 1+0.1/2*(1+e^-(1000*0.1))=1.05 $
$ y_(2)=y_1+h_k/2*(y(0.1)+y(0.2))= 1+0.1/2*(1.05+e^-(1000*0.2))=1.0525 $
$ y_(3)=y_2+h_k/2*(y(0.2)+y(0.3))= 1+0.1/2*(1.05+e^-(1000*0.3))=1.0526 $
Come si può vedere y3 è molto diverso dalla soluzione esatta y(0.3). Ho sbagliato a fare il metodo iterativo?
Ringrazio anticipatamente per l'aiuto
Dato il problema di Cauchy
$ { ( y'=-1000y(t) ),( y(0)=1 ):} $
mi si chiede di calcolare la soluzione numerica in t=0.3 ,usando il passo di discretizzazione h = 0.1 mediante il metodo dei trapezi.
Ora, ho pensato che si dovesse calcolare la soluzione esatta in t=0.3 dell'equazione differenziale e poi confrontarla con il valore calcolato con la formula dei trapezi.
La soluzione generica del PC è (se non ho sbagliato):
$ y(t)=e^(-1000t) $
e $ y(0.3)=e^(-300) $ un valore veramente molto prossimo a zero.
Con il metodo dei trapezi invece:
$ y_(k+1)=y_k+h_k/2*(f(t_k,y_k)+f(t_(k+1),y_(k+1))) $
$ k=0 $
$ y_(1)=y_0+h_k/2*(y(0)+y(0.1))= 1+0.1/2*(1+e^-(1000*0.1))=1.05 $
$ y_(2)=y_1+h_k/2*(y(0.1)+y(0.2))= 1+0.1/2*(1.05+e^-(1000*0.2))=1.0525 $
$ y_(3)=y_2+h_k/2*(y(0.2)+y(0.3))= 1+0.1/2*(1.05+e^-(1000*0.3))=1.0526 $
Come si può vedere y3 è molto diverso dalla soluzione esatta y(0.3). Ho sbagliato a fare il metodo iterativo?
Ringrazio anticipatamente per l'aiuto
Risposte
Più che altro parte tutto da questo dubbio: il problema di Cauchy nelle dispense è stato definito in questo modo
$ y'(t)=f(t,y(t)) $
$ y(t_0)=y_0 $
Non vorrei quindi che quella f(t,y(t)) che compare nella formula del metodo fosse in realtà $-1000e^-(1000t)$
Così facendo però i tre passi vengono tutti uguali a -49.
Non so proprio cosa pensare a questo punto...
$ y'(t)=f(t,y(t)) $
$ y(t_0)=y_0 $
Non vorrei quindi che quella f(t,y(t)) che compare nella formula del metodo fosse in realtà $-1000e^-(1000t)$
Così facendo però i tre passi vengono tutti uguali a -49.
Non so proprio cosa pensare a questo punto...
Il tuo risultato è sicuramente sbagliato perché la tua soluzione parte con derivata negativa e cresce anziché diminuire.
Nelle formule per \(y_i\), anziché mettere \(f(t,y(t)) = -1000y(t)\) metti semplicemente \(y(t)\), nonostante sopra l'avessi scritta correttamente. Perché?
Nelle formule per \(y_i\), anziché mettere \(f(t,y(t)) = -1000y(t)\) metti semplicemente \(y(t)\), nonostante sopra l'avessi scritta correttamente. Perché?
@raptorista
Purtroppo non ho mai fatto esercizi simili e non ho nemmeno un modello a cui riferirmi, ho provato quindi diverse strade. Non capisco però a quale risultato ti riferisci quando dici che è sbagliato e cosa intendi con "la la tua soluzione parte con derivata negativa''...
Purtroppo non ho mai fatto esercizi simili e non ho nemmeno un modello a cui riferirmi, ho provato quindi diverse strade. Non capisco però a quale risultato ti riferisci quando dici che è sbagliato e cosa intendi con "la la tua soluzione parte con derivata negativa''...
Per applicare la formula che hai citato:
non servono modelli, hai già tutto.
La tua soluzione (\(y\)) è sbagliata perché in \(t=0\) vale \(1\), la sua derivata è \(y'(0) = -1000\) ed il valore che trovi all'istante successivo è \(1.05 > 1\).
"*martiki*":
$ y_(k+1)=y_k+h_k/2*(f(t_k,y_k)+f(t_(k+1),y_(k+1))) $
non servono modelli, hai già tutto.
La tua soluzione (\(y\)) è sbagliata perché in \(t=0\) vale \(1\), la sua derivata è \(y'(0) = -1000\) ed il valore che trovi all'istante successivo è \(1.05 > 1\).
"Raptorista":
Per applicare la formula che hai citato:
[quote="*martiki*"]
$ y_(k+1)=y_k+h_k/2*(f(t_k,y_k)+f(t_(k+1),y_(k+1))) $
La tua soluzione (\(y\)) è sbagliata perché in \(t=0\) vale \(1\), la sua derivata è \(y'(0) = -1000\) ed il valore che trovi all'istante successivo è \(1.05 > 1\).[/quote]
Scusami ma non sto ancora capendo. La risoluzione "analitica" del PC è corretta? Ovvero $ y(t)=e^-(1000t) $ no? Tu dici, se ho capito bene che è sbagliato il primo metodo di risoluzione che ho proposto (quello ho capito perché

Per quanto riguarda il secondo invece? Per intenderci quello che mi da risultato -49
Sì, è tutto sbagliato XD
Non c'è niente da capire: prendi la formula e applicala tre volte!
Non c'è niente da capire: prendi la formula e applicala tre volte!
Fin lì c'ero arrivata... evidentemente applico male la formula ma non capisco dove!
Io farei così:
Dato $ y(t)=e^(-1000t) $
$ f(t_0,y_0)= -1000e^(-1000*0)=-1000 $
$ f(t_1,y_1)= -1000e^(-1000*0.1)=-1000e^-100 $
$ f(t_2,y_2)= -1000e^(-1000*0.2)=-1000e^-200 $
Inserendo nella formula viene
$ y_1= y_0+ h/2*(f(t_0,y_0)+ f(t_1,y_1))= 1+0.1/2*(-1000-1000e^-100)=-49 $
$ y_2= y_1+ h/2*(f(t_1,y_1)+ f(t_2,y_2))= -49+0.1/2*(-1000e^-100-1000e^-200)=-49 $
$ y_3= y_2+ h/2*(f(t_2,y_2)+ f(t_3,y_3))= -49+0.1/2*(-1000e^-200-1000e^-300)=-49 $
Viene (ovviamente dato che i numeri sono piccolissimi) sempre -49 e non capisco dove sto sbagliando. Sarò incapace ma non ne sto venendo fuori
Io farei così:
Dato $ y(t)=e^(-1000t) $
$ f(t_0,y_0)= -1000e^(-1000*0)=-1000 $
$ f(t_1,y_1)= -1000e^(-1000*0.1)=-1000e^-100 $
$ f(t_2,y_2)= -1000e^(-1000*0.2)=-1000e^-200 $
Inserendo nella formula viene
$ y_1= y_0+ h/2*(f(t_0,y_0)+ f(t_1,y_1))= 1+0.1/2*(-1000-1000e^-100)=-49 $
$ y_2= y_1+ h/2*(f(t_1,y_1)+ f(t_2,y_2))= -49+0.1/2*(-1000e^-100-1000e^-200)=-49 $
$ y_3= y_2+ h/2*(f(t_2,y_2)+ f(t_3,y_3))= -49+0.1/2*(-1000e^-200-1000e^-300)=-49 $
Viene (ovviamente dato che i numeri sono piccolissimi) sempre -49 e non capisco dove sto sbagliando. Sarò incapace ma non ne sto venendo fuori
Sbagli nel fatto che stai usando la soluzione analitica per fare i conti numerici, ma la soluzione analitica in generale non ce l'hai!
Devi usare \(y(t_n)\), sostituendo quelle note e tenendo come incognite quelle ignote; se il metodo è implicito, ad ogni passo dovrai poi risolvere un'equazione per ricavare il valore successivo.
Devi usare \(y(t_n)\), sostituendo quelle note e tenendo come incognite quelle ignote; se il metodo è implicito, ad ogni passo dovrai poi risolvere un'equazione per ricavare il valore successivo.