Metoda Eulera-Cauchy zwana też metodą punktu środkowego bazuje na następującym równaniu rekurencyjnym:
\(\displaystyle{ y_{i+1} = y_{i} + h\left [ x_{i}+ \frac{1}{2}h, y_{i} + \frac{1}{2}f(x_{i},y_{i})] \right]. }\)
Algorytm metody
\(\displaystyle{ h \leftarrow \frac{b-a}{N} }\)
\(\displaystyle{ y_{0} \leftarrow y(a) }\)
\(\displaystyle{ dla \ \ i = 0,1,...,N-1 }\)
\(\displaystyle{ k_{1} \leftarrow f(t_{i},y_{i}) }\)
\(\displaystyle{ k_{2} \leftarrow f \left (t_{i} + \frac{h}{2} , y_{i} + \frac{h}{2}k_{1}\right)}\)
\(\displaystyle{ y_{I+1} \leftarrow y_{i} + kh_{2} }\)
Metoda Eulera - Cauchy jest metodą rzędu drugiego (lokalny błąd obcięcia wynosi \(\displaystyle{ O(h^3) }\)) (*).
Z analizą zbieżności i analizą wpływu błędów zaokrągleń w arytmetyce zmiennoprzecinkowej dla tej metody można zapoznać się w (*).
(*) JANINA i MICHAŁ JANKOWSCY Przegląd metod i algorytmów numerycznych. Część 1. WNT Warszawa 1981.
Program w MATLAB
Kod: Zaznacz cały
function euler_cauchy(f,a,b,y0,n)
% Rozwiązuje problem początkowy y'=f(t,y), y(a)=y0
% Metodą Eulera-Cauchy.
fprintf('\n')
disp('Metoda Eulera-Cauchy')
disp('_______________________________________________')
disp(' t k1 k2 y ')
disp('_______________________________________________')
fprintf('\n')
h=(b-a)/n;
y=y0;
m=feval(f,a,y0);
fprintf('%6.2f ----- ----- %12.6f\n',a,y)
for i=1:n
t=a+(i-1)*h;
k1=feval(f,t,y);
k2=feval(f,t+h/2,y+h*k1/2);
y=y+h*k2;
t=t+h;
fprintf('%6.2f %12.6f %12.6f %12.6f\n',t,k1,k2,y)
end
Przykład
Kod: Zaznacz cały
function f=f1(t,y)
f=2*t-y;
>> euler_cauchy('f1',0,1,-1,10)
Metoda Eulera-Cauchy
_______________________________________________
t k1 k2 y
_______________________________________________
0.00 ----- ----- -1.000000
0.10 1.000000 1.050000 -0.895000
0.20 1.095000 1.140250 -0.780975
0.30 1.180975 1.221926 -0.658782
0.40 1.258782 1.295843 -0.529198
0.50 1.329198 1.362738 -0.392924
0.60 1.392924 1.423278 -0.250596
0.70 1.450596 1.478067 -0.102790
0.80 1.502790 1.527650 0.049975
0.90 1.550025 1.572524 0.207228
1.00 1.592772 1.613134 0.368541