Вы находитесь на странице: 1из 8

UNIVERSIDAD NACIONAL SAN ANTONIO ABAB DEL

CUSCO
ESCUELA PROFESIONAL
DE INGENIERIA ELECTRICA

ASIGNACION:
MÉTODOS NUMÉRICOS:
 EULER
 MÉTODO DE PUNTO MEDIO
 EULER MODIFICADO
 HEUN
 MÉTODOS DE RUNGE KUTTA 2

CURSO: ANALISIS NUMERICO

DOCENTE: ENCISO ROJAS LAURO

ALUMNOS: CASILLA SUCLLI PABLO 154777


MÉTODOS NUMÉRICOS: MÉTODO DE PUNTO MEDIO, EULER MODIFICADO,
HEUN, MÉTODOS DE RUNGE-KUTTA 2

function ecudifRK(f,a,b,alpha,N,c,y)
h=(b-a)/N;
t=a;
w=alpha;
ya(1,1)=t;
ya(1,2)=w;

if c=='1'
for i=1:N
w=w+h*f(t,w);
t=a+i*h;
ya(i+1,1)=t;
ya(i+1,2)=w;
end

elseif c=='M'
for i=1:N
k1=h*f(t,w);
k2=h*f(t+h/2,w+k1/2);
w=w+k2;
t=a+i*h;
ya(i+1,1)=t;
ya(i+1,2)=w;
end

elseif c=='EM'
for i=1:N
k1=h*f(t,w);
k2=h*f(t+h/2,w+k1);
w=w+(1/2)*(k1+k2);
t=a+i*h;
ya(i+1,1)=t;
ya(i+1,2)=w;
end
elseif c=='H'
for i=1:N
k1=h*f(t,w);
k2=h*f(t+(2/3)*h,w+(2/3)*k1);
w=w+(1/4)*(k1+3*k2);
t=a+i*h;
ya(i+1,1)=t;
ya(i+1,2)=w;
end
elseif c=='4'
for i=1:N
k1=h*f(t,w);
k2=h*f(t+h/2,w+k1/2);
k3=h*f(t+h/2,w+k2/2);
k4=h*f(t+h,w+k3);
w=w+(1/6)*(k1+2*k2+2*k3+k4);
t=a+i*h;
ya(i+1,1)=t;
ya(i+1,2)=w;
end
else
fprintf('valor de metodo incorrecto')
end
t=a:0.01:b;
plot(ya(:,1),ya(:,2),'ro')

if isa(y,'function_handle')
t=a:0.01:b;
hold on
plot(t,y(t),'b')

ya(:,3)=y(ya(:,1));
ya(1,4)=y(a)-alpha;
ya(1,5)=abs(y(a)-alpha);
for i=1:N
ya(i+1,4)=y(ya(i+1,1))-ya(i+1,2);
ya(i+1,5)=abs(y(ya(i+1,1))-ya(i+1,2));
end
end
ya
end

>> f=@(t,y) -(t.^2).*y


f =
@(t,y)-(t.^2).*y
>> y=@(t) 2*exp(-(t.^3)/3)
y =
@(t)2*exp(-(t.^3)/3)

>> ecudifRK(f,0,2,2,10,'M',y)

ya =
0 2.0000 2.0000 0 0
0.2000 1.9960 1.9947 -0.0013 0.0013
0.4000 1.9602 1.9578 -0.0024 0.0024
0.6000 1.8638 1.8611 -0.0027 0.0027
0.8000 1.6877 1.6862 -0.0015 0.0015
1.0000 1.4318 1.4331 0.0013 0.0013
1.2000 1.1199 1.1243 0.0043 0.0043
1.4000 0.7959 0.8013 0.0054 0.0054
1.6000 0.5080 0.5106 0.0026 0.0026
1.8000 0.2895 0.2863 -0.0033 0.0033
2.0000 0.1482 0.1390 -0.0092 0.0092

>> ecudifRK(f,0,2,2,10,'EM',y)

ya =

0 2.0000 2.0000 0 0
0.2000 1.9980 1.9947 -0.0033 0.0033
0.4000 1.9722 1.9578 -0.0144 0.0144
0.6000 1.8929 1.8611 -0.0318 0.0318
0.8000 1.7387 1.6862 -0.0525 0.0525
1.0000 1.5046 1.4331 -0.0715 0.0715
1.2000 1.2085 1.1243 -0.0842 0.0842
1.4000 0.8891 0.8013 -0.0877 0.0877
1.6000 0.5932 0.5106 -0.0826 0.0826
1.8000 0.3577 0.2863 -0.0714 0.0714
2.0000 0.1963 0.1390 -0.0574 0.0574

>> ecudifRK(f,0,2,2,10,'H',y)

ya =

0 2.0000 2.0000 0 0
0.2000 1.9947 1.9947 0.0000 0.0000
0.4000 1.9576 1.9578 0.0002 0.0002
0.6000 1.8602 1.8611 0.0009 0.0009
0.8000 1.6839 1.6862 0.0023 0.0023
1.0000 1.4287 1.4331 0.0043 0.0043
1.2000 1.1187 1.1243 0.0056 0.0056
1.4000 0.7971 0.8013 0.0042 0.0042
1.6000 0.5114 0.5106 -0.0008 0.0008
1.8000 0.2941 0.2863 -0.0079 0.0079
2.0000 0.1528 0.1390 -0.0138 0.0138
>> ecudifRK(f,0,2,2,10,'4',y)

ya =

0 2.0000 2.0000 0 0
0.2000 1.9947 1.9947 0.0000 0.0000
0.4000 1.9578 1.9578 0.0000 0.0000
0.6000 1.8611 1.8611 0.0000 0.0000
0.8000 1.6862 1.6862 0.0000 0.0000
1.0000 1.4331 1.4331 0.0000 0.0000
1.2000 1.1243 1.1243 -0.0000 0.0000
1.4000 0.8013 0.8013 -0.0000 0.0000
1.6000 0.5107 0.5106 -0.0001 0.0001
1.8000 0.2865 0.2863 -0.0003 0.0003
2.0000 0.1395 0.1390 -0.0005 0.0005

OTRA FORMA DE DETERMINAR EULER, EULER_MEJORADO Y RUNGE KUTTA


4TO ORDENPOR MATLAB

1)
function S=euler(f,Xo,b,h,Yo)
X=Xo;
Y=Yo;
n=(b-Xo)/h;
i=1;
for k=1:n
Y(i+1)=Y(i)+h*feval(f,X(i),Y(i));
X(i+1)=Xo+i*h;
i=i+1;
end
S=[X' Y'];

>> f=inline('-(t.^2).*y')

f =

Inline function:
f(t,y) = -(t.^2).*y

>> euler(f,0,2,0.5,10)

ans =

0 10.0000
0.5000 10.0000
1.0000 8.7500
1.5000 4.3750
2.0000 -0.5469

2)
function Euler_mejorado(f,x,y,h,lim)
xn(1)=x;
yn(1)=y;
i=1;
while(x<=lim)
y=y+h*(((x^2-y)+((x+h)*y+h*(x^2-y)))/2);
fprintf('y%~%.4f\n\n',i,y);
x=x+h;
i=i+1;
xn(i)=x;
yn(i)=y;
end
xn
yn
end

>> f=inline('-(t.^2).*y')

f =

Inline function:
f(t,y) = -(t.^2).*y

>> Euler_mejorado(f,0,2,0.5,10)
yyyyyyyyyyyyyyyyyyyyy
xn =

Columns 1 through 6

0 0.5000 1.0000 1.5000 2.0000 2.5000

Columns 7 through 12

3.0000 3.5000 4.0000 4.5000 5.0000 5.5000

Columns 13 through 18

6.0000 6.5000 7.0000 7.5000 8.0000 8.5000

Columns 19 through 22
9.0000 9.5000 10.0000 10.5000

yn =

1.0e+06 *

Columns 1 through 6

0.0000 0.0000 0.0000 0.0000 0.0000 0.0000

Columns 7 through 12

0.0000 0.0000 0.0000 0.0001 0.0001 0.0003

Columns 13 through 18

0.0006 0.0013 0.0031 0.0077 0.0203 0.0559

Columns 19 through 22

0.1606 0.4819 1.5060 4.8945

3)
runge kutta 4to orden
function S=rk4(f,Xo,b,h,Yo)
X=Xo;
Y=Yo;
n=(b-Xo)/h;
i=1;
for k=1:n
k1=feval(f,X(i),Y(i));
k2=feval(f,X(i)+1/2*h,Y(i)+1/2*k1*h);
k3=feval(f,X(i)+1/2*h,Y(i)+1/2*k2*h);
k4=feval(f,X(i)+h,Y(i)+k3*h);
Y(i+1)=Y(i)+1/6*(k1+2*k2+2*k3+k4)*h;
X(i+1)=Xo+i*h;
i=i+1;
end
S=[X' Y'];

>> f=inline('-(t.^2).*y')

f=
Inline function:
f(t,y) = -(t.^2).*y

>> rk4(f,0,2,0.5,10)

ans =

0 10.0000
0.5000 9.5914
1.0000 7.1638
1.5000 3.2474
2.0000 0.8309

Вам также может понравиться