Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
>> 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
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
Columns 7 through 12
Columns 13 through 18
Columns 19 through 22
9.0000 9.5000 10.0000 10.5000
yn =
1.0e+06 *
Columns 1 through 6
Columns 7 through 12
Columns 13 through 18
Columns 19 through 22
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