Está en la página 1de 7

!

"

# $

&

'

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
a:=0;

5y

5 x2

2x

(5

b:=1;
a := 0
b := 1
) -* .

(6

!
"#
$
h:=0.01;
N:=floor((b-a)/h);

"

h := 0.01
N := 100

(7

"#

#%

&

'

)* +

'

M:=array(1..N+2,1..4);
x:=array(1..N+2);
y_exacta:=array(1..N+2);
u_AM:=array(1..N+2);
Error_AM:=array(1..N+2);
M := array 1 ..102, 1 ..4,
x := array 1 ..102,
y_exacta := array 1 ..102,
u_AM := array 1 ..102,
Error_AM := array 1 ..102,
. ' /
,

x[1]:=a;
u_AM[1]:=1;

)
#%

,
.

(8
2

)/
x1 := 0
u_AM1 := 1

for i from 2 to 4 do
x[i]:=x[1]+(i-1)*h;
K1:=h*F(x[i-1],u_AM[i-1]);
K2:=h*F(x[i-1]+(h/2),u_AM[i-1]+(K1/2));

(9

K3:=h*F(x[i-1]+(h/2),u_AM[i-1]+(K2/2));
K4:=h*F(x[i],u_AM[i-1]+K3);
u_AM[i]:=u_AM[i-1]+(1/6)*(K1+2*K2+2*K3+K4);
od:
2
&

%
0
for i from 5 to N+1 do
x[i]:=x[1]+(i-1)*h;

2
W:=F(x[i-4],u_AM[i-4]);
W1:=F(x[i-3],u_AM[i-3]);
W2:=F(x[i-2],u_AM[i-2]);
W3:=F(x[i-1],u_AM[i-1]);
u_AMasterisco[i]:=u_AM[i-1]+(h/24)*(55*W3-59*W2+37*W1-9*W);
W4:=F(x[i],u_AMasterisco[i]);
u_AM[i]:=u_AM[i-1]+(h/24)*(9*W4+19*W3-5*W2+W1);
od:
) 3*
,
&

Fsol:=x->x^2+exp(-5*x);
Fsol := x

x2

5x

(10

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:

(11

"
M[1,1]:='x[i]':
M[1,2]:='Sol._exacta':
M[1,3]:='Sol._Predictor-Corrector':
M[1,4]:='Error_Predictor-Corrector':
for i from 2 to N+1 do
M[i,1]:=x[i-1];
M[i,2]:=y_exacta[i-1];
M[i,3]:=u_AM[i-1];
M[i,4]:=abs(M[i,2]-M[i,3]);
od:
print(M);

xi

Sol._exacta

Sol._Predictor

Corrector Error_Predictor

Corrector

0.01 0.951329424501

0.951329427344

2.843 10-9

0.02 0.905237418036

0.905237423458

5.422 10

-9

0.03 0.861607976425

0.861607984180

7.755 10

-9

0.04 0.820330753078

0.820330751382

1.696 10

-9

0.05 0.781300783071

0.781300772914

1.0157 10

0.06 0.744418220682

0.744418202879

1.7803 10-8

0.07 0.709588089719

0.709588065037

2.4682 10

-8

0.08 0.676720046036

0.676720015188

3.0848 10

-8

0.09 0.645728151622

0.645728115268

3.6354 10

-8

0.10 0.616530659713

0.616530618464

4.1249 10

-8

0.11 0.589049810380

0.589049764800

4.5580 10

-8

0.12 0.563211636094

0.563211586703

4.9391 10

-8

0.13 0.538945776761

0.538945724039

5.2722 10

-8

0.14 0.516185303791

0.516185248181

5.5610 10

-8

0.15 0.494866552741

0.494866494650

5.8091 10

-8

0.16 0.474928964117

0.474928903919

6.0198 10

-8

0.17 0.456314931949

0.456314869987

6.1962 10

-8

0.18 0.438969659741

0.438969596331

6.3410 10

-8

0.19 0.422841023455

0.422840958886

6.4569 10

-8

0.20 0.407879441171

0.407879375707

6.5464 10

-8

-8

) )* 4
&

!"

'
'
Xmin_exacta:=0.377889066588;
Ymin_exacta:=0.293955773283;

"
Xmin_exacta := 0.377889066588
Ymin_exacta := 0.293955773283

(13

Xmin_AdamsMoulton := 0.38
Ymin_AdamsMoulton := 0.293968563008

(14

'
2
for i from 2 to N+1 do
if u_AM[i]<u_AM[i-1] then
Xmin:=x[i];
Ymin:=u_AM[i];
fi;
od;
Xmin_AdamsMoulton:=Xmin;
Ymin_AdamsMoulton:=Ymin;

,
(
A:=array(1..3,1..4);
A := array 1 ..3, 1 ..4,
A[1,1]:='TABLA_COMPARATIVA':
A[1,2]:='Sol._exacta':
A[1,3]:='Met._Adams-Bashforth':
A[1,4]:='Error_Adams-Bashforth':
A[2,1]:='Xmin':
A[3,1]:='Ymin':
A[2,2]:=Xmin_exacta:
A[3,2]:=Ymin_exacta:
A[2,3]:=Xmin_AdamsMoulton:
A[3,3]:=Ymin_AdamsMoulton:
A[2,4]:=abs(Xmin_exacta-Xmin_AdamsMoulton):
A[3,4]:=abs(Ymin_exacta-Ymin_AdamsMoulton):

(15

print(A);
TABLA_COMPARATIVA

Sol._exacta

Met._Adams

Bashforth Error_Adams

Bashforth

Xmin

0.377889066588

0.38

0.002110933412

Ymin

0.293955773283

0.293968563008

0.000012789725

(16

También podría gustarte