Метод на Ойлер за решаване на начална задача за ОДУ (задача на Коши)

(E^(-(0.1/1.1)))+(0.1/1.1)

0.1+0.1*1.00401

Оценка на грешката O((h^2))

h=0.1;
(h^2)

програмиране на алгоритъма

Clear[a,b,h,n,f,x,y]
a=1;b=1.5; h=0.1;
n=((b-a)/h);
f[x_,y_]:= (E^(-(y/x)))+(y/x);
i=0;x=1; y=0;
Print[" i = ", i, " (Subscript[x, i]) = ",x, " (Subscript[y, i]) = ",y, " f((Subscript[x, i]),(Subscript[y, i])) = ",f[x,y]]
For[i=1,i≤n,i++,
y=y+h*f[x,y];
x=x+h;
Print[" i = ", i, " (Subscript[x, i]) = ",x, " (Subscript[y, i]) = ",y, " f((Subscript[x, i]),(Subscript[y, i])) = ",f[x,y]]
]

Добавяме пресмятане на точното решение:

Clear[a,b,h,n,f,x,y]
a=1;b=1.5; h=0.1;
n=((b-a)/h);
f[x_,y_]:= (E^(-(y/x)))+(y/x);
yt[x_]:=x Log[1+Log[x]];
i=0;x=1; y=0;
Print[" i = ", i, " (Subscript[x, i]) = ",x, " (Subscript[y, i]) = ",y, " f((Subscript[x, i]),(Subscript[y, i])) = ",f[x,y], "((SuperStar[y]))_i= ",yt[x]]
For[i=1,i≤n,i++,
y=y+h*f[x,y];
x=x+h;
Print[" i = ", i, " (Subscript[x, i]) = ",x, " (Subscript[y, i]) = ",y, " f((Subscript[x, i]),(Subscript[y, i])) = ",f[x,y], "((SuperStar[y]))_i= ",yt[x]]
]

Добавяме пресмятане на истинската грешка:

Clear[a,b,h,n,f,x,y]
a=1;b=1.5; h=0.1;
n=((b-a)/h);
f[x_,y_]:= (E^(-(y/x)))+(y/x);
yt[x_]:=x Log[1+Log[x]];
i=0;x=1; y=0;
r=Abs[y-yt[x]];
Print[" i = ", i, " (Subscript[x, i]) = ",x, " (Subscript[y, i]) = ",y, " f((Subscript[x, i]),(Subscript[y, i])) = ",f[x,y], "((SuperStar[y]))_i= ",yt[x], " (Subscript[r, i]) = ",r]
For[i=1,i≤n,i++,
y=y+h*f[x,y];
x=x+h;
r=Abs[y-yt[x]];
Print[" i = ", i, " (Subscript[x, i]) = ",x, " (Subscript[y, i]) = ",y, " f((Subscript[x, i]),(Subscript[y, i])) = ",f[x,y], "((SuperStar[y]))_i= ",yt[x], " (Subscript[r, i]) = ",r]
]

Пресмятаме с по-голяма точност h = 0.01:

Clear[a,b,h,n,f,x,y]
a=1;b=1.5; h=0.01;
n=((b-a)/h);
f[x_,y_]:= (E^(-(y/x)))+(y/x);
yt[x_]:=x Log[1+Log[x]];
i=0;x=1; y=0;
r=Abs[y-yt[x]];
Print[" i = ", i, " (Subscript[x, i]) = ",x, " (Subscript[y, i]) = ",y, " f((Subscript[x, i]),(Subscript[y, i])) = ",f[x,y], "((SuperStar[y]))_i= ",yt[x], " (Subscript[r, i]) = ",r]
For[i=1,i≤n,i++,
y=y+h*f[x,y];
x=x+h;
r=Abs[y-yt[x]];
Print[" i = ", i, " (Subscript[x, i]) = ",x, " (Subscript[y, i]) = ",y, " f((Subscript[x, i]),(Subscript[y, i])) = ",f[x,y], "((SuperStar[y]))_i= ",yt[x], " (Subscript[r, i]) = ",r]
]

Пресмятаме с по-голяма точност h = 0.001:

Clear[a,b,h,n,f,x,y]
a=1;b=1.5; h=0.001;
n=((b-a)/h);
f[x_,y_]:= (E^(-(y/x)))+(y/x);
yt[x_]:=x Log[1+Log[x]];
i=0;x=1; y=0;
r=Abs[y-yt[x]];
Print[" i = ", i, " (Subscript[x, i]) = ",x, " (Subscript[y, i]) = ",y, " f((Subscript[x, i]),(Subscript[y, i])) = ",f[x,y], "((SuperStar[y]))_i= ",yt[x], " (Subscript[r, i]) = ",r]
For[i=1,i≤n,i++,
y=y+h*f[x,y];
x=x+h;
r=Abs[y-yt[x]];
Print[" i = ", i, " (Subscript[x, i]) = ",x, " (Subscript[y, i]) = ",y, " f((Subscript[x, i]),(Subscript[y, i])) = ",f[x,y], "((SuperStar[y]))_i= ",yt[x], " (Subscript[r, i]) = ",r]
]

Модифициран метод на Ойлер за решаване на начална задача за ОДУ (задача на Коши)

(E^(-(0.05/1.05)))+(0.05/1.05)

Clear[a,b,h,n,f,x,y]
a=1;b=1.5; h=0.1;
n=((b-a)/h);
f[x_,y_]:= (E^(-(y/x)))+(y/x);
yt[x_]:=x Log[1+Log[x]];
i=0;x=1; y=0;
r=Abs[y-yt[x]];
x12=x+(h/2); y12=y+(h/2)f[x,y];
Print[" i = ", i, " (Subscript[x, i]) = ",x, " (Subscript[y, i]) = ",y, " f((Subscript[x, i]),(Subscript[y, i])) = ",f[x,y], "((SuperStar[y]))_i= ",yt[x], " (Subscript[r, i]) = ",r, " (Subscript[x, i + 1/2]) = ",x12, " (Subscript[y, i + 1/2]) = ",y12, " f((Subscript[x, i + 1/2]),(Subscript[y, i + 1/2])) = ",f[x12,y12]]
For[i=1,i≤n,i++,
y=y+h*f[x,y];
x=x+h;
r=Abs[y-yt[x]];
x12=x+(h/2); y12=y+(h/2)f[x,y];
Print[" i = ", i, " (Subscript[x, i]) = ",x, " (Subscript[y, i]) = ",y, " f((Subscript[x, i]),(Subscript[y, i])) = ",f[x,y], "((SuperStar[y]))_i= ",yt[x], " (Subscript[r, i]) = ",r, " (Subscript[x, i + 1/2]) = ",x12, " (Subscript[y, i + 1/2]) = ",y12, " f((Subscript[x, i + 1/2]),(Subscript[y, i + 1/2])) = ",f[x12,y12]]
]

Увеличавам точността <=> намалявам стъпката h = 0.01:

Clear[a,b,h,n,f,x,y]
a=1;b=1.5; h=0.01;
n=((b-a)/h);
f[x_,y_]:= (E^(-(y/x)))+(y/x);
yt[x_]:=x Log[1+Log[x]];
i=0;x=1; y=0;
r=Abs[y-yt[x]];
x12=x+(h/2); y12=y+(h/2)f[x,y];
Print[" i = ", i, " (Subscript[x, i]) = ",x, " (Subscript[y, i]) = ",y, " f((Subscript[x, i]),(Subscript[y, i])) = ",f[x,y], "((SuperStar[y]))_i= ",yt[x], " (Subscript[r, i]) = ",r, " (Subscript[x, i + 1/2]) = ",x12, " (Subscript[y, i + 1/2]) = ",y12, " f((Subscript[x, i + 1/2]),(Subscript[y, i + 1/2])) = ",f[x12,y12]]
For[i=1,i≤n,i++,
y=y+h*f[x,y];
x=x+h;
r=Abs[y-yt[x]];
x12=x+(h/2); y12=y+(h/2)f[x,y];
Print[" i = ", i, " (Subscript[x, i]) = ",x, " (Subscript[y, i]) = ",y, " f((Subscript[x, i]),(Subscript[y, i])) = ",f[x,y], "((SuperStar[y]))_i= ",yt[x], " (Subscript[r, i]) = ",r, " (Subscript[x, i + 1/2]) = ",x12, " (Subscript[y, i + 1/2]) = ",y12, " f((Subscript[x, i + 1/2]),(Subscript[y, i + 1/2])) = ",f[x12,y12]]
]