" #"$ %
&
'
&
&
restart;
Digits:=12;
Digits := 12
$#$#( ) *
(1
deq:=D(y)(x)=-5*y(x)+5*x^2+2*x;
deq := D y x = 5 y x
5x
2x
(2
Cinic:=y(0)=1;
Cinic := y 0 = 1
(3
Sol:=dsolve({deq,Cinic},y(x));
2
Sol := y x = x
5x
(4
F:=(x,y)->-5*y+5*x^2+2*x;
F := x, y
5y
5x
2x
(5
a:=0;
b:=1;
a := 0
b := 1
$#$ (
!" #$
(6
!
"#
$
h:=0.1;
N:=floor((b-a)/h);
"
h := 0.1
N := 10
"#
%
M:=array(1..N+2,1..8);
x:=array(1..N+2);
y_exacta:=array(1..N+2);
u_Euler:=array(1..N+2);
Error_Euler:=array(1..N+2);
u_Taylor:=array(1..N+2);
Error_Taylor:=array(1..N+2);
u_RK:=array(1..N+2);
Error_RK:=array(1..N+2);
(7
&
(8
$
(
x[1]:=a;
u_Euler[1]:=1;
x1 := 0
u_Euler1 := 1
#%
(9
(
x[1]:=a;
u_Taylor[1]:=1;
x1 := 0
u_Taylor1 := 1
(10
y_prima:=-5*y+5*x^2+2*x;
Dy:=diff(-5*y+5*x^2+2*x,y);
Dx:=diff(-5*y+5*x^2+2*x,x);
2
y_prima := 5 y 5 x
Dy := 5
Dx := 10 x 2
2x
(11
T1:=Dy*y_prima+Dx;
T1 := 25 y
25 x
(12
F1:=(x,y)->25*y-25*x^2+2;
F1 := x, y
)
#%
+
,
for i from 2 to N+1 do
x[i]:=x[1]+(i-1)*h;
T:=F(x[i-1],u_Taylor[i-1]);
T1:=F1(x[i-1],u_Taylor[i-1]);
u_Taylor[i]:=u_Taylor[i-1]+h*(T+(h/2)*T1);
od:
,
'
25 y
(
x[1]:=a;
u_RK[1]:=1;
25 x
(13
x1 := 0
u_RK1 := 1
(14
#%
./
0
for i from 2 to N+1 do
x[i]:=x[1]+(i-1)*h;
K1:=h*F(x[i-1],u_RK[i-1]);
K2:=h*F(x[i-1]+(h/2),u_RK[i-1]+(K1/2));
K3:=h*F(x[i-1]+(h/2),u_RK[i-1]+(K2/2));
K4:=h*F(x[i],u_RK[i-1]+K3);
u_RK[i]:=u_RK[i-1]+(1/6)*(K1+2*K2+2*K3+K4);
od:
$#$-( %
+
$
(
Fsol:=x->x^2+exp(-5*x);
Fsol := x
5x
(15
x[1]:=a;
y_exacta[1]:=1;
x1 := 0
y_exacta1 := 1
for i from 2 to N+1 do
x[i]:=x[i-1]+h;
y_exacta[i]:=Fsol(x[i]);
od:
1
"
M[1,1]:='x[i]':
M[1,2]:='Sol._exacta':
M[1,3]:='Sol._Euler':
M[1,4]:='Error_Euler':
M[1,5]:='Sol._Taylor2':
M[1,6]:='Error_Taylor2':
M[1,7]:='Sol._Runge-Kutta4':
M[1,8]:='Error_Runge-Kutta4':
for i from 2 to N+1 do
(16
M[i,1]:=x[i-1];
M[i,2]:=y_exacta[i-1];
M[i,3]:=u_Euler[i-1];
M[i,4]:=abs(M[i,2]-M[i,3]);
M[i,5]:=u_Taylor[i-1];
M[i,6]:=abs(M[i,2]-M[i,5]);
M[i,7]:=u_RK[i-1];
M[i,8]:=abs(M[i,2]-M[i,7]);
od:
print(M);
xi, Sol._exacta, Sol._Euler, Error_Euler, Sol._Taylor2, Error_Taylor2, Sol._Runge
Kutta4, Error_Runge
Kutta4 ,
0, 1, 1, 0, 1, 0, 1, 0 ,
0.1, 0.616530659713, 0.5, 0.116530659713, 0.635000000000, 0.018469340287, 0.616796875000, 0.000266215287 ,
0.2, 0.407879441171, 0.275, 0.132879441171, 0.430625000000, 0.022745558829, 0.408212687174, 0.000333246003 ,
0.3, 0.313130160148, 0.1975, 0.115630160148, 0.334140625000, 0.021010464852, 0.313446760708, 0.000316600560 ,
0.4, 0.295335283237, 0.20375, 0.091585283237, 0.312587890625, 0.017252607388, 0.295607018866, 0.000271735629 ,
0.5, 0.332084998624, 0.261875, 0.070209998624, 0.345367431641, 0.013282433017, 0.332308425509, 0.000223426885 ,
0.6, 0.409787068368, 0.3559375, 0.053849568368, 0.419604644776, 0.009817576408, 0.409968393604, 0.000181325236 ,
0.7, 0.520197383422, 0.47796875, 0.042228633422, 0.527252902985, 0.007055519563, 0.520345405494, 0.000148022072 ,
0.8, 0.658315638889, 0.623984375, 0.034331263889, 0.663283064366, 0.004967425477, 0.658438748646, 0.000123109757 ,
0.9, 0.821108996538, 0.7919921875, 0.029116809038, 0.824551915229, 0.003442918691, 0.821214136549, 0.000105140011
,
1.0, 1.00673794700, 0.98099609375, 0.02574185325, 1.00909494702, 0.00235700002, 1.00683045264, 0.00009250564
$
with(plots):
gr_Ec:=plot(x^2+exp(-5*x),x=0..1,y=0..1.1,color=blue,thickness=1):
gr_Euler:=plot([[x[1],u_Euler[1]],[x[2],u_Euler[2]],[x[3],u_Euler[3]],[x[4],u_Euler[4]
],[x[5],u_Euler[5]],[x[6],u_Euler[6]],[x[7],u_Euler[7]],[x[8],u_Euler[8]],[x[9],u_Euler
[9]],[x[10],u_Euler[10]],[x[11],u_Euler[11]]],color=black,style=point,symbol=box):
gr_Taylor:=plot([[x[1],u_Taylor[1]],[x[2],u_Taylor[2]],[x[3],u_Taylor[3]],[x[4],
u_Taylor[4]],[x[5],u_Taylor[5]],[x[6],u_Taylor[6]],[x[7],u_Taylor[7]],[x[8],u_Taylor[8]],
(17
[x[9],u_Taylor[9]],[x[10],u_Taylor[10]],[x[11],u_Taylor[11]]],color=red,style=point,
symbol=circle):
gr_RK:=plot([[x[1],u_RK[1]],[x[2],u_RK[2]],[x[3],u_RK[3]],[x[4],u_RK[4]],[x[5],u_RK[5]],
[x[6],u_RK[6]],[x[7],u_RK[7]],[x[8],u_RK[8]],[x[9],u_RK[9]],[x[10],u_RK[10]],[x[11],
u_RK[11]]],color=violet,style=point,symbol=diamond):
display(gr_Ec,gr_Euler,gr_Taylor,gr_RK);
0.8
0.6
y
0.4
0.2
0
0
0.2
0.4
0.6
x
$#$ ( %.
&
'
&
&
($
0.8
&
&
Xmin_exacta:=0.377889066588;
Ymin_exacta:=0.293955773283;
"
Xmin_exacta := 0.377889066588
Ymin_exacta := 0.293955773283
&
,
(18
$
for i from 2 to N+1 do
if u_Euler[i]<u_Euler[i-1] then
Xmin:=x[i];
Ymin:=u_Euler[i];
fi;
od;
Xmin_Euler:=Xmin;
Ymin_Euler:=Ymin;
Xmin_Euler := 0.3
Ymin_Euler := 0.1975
(19
$
for i from 2 to N+1 do
if u_Taylor[i]<u_Taylor[i-1] then
Xmin:=x[i];
Ymin:=u_Taylor[i];
fi;
od;
Xmin_Taylor:=Xmin;
Ymin_Taylor:=Ymin;
Xmin_Taylor := 0.4
Ymin_Taylor := 0.312587890625
$
for i from 2 to N+1 do
if u_RK[i]<u_RK[i-1] then
Xmin:=x[i];
Ymin:=u_RK[i];
(20
fi;
od;
Xmin_RungeKutta:=Xmin;
Ymin_RungeKutta:=Ymin;
Xmin_RungeKutta := 0.4
Ymin_RungeKutta := 0.295607018866
%
(21
1
A:=array(1..3,1..8);
A := array 1 ..3, 1 ..8,
A[1,1]:='TABLA_COMPARATIVA':
A[1,2]:='Sol._exacta':
A[1,3]:='Met._Euler':
A[1,4]:='Error_Euler':
A[1,5]:='Met._Taylor2':
A[1,6]:='Error_Taylor2':
A[1,7]:='Met._Runge-Kutta4':
A[1,8]:='Error_Runge-Kutta4':
A[2,1]:='Xmin':
A[3,1]:='Ymin':
A[2,2]:=Xmin_exacta:
A[3,2]:=Ymin_exacta:
A[2,3]:=Xmin_Euler:
A[3,3]:=Ymin_Euler:
A[2,4]:=abs(Xmin_exacta-Xmin_Euler):
A[3,4]:=abs(Ymin_exacta-Ymin_Euler):
A[2,5]:=Xmin_Taylor:
A[3,5]:=Ymin_Taylor:
A[2,6]:=abs(Xmin_exacta-Xmin_Taylor):
A[3,6]:=abs(Ymin_exacta-Ymin_Taylor):
A[2,7]:=Xmin_RungeKutta:
A[3,7]:=Ymin_RungeKutta:
A[2,8]:=abs(Xmin_exacta-Xmin_RungeKutta):
A[3,8]:=abs(Ymin_exacta-Ymin_RungeKutta):
print(A);
TABLA_COMPARATIVA, Sol._exacta, Met._Euler, Error_Euler, Met._Taylor2, Error_Taylor2, Met._Runge
Error_Runge Kutta4 ,
(22
Kutta4,
(23
!" "#$ %
&
'
&
&
restart;
Digits:=12;
Digits := 12
$ $#( ) *
(1
deq:=D(y)(x)=-5*y(x)+5*x^2+2*x;
deq := D y x = 5 y x
5x
2x
(2
Cinic:=y(0)=1;
Cinic := y 0 = 1
(3
Sol:=dsolve({deq,Cinic},y(x));
2
Sol := y x = x
5x
(4
F:=(x,y)->-5*y+5*x^2+2*x;
F := x, y
5y
5x
2x
(5
a:=0;
b:=1;
a := 0
b := 1
$ $ (
!" #$
(6
!
"#
$
h:=0.01;
N:=floor((b-a)/h);
"
h := 0.01
N := 100
"#
%
M:=array(1..N+2,1..8);
x:=array(1..N+2);
y_exacta:=array(1..N+2);
u_Euler:=array(1..N+2);
Error_Euler:=array(1..N+2);
u_Taylor:=array(1..N+2);
Error_Taylor:=array(1..N+2);
u_RK:=array(1..N+2);
Error_RK:=array(1..N+2);
(7
&
(8
$
(
x[1]:=a;
u_Euler[1]:=1;
x1 := 0
u_Euler1 := 1
#%
(9
(
x[1]:=a;
u_Taylor[1]:=1;
x1 := 0
u_Taylor1 := 1
(10
y_prima:=-5*y+5*x^2+2*x;
Dy:=diff(-5*y+5*x^2+2*x,y);
Dx:=diff(-5*y+5*x^2+2*x,x);
2
y_prima := 5 y 5 x
Dy := 5
Dx := 10 x 2
2x
(11
T1:=Dy*y_prima+Dx;
T1 := 25 y
25 x
(12
F1:=(x,y)->25*y-25*x^2+2;
F1 := x, y
)
#%
+
,
for i from 2 to N+1 do
x[i]:=x[1]+(i-1)*h;
T:=F(x[i-1],u_Taylor[i-1]);
T1:=F1(x[i-1],u_Taylor[i-1]);
u_Taylor[i]:=u_Taylor[i-1]+h*(T+(h/2)*T1);
od:
,
'
25 y
(
x[1]:=a;
u_RK[1]:=1;
25 x
(13
x1 := 0
u_RK1 := 1
(14
(
Fsol:=x->x^2+exp(-5*x);
Fsol := x
x2
5x
(15
x[1]:=a;
y_exacta[1]:=1;
x1 := 0
y_exacta1 := 1
for i from 2 to N+1 do
x[i]:=x[i-1]+h;
y_exacta[i]:=Fsol(x[i]);
od:
-
"
M[1,1]:='x[i]':
M[1,2]:='Sol._exacta':
M[1,3]:='Sol._Euler':
M[1,4]:='Error_Euler':
M[1,5]:='Sol._Taylor2':
M[1,6]:='Error_Taylor2':
M[1,7]:='Sol._Runge-Kutta4':
M[1,8]:='Error_Runge-Kutta4':
for i from 2 to N+1 do
M[i,1]:=x[i-1];
(16
M[i,2]:=y_exacta[i-1];
M[i,3]:=u_Euler[i-1];
M[i,4]:=abs(M[i,2]-M[i,3]);
M[i,5]:=u_Taylor[i-1];
M[i,6]:=abs(M[i,2]-M[i,5]);
M[i,7]:=u_RK[i-1];
M[i,8]:=abs(M[i,2]-M[i,7]);
od:
print(M);
xi, Sol._exacta, Sol._Euler, Error_Euler, Sol._Taylor2, Error_Taylor2, Sol._Runge
Kutta4, Error_Runge
Kutta4 ,
(17
0, 1, 1, 0, 1, 0, 1, 0 ,
0.01, 0.951329424501, 0.95, 0.001329424501, 0.951350000000, 0.000020575499, 0.951329427344, 2.843 10
-9
-9
,
-9
,
-9
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-9
-9
-9
-9
-9
-9
-9
-9
-9
-9
-9
-9
-9
-9
-9
-9
-9
-9
-9
-9
-9
&
'
&
&
($
-9
&
&
Xmin_exacta:=0.377889066588;
Ymin_exacta:=0.293955773283;
"
Xmin_exacta := 0.377889066588
Ymin_exacta := 0.293955773283
&
,
(18
$
for i from 2 to N+1 do
if u_Euler[i]<u_Euler[i-1] then
Xmin:=x[i];
Ymin:=u_Euler[i];
fi;
od;
Xmin_Euler:=Xmin;
Ymin_Euler:=Ymin;
Xmin_Euler := 0.38
Ymin_Euler := 0.285080532829
(19
$
for i from 2 to N+1 do
if u_Taylor[i]<u_Taylor[i-1] then
Xmin:=x[i];
Ymin:=u_Taylor[i];
fi;
od;
Xmin_Taylor:=Xmin;
Ymin_Taylor:=Ymin;
Xmin_Taylor := 0.38
Ymin_Taylor := 0.294091607292
$
for i from 2 to N+1 do
if u_RK[i]<u_RK[i-1] then
Xmin:=x[i];
Ymin:=u_RK[i];
(20
fi;
od;
Xmin_RungeKutta:=Xmin;
Ymin_RungeKutta:=Ymin;
Xmin_RungeKutta := 0.38
Ymin_RungeKutta := 0.293968639198
%
(21
A:=array(1..3,1..8);
A := array 1 ..3, 1 ..8,
A[1,1]:='TABLA_COMPARATIVA':
A[1,2]:='Sol._exacta':
A[1,3]:='Met._Euler':
A[1,4]:='Error_Euler':
A[1,5]:='Met._Taylor2':
A[1,6]:='Error_Taylor2':
A[1,7]:='Met._Runge-Kutta4':
A[1,8]:='Error_Runge-Kutta4':
A[2,1]:='Xmin':
A[3,1]:='Ymin':
A[2,2]:=Xmin_exacta:
A[3,2]:=Ymin_exacta:
A[2,3]:=Xmin_Euler:
A[3,3]:=Ymin_Euler:
A[2,4]:=abs(Xmin_exacta-Xmin_Euler):
A[3,4]:=abs(Ymin_exacta-Ymin_Euler):
A[2,5]:=Xmin_Taylor:
A[3,5]:=Ymin_Taylor:
A[2,6]:=abs(Xmin_exacta-Xmin_Taylor):
A[3,6]:=abs(Ymin_exacta-Ymin_Taylor):
A[2,7]:=Xmin_RungeKutta:
A[3,7]:=Ymin_RungeKutta:
A[2,8]:=abs(Xmin_exacta-Xmin_RungeKutta):
A[3,8]:=abs(Ymin_exacta-Ymin_RungeKutta):
print(A);
TABLA_COMPARATIVA, Sol._exacta, Met._Euler, Error_Euler, Met._Taylor2, Error_Taylor2, Met._Runge
Error_Runge Kutta4 ,
(22
Kutta4,
(23