Risoluzione di un Problema di Cauchy tramite metodo dei trapezi

*martiki*1
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

Risposte
*martiki*1
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...

Raptorista1
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é?

*martiki*1
@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''...

Raptorista1
Per applicare la formula che hai citato:
"*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\).

*martiki*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é :D ).
Per quanto riguarda il secondo invece? Per intenderci quello che mi da risultato -49

Raptorista1
Sì, è tutto sbagliato XD
Non c'è niente da capire: prendi la formula e applicala tre volte!

*martiki*1
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

Raptorista1
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.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.