[EX] ODE con metodo di Eulero

Messaggioda feddy » 13/08/2018, 15:28

Ciao a tutti,

propongo il seguente esercizio sul metodo di Eulero. Tutto quello che serve sapere è lo schema numerico che costruisce la soluzione $y_{n+1} \approx y(x_{n+1})$ nella pagina linkata.

Dato il p.d.c
\begin{cases}
y'(x)=-2y(x) \\
y(0.5)=1
\end{cases}

si studi il comportamento della soluzione approssimata mediante il metodo di Eulero, al variare del passo $h$ nell'intervallo $[0.5,6]$. Inoltre, si analizzi il comportamento della soluzione approssimata nel punto $x=6$ quando $h \rarr 0$.

Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2146 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: [EX] ODE con metodo di Eulero

Messaggioda feddy » 14/08/2018, 13:47

Soluzione
Testo nascosto, fai click qui per vederlo
Sia ${y_n}_{n \in \mathbb{N}}$ la successione numerica che approssima la soluzione. Definito $y_0=y(0.5)=1$, lo schema porge $y_{n+}=y_n + h f(t_n,y_n)=y_n - 2h y_n=(1-2h)^n$, da cui per ricorrenza segue subito $y_{n+1}= y_0 \cdot (1-2h)^{n+1}=(1-2h)^{n+1}$.
Evidentemente, detta $y(x)$ la soluzione (unica) del p.d.C, si ha che la soluziona sarà monotona decrescente, e quello ovviamente deve essere che pure la soluzione numerica abbia questo comportamento, perciò deve essere $|1-2h|<1$, da cui $0<h<1$. Qualsiasi altra scelta di $h$ da origine a soluzioni non decrescenti e sono dunque non accettabili.
Per lo studio del comportamento della soluzione per $x=6$ si deve trovare il numero di nodi affinché $y_n$ approssimi $y(6)$, perciò, visto che il passo $h$ è costante segue che $x_n= x_0 + n \cdot h=0.5 + n \cdot h = 6$. L'ultima equazione, risolta per $h$, da come risultato $h=\frac{11}{2n}$.

Si deve quindi studiare nel limite $ h \rarr 0$ la soluzione approssimata. Conviene notare che $h \rarr 0 <=> n \rarr +\infty$, da cui basta studiare il limite $\lim_{n \rarr + \infty} (1-2h)^n= (1-\frac{11}{n})^n= e^{-11}$.

Notando che la soluzione analitica è $y(x)=e^{-2x+1}$, segue che $y_n \rarr_{+\infty} y(6)$


E' molto semplice anche implementare questo metodo in Octave con un ciclo for, e con un ulteriore ciclo se ne può mostrandone pure l'ordine.

Codice:
clear all
close all

#Risoluzione  + CHECK ORDINE


tsrange=[10:10:1000];
count=0;
y0=1;
for ts=tsrange
   count++;
   f=@(y) -2*y;
   x=linspace(0.5,6,ts+1);
   s=@(x) exp(-2*x +1);
   h=(6-0.5)/ts;
   y=zeros(1,ts+1);
   y(1)=y0;
   for n=1:ts
      y(n+1)=y(n) + h*f(y(n)); #Eulero esplicito
   end

   err(count)=norm(s(x)-y(1,:),inf);

end
figure
plot(x,y,'b-o',x,exp(-2*x+1),'r')

figure
loglog(tsrange,err,'*')
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2147 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA


Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite