Está en la página 1de 7

Ec. Dif.

Euler

m=length(y0);
A=[zeros(m-1,1) eye(m-1);f];
B=[zeros(1,m-1),g]';
x=x0;
for i=1:n
dy=eval(A)*y0+eval(B);
y=y0+h*dy;
y0=y;
x=x+h;
end

Un orden
clc
clear
x0=.13;
y0=.32;
xf=.14
h=(.14-.13)/4;
n=4;
f=inline('sin(x)-log(y)','x','y');%f(x) dependiente de y
%%
h=(xf-x0)/n;
for i=1:n
dy=f(x0,y0);%pendiente
y=y0+h*dy;%calculo de y
y0=y;
x0=x0+h;
end
y

x0=0; % X0 e Y0 puntos iniciales


y0=[1 -1 0]';
h=0.1; % h paso
n=20; % n numero de divisiones
syms x;
a=[8/(1+x)^3, -1/(1+x)^2, -1/(1+x)];
f=x/(1+x)^5;

m=length(y0);
resultE=[x0 y0(1)];
A=[zeros(m-1,1) eye(m-1);a];
B=[zeros(1,m-1),f]';
x=x0;
for i=1:n
f=eval(A)*y0+eval(B);
y=y0+h*f;
y0=y;
x=x+h;
resultE=[resultE;x y(1)];
end
resultE

................................................

Ec. Dif. Heun

x0=0; % X0 e Y0 puntos iniciales


y0=[1 -1 0]';
h=0.1; % h paso
n=20; % n numero de divisiones
syms x;
a=[8/(1+x)^3, -1/(1+x)^2, -1/(1+x)];
f=x/(1+x)^5;
m=length(y0);
resultH=[x0,y0(1)];
A=[zeros(m-1,1) eye(m-1);a];
B=[zeros(1,m-1),f]';
x=x0;
for i=1:n
dy1=eval(A)*y0+eval(B);
x=x+h;
p1=y0+h*dy1;
dy2=eval(A)*p1+eval(B);
y=y0+(h/2)*(dy1+dy2);
resultH=[resultH;x y(1)];
y0=y;
end
resultH

x0=2;
y0=[0]';
h=0,1;
n=20;
syms x;
a=[1/x];
f=1/(1+x^2);

m=length(y0);
resultH=[x0,y0(1)];
A=[zeros(m-1,1) eye(m-1);a];
B=[zeros(1,m-1),f]';
x=x0;
for i=1:n
f0=eval(A)*y0+eval(B);
x=x+h;
p1=y0+h*f0; %predictor
f1=eval(A)*p1+eval(B);
y=y0+(h/2)*(f0+f1);
resultH=[resultH;x y(1)];
y0=y;
end
resultH
........................................................

Ec. Dif. Milne-Simpson

x2=x1+h;
x3=x2+h;
x4=x3+h;
m=length(y1);

A=[zeros(m-1,1) eye(m-1);f];
B=[zeros(1,m-1),g]';
for i=1:n
x=x2;
dy2=eval(A)*y2+eval(B);
x=x3;
dy3=eval(A)*y3+eval(B);
x=x4;
dy4=eval(A)*y4+eval(B);

p=y1+(4/3)*h*(2*dy2-dy3+2*dy4);
x=x+h;
dy5=eval(A)*p+eval(B);

y=y3+(h/3)*(dy3+4*dy4+dy5);

y1=y2;
y2=y3;
y3=y4;
y4=y;
x2=x3;
x3=x4;
x4=x;

end

.................................................................

Ec. Dif. Milne-Simpson Modificado

x2=x1+h;
x3=x2+h;
x4=x3+h;
m=length(y1);
A=[zeros(m-1,1) eye(m-1);f];
B=[zeros(1,m-1),g]';
for i=1:n
x=x2;
dy2=eval(A)*y2+eval(B);
x=x3;
dy3=eval(A)*y3+eval(B);
x=x4;
dy4=eval(A)*y4+eval(B);
p=y1+(4/3)*h*(2*dy2-dy3+2*dy4);
if i>1
mod=p+(28/29)*(y4-p0);
else mod=p;
end
x=x+h;
dy5=eval(A)*mod+eval(B);

y=y3+(h/3)*(dy3+4*dy4+dy5);
y1=y2;
y2=y3;
y3=y4;
y4=y;
x2=x3;
x3=x4;
x4=x;
p0=p;
end

.........................................................

Ec. Dif. Hamming

x2=x1+h;
x3=x2+h;
x4=x3+h;
m=length(y1);
A=[zeros(m-1,1) eye(m-1);f];
B=[zeros(1,m-1),g]';
for i=1:n
x=x2;
dy2=eval(A)*y2+eval(B);
x=x3;
dy3=eval(A)*y3+eval(B);
x=x4;
dy4=eval(A)*y4+eval(B);

p=y1+(4/3)*h*(2*dy2-dy3+2*dy4);
x=x4+h;
dy5=eval(A)*p+eval(B);

y=(9*y4-y2)/8+(3/8)*h*(-dy3+2*dy4+dy5);
y1=y2;
y2=y3;
y3=y4;
y4=y;
x2=x3;
x3=x4;
x4=x;

end

.......................................................

Ec. Dif. Hamming Modifcado

x2=x1+h;
x3=x2+h;
x4=x3+h;
m=length(y1);

A=[zeros(m-1,1) eye(m-1);f];
B=[zeros(1,m-1),g]';
for i=1:n
x=x2;
dy2=eval(A)*y2+eval(B);
x=x3;
dy3=eval(A)*y3+eval(B);
x=x4;
dy4=eval(A)*y4+eval(B);

p=y1+(4/3)*h*(2*dy2-dy3+2*dy4);
if i>1
mod=p+(112/121)*(y4-p0);
else mod=p;
end
x=x4+h;
dy5=eval(A)*mod+eval(B);

y=(9*y4-y2)/8+(3/8)*h*(-dy3+2*dy4+dy5);

y1=y2;
y2=y3;
y3=y4;
y4=y;
x2=x3;
x3=x4;
x4=x;
p0=p;
end

.....................................................................

Ec. Dif. Runge-Kutta4

un orden

x0=0.13; % X0 e Y0 puntos iniciales


y0=0.32;
xf=0.14;
n=4; % n numero de divisiones
h=(xf-x0)/n; % h paso
f=inline('sin(x)-log(y)','x','y');
resultRK4=[0,x0,y0];
for i=1:n
f0=f(x0,y0); %f0: es la pendiente en el inicio del intervalo
y1=y0+(h/2)*f0;
f1=f(x0+h/2,y1); %f1: es la pendiente en el medio del intervalo usando f0
para hallar
y2=y0+(h/2)*f1;
f2=f(x0+h/2,y2); %f2: es la pendiente en el medio del intervalo usando f1
para hallar
y3=y0+h*f2;
f3=f(x0+h,y3); %f3: es la pendiente en al final del intervalo usando f2
para hallar
y=y0+h*(f0+2*f1+2*f2+f3)/6;
y0=y;
x0=x0+h;
resultRK4=[resultRK4;i,x0,y];
end
resultRK4

x0=0; % X0 e Y0 puntos iniciales


y0=[1 -1 0]';
h=0.1; % h paso
n=20; % n numero de divisiones
syms x;
a=[8/(1+x)^3 -1/(1+x)^2 -1/(1+x)];
f=x/(1+x)^5;
m=length(y0);
resultRK=[x0,y0(1)];
A=[zeros(m-1,1) eye(m-1);a];
B=[zeros(1,m-1),f]';
x=x0;
for i=1:n
f0=eval(A)*y0+eval(B); %f0: es la pendiente en el inicio del intervalo
x=x+h/2;
y1=y0+(h/2)*f0;
f1=eval(A)*y1+eval(B); %f1: es la pendiente en el medio del intervalo usando f0
para hallar
y2=y0+(h/2)*f1;
f2=eval(A)*y2+eval(B);%f2: es la pendiente en el medio del intervalo usando f1
para hallar
x=x+h/2;
y3=y0+h*f2;
f3=eval(A)*y3+eval(B);%f3: es la pendiente en al final del intervalo usando f2
para hallar
y=y0+h*(f0+2*f1+2*f2+f3)/6;
resultRK=[resultRK;x y(1)];
y0=y;
end
resultRK

x0=2; % X0 e Y0 puntos iniciales


y0=[0]';
h=0,1; % h paso
n=20; % n numero de divisiones
syms x;
a=[1/x];
f=1/(1+x^2);

m=length(y0);
resultRK=[x0,y0(1)];
A=[zeros(m-1,1) eye(m-1);a];
B=[zeros(1,m-1),f]';
x=x0;
for i=1:n
f0=eval(A)*y0+eval(B); %f0: es la pendiente en el inicio del intervalo
x=x+h/2;
y1=y0+(h/2)*f0;
f1=eval(A)*y1+eval(B); %f1: es la pendiente en el medio del intervalo
usando f0 para hallar

y2=y0+(h/2)*f1;
f2=eval(A)*y2+eval(B); %f2: es la pendiente en el medio del intervalo
usando f1 para hallar

x=x+h/2;
y3=y0+h*f2;
f3=eval(A)*y3+eval(B); %f3: es la pendiente en al final del intervalo
usando f2 para hallar

y=y0+h*(f0+2*f1+2*f2+f3)/6;
resultRK=[resultRK;x y(1)];
y0=y;
end
resultRK

También podría gustarte