[Matlab] Metodo a due passi per Cauchy
L'equazione che ho usato è
\[
\begin{cases}
y'(t)&=4ty^{1/2}(t) \\
y(0)&=1 \\
\end{cases}
\]
Con soluzione
\[
y(t)=(t^{2}+1)^{2}
\]
Il metodo da utilizzare per risolverla è
\[
\begin{cases}
a&=f(t_{i+1},y_{i+1}) \\
b&=f(t_{i},y_{i}) \\
y_{n+2}&=(1+\alpha)f_{n+1}-\alpha f_{i}+(h/2)[(3-\alpha)a-(1+\alpha)b] \\
\end{cases}
\]
L'esercizio chiede di scrivere una funzione che implementi il metodo verificandone il funzionamento per \(\alpha=0,-5\). Il problema è che se con \(\alpha=0\) funziona, non funziona con \(\alpha=-5\). Nel programma ho usato prima eulero per calcolare l'approssimazione al primo passo.
f.m
multistep.m
script.m
L'errore è
Si vede che vengono fuori delle radici complesse. Avete qualche idea? Qualcuno conosce questo metodo?
\[
\begin{cases}
y'(t)&=4ty^{1/2}(t) \\
y(0)&=1 \\
\end{cases}
\]
Con soluzione
\[
y(t)=(t^{2}+1)^{2}
\]
Il metodo da utilizzare per risolverla è
\[
\begin{cases}
a&=f(t_{i+1},y_{i+1}) \\
b&=f(t_{i},y_{i}) \\
y_{n+2}&=(1+\alpha)f_{n+1}-\alpha f_{i}+(h/2)[(3-\alpha)a-(1+\alpha)b] \\
\end{cases}
\]
L'esercizio chiede di scrivere una funzione che implementi il metodo verificandone il funzionamento per \(\alpha=0,-5\). Il problema è che se con \(\alpha=0\) funziona, non funziona con \(\alpha=-5\). Nel programma ho usato prima eulero per calcolare l'approssimazione al primo passo.
f.m
function a=f(t,y)
a=4*t*y^(1./2);multistep.m
function [t ris]=multistep(f,ti,tf,h,yi,k)
%inizializzo
t=ti:h:tf;
y_app(1)=yi;
c1=(1+k);
c2=(3-k);
c3=(1+k);
%metodo eulero
x1=f(t(1),y_app(1));
y_app(2)=y_app(1)+h*x1;
%metodo multistep
for i=1:length(t)-2,
x2=f(t(i+1),y_app(i+1));
x3=f(t(i),y_app(i));
x4=(c2*x2-c3*x3);
y_app(i+2)=c1*y_app(i+1)-k*y_app(i)+(h./2)*x4;
end
ris=y_app;
sol=power((power(t,2)+1),2);
%confronto i grafici
plot(t,ris,'r-.',t,sol,'g-');
legend('Approssimata','Esatta');
title('Metodo multistep a due passi');
xlabel('Tempo');
ylabel('y*(t), y(t)');
script.m
ti=0; tf=2; h=0.1; yi=1; k=0; [t,ris]=multistep(@f,ti,tf,h,yi,k);
L'errore è
Warning: Imaginary parts of complex X and/or Y arguments ignored > In multistep at 27 In script at 8
Si vede che vengono fuori delle radici complesse. Avete qualche idea? Qualcuno conosce questo metodo?