jueves, 22 de mayo de 2014
uso de los comandos ode, ejm ode 45
[t y]=ode45(@dy,[a:h:b],y(a))
en el editor se escribe
function dy=g(t,y)
dy=2*sin(2*t);
[t y]=ode45(@g,[1:1:5],2)
para un sistema de ecuaciones despejar x' y y' o las variables que tenga y luego
[t, xy]=ode23(@fsis,[a:h:b],[x(a);y(a)])
para el archivo .m
function p=fsis(t,w)
p=[coeficientes de las variables de x' dejando espacios ; igual con y']*w+[numeros y termnos de t]
metodo modificado de euler
f=input('ingrese la funcion de trabajo entre comillas');
g=input('ingrese la ED entre comillas');
e=input('ingrese la condicion inicial y(a)= entre comillas');
a=input('ingrese el valor a');
b=input('ingrese el valor b');
ya=input('ingrese la condicion inicial (el valor de y(a)) ');
h=input('ingrese h );
m=(b-a)/h;
T=a:h:b;
p=dsolve(g,e);
w(1)=ya;
for j==m+1
w(j+1)=w(j) + 0.5*h*subs(f,{t,y},{T(j),w(j)}) + 0.5*h*subs(f,{t,y},{T(j+1),w(j) + h*subs(f,{t,y},{T(j),w(j)})})
end
Y=double(subs(p,t,T));
fprintf(' T wi+1' Y(t));
fprintf('\n ');
E=[T' w' Y'];
si probar con programas mas abajo
%METODO DE NEVILLE
fprintf('\n');
clear all
clc
fprintf(' -----------------\n')
fprintf(' MÉTODO DE NEVILLE\n')
fprintf(' -----------------\n')
fprintf('\n');
syms x
res=input('- La Funcion le fue dada(Si=1,No=0)? : ');
if res==1
fun=input('- Introduzca la Funcion F(x) : ','s');
end
Xi=input('- Introduzca la cantidad para aproximar : ');
n=input('- Introduzca la cantidad de puntos dados : ');
fprintf('\n\n');
for i=0:(n-1),
fprintf('- Introduzca X%1.0f ',i);
X(i+1)=input (' = ');
if res==0
fprintf('- Introduzca F(X%1.0f) ',i);
FX(i+1)=input(' = ');
else
FX(i+1)=funcion(X(i+1),fun);
end
end
for i=1:n,
Q(i,1)=FX(i);
end
for i=2:n,
for j=i:n,
Q(j,i)=(((Xi-X(j-i+1))*Q(j,i-1))-((Xi-X(j))*Q(j-1,i-1)))/(X(j)-X(j-i+1));
end
end
fprintf('\n\n');
for i=2:n,
for j=i:n,
fprintf('- Q (%1.0f,%1.0f) = %3.8f\n ',j-1,i-1,Q(j,i));
fprintf('\n');
end
end
Suscribirse a:
Enviar comentarios (Atom)
%MÉTODO EXPLÍCITO DE ADAMS-BASHFORTH DE DOS PASOS
ResponderEliminar% - Introduzca la ecuación diferencial : 'Dy=y-(x^2)+1'
% - Introduzca la condición y(a)=b : 'y(0)=0.5'
% - Introduzca la función de trabajo : y-(x^2)+1
% - Introduzca el valor de a : 0
% - Introduzca el valor de b : 1
% - Introduzca el tamaño de paso h : 0.1
% - Introduzca la condición inicial : 0.5
fprintf('\n');
clear all
clc
fprintf(' ---------------------------------------------------\n')
fprintf(' MÉTODO DE EXPLÍCITO DE ADAMS BASHFORTH DE DOS PASOS\n')
fprintf(' ---------------------------------------------------\n')
fprintf('\n');
syms x y
d=input(' - Introduzca la ecuación diferencial : ');
n=input(' - Introduzca la condición y(a)=b : ');
f1=input(' - Introduzca la función de trabajo : ');
a=input(' - Introduzca el valor de a : ');
b=input(' - Introduzca el valor de b : ');
h=input(' - Introduzca el tamaño de paso h : ');
ya=input(' - Introduzca la condición inicial : ');
tx(1)=a;
vx(1)=a;
ax=a;
bx=b;
hx=h;
dx=0;
mx = dsolve(d,n,'x');
for px=ax:hx:bx
dx=1+dx;
tx(dx)=px;
vx(dx)=subs(mx,px);
end
yb=subs(mx,tx(2));
fprintf('\n\n');
fprintf(' - La solución de la ecuación diferencial es : \n\n\n');
m = dsolve(d,n,'x');
pretty(m);
fprintf('\n\n\n');
%Condiciones para el funcionamiento de los lazos FOR
f=f1;
w(1)=ya;
w(2)=yb;
i=1;
t(1)=a;
v(1)=a;
d=0;
c=0;
g=0;
%Este for obtiene y guarda todos los valores de t
%También se utiliza para evaluar la ecuación diferencial
for p=a:h:b
d=1+d;
t(d)=p;
v(d)=subs(m,p);
end
%Este for se usa para contabilizar las iteraciones
for s=c:1:(d-1)
g=1+g;
k(g)=(g-1);
end
a=a+(2*h);
k3=k(end);
fprintf(' -----------------------------------------------------------------');
fprintf('\n');
fprintf(' FÓRMULAS DE CADA ITERACIÓN');
fprintf('\n');
fprintf(' -----------------------------------------------------------------');
fprintf('\n\n');
fprintf(' - w0 = %1.15f ',ya);
fprintf('\n\n');
fprintf(' - w1 = %1.15f ',yb);
fprintf('\n');
%Este for obtiene los valores aproximados de solución
for j=a:h:b
i=1+i;
w(i+1)=w(i)+((h/2)*((3*(subs(f,{x,y},{t(i),w(i)})))-(subs(f,{x,y},{t(i),w(i)}))));
fprintf('\n');
fprintf(' - w%1.0f = w%1.0f + h/2 [3*f(t%1.0f,w%1.0f) - f(t%1.0f,w%1.0f)]',i,i-1,i-1,i-1,i-2,i-2);
fprintf('\n');
fprintf(' - w%1.0f = w%1.0f + %1.15f [3*f(%1.15f,w%1.0f) - f(%1.15f,w%1.0f)]',i,i-1,h/2,t(i),i-1,t(i-1),i-2);
fprintf('\n');
end
fprintf('\n');
fprintf(' -----------------------------------------------------------------');
fprintf('\n');
%Presentación de los datos
fprintf('\n\n');
fprintf(' i ti wi y(t)');
fprintf('\n\n');
for k1=0:k3
k2=k1+1;
fprintf('\n');
fprintf(' %1.0f %10.15f %10.15f %10.15f',k(k2),t(k2),w(k2),v(k2));
fprintf('\n');
end
fprintf('\n');
%MÉTODO EXPLÍCITO DE ADAMS-BASHFORTH DE TRES PASOS
ResponderEliminar%-Ejemplo de clase tdy -ydt=tdt
% - Introduzca la ecuación diferencial : 'Dy=(x+y)/x'
% - Introduzca la condición y(a)=b : 'y(0)=2'
% - Introduzca la función de trabajo : y-(x+y)/x
% - Introduzca el valor de a : 0
% - Introduzca el valor de b : 1
% - Introduzca el tamaño de paso h : 0.2
% - Introduzca la condición inicial : 2
fprintf('\n');
clear all
clc
fprintf(' ----------------------------------------------------\n')
fprintf(' MÉTODO DE EXPLÍCITO DE ADAMS BASHFORTH DE TRES PASOS\n')
fprintf(' ----------------------------------------------------\n')
fprintf('\n');
syms x y
d=input(' - Introduzca la ecuación diferencial : ');
n=input(' - Introduzca la condición y(a)=b : ');
f1=input(' - Introduzca la función de trabajo : ');
a=input(' - Introduzca el valor de a : ');
b=input(' - Introduzca el valor de b : ');
h=input(' - Introduzca el tamaño de paso h : ');
ya=input(' - Introduzca la condición inicial : ');
tx(1)=a;
vx(1)=a;
ax=a;
bx=b;
hx=h;
dx=0;
mx = dsolve(d,n,'x');
for px=ax:hx:bx
dx=1+dx;
tx(dx)=px;
vx(dx)=subs(mx,px);
end
yb=subs(mx,tx(2));
yc=subs(mx,tx(3));
fprintf('\n\n');
fprintf(' - La solución de la ecuación diferencial es : \n\n\n');
m = dsolve(d,n,'x');
pretty(m);
fprintf('\n\n\n');
%Condiciones para el funcionamiento de los lazos FOR
f=f1;
w(1)=ya;
w(2)=yb;
w(3)=yc;
i=2;
t(1)=a;
v(1)=a;
d=0;
c=0;
g=0;
%Este for obtiene y guarda todos los valores de t
%También se utiliza para evaluar la ecuación diferencial
for p=a:h:b
d=1+d;
t(d)=p;
v(d)=subs(m,p);
end
%Este for se usa para contabilizar las iteraciones
for s=c:1:(d-1)
g=1+g;
k(g)=(g-1);
end
a=a+(3*h);
k3=k(end);
%Este for obtiene los valores aproximados de solución
fprintf(' -------------------------------------------------------------------------------------------');
fprintf('\n');
fprintf(' FÓRMULAS DE CADA ITERACIÓN');
fprintf('\n');
fprintf(' -------------------------------------------------------------------------------------------');
fprintf('\n\n');
fprintf(' - w0 = %1.15f ',ya);
fprintf('\n\n');
fprintf(' - w1 = %1.15f ',yb);
fprintf('\n\n');
fprintf(' - w2 = %1.15f ',yb);
fprintf('\n');
%Este for obtiene los valores aproximados de solución
for j=a:h:b
i=1+i;
w(i+1)=w(i)+((h/12)*((23*(subs(f,{x,y},{t(i),w(i)})))-(16*(subs(f,{x,y},{t(i-1),w(i-1)})))+(5*(subs(f,{x,y},{t(i-2),w(i-2)})))));
fprintf('\n');
fprintf(' - w%1.0f = w%1.0f + h/12 [23*f(t%1.0f,w%1.0f) - 5*f(t%1.0f,w%1.0f) + 16*f(t%1.0f,w%1.0f)]',i,i-1,i-1,i-1,i-2,i-2,i-3,i-3);
fprintf('\n');
fprintf(' - w%1.0f = w%1.0f + %1.15f [23*f(%1.15f,w%1.0f) - 16*f(%1.15f,w%1.0f) + 5*f(%1.15f,w%1.0f)]',i,i-1,h/12,t(i),i-1,t(i-1),i-2,t(i-2),i-3);
fprintf('\n');
end
fprintf('\n');
fprintf(' -------------------------------------------------------------------------------------------');
fprintf('\n');
%Presentación de los datos
fprintf('\n\n');
fprintf(' i ti wi y(t)');
fprintf('\n\n');
for k1=0:k3
k2=k1+1;
fprintf('\n');
fprintf(' %1.0f %10.15f %10.15f %10.15f',k(k2),t(k2),w(k2),v(k2));
fprintf('\n');
end
fprintf('\n');
ResponderEliminar%SOLO EN TERMINOS DE X Y
% - Introduzca la ecuación diferencial : 'Dy=cos(2*x)+sin(3*x)' ---->(CAMBIAR LA 't' POR 'x' )
% - Introduzca la condición y(a)=b : 'y(0)=1'
% - Introduzca la función de trabajo : cos(2*x)+sin(3*x) ------> solo lo que esta igualado a Dy pero sin el Dy
% - Introduzca la condición inicial : 1
% - Introduzca el valor de a : 0
% - Introduzca el valor de b : 1
% - Introduzca el tamaño de paso h : 1/4
fprintf('\n');
clear all
clc
fprintf(' ---------------\n')
fprintf(' MÉTODO DE EULER\n')
fprintf(' ---------------\n')
fprintf('\n');
syms x y
d=input(' - Introduzca la ecuación diferencial : ');
n=input(' - Introduzca la condición y(a)=b : ');
f1=input(' - Introduzca la función de trabajo : ');
ya=input(' - Introduzca la condición inicial : ');
a=input(' - Introduzca el valor de a : ');
b=input(' - Introduzca el valor de b : ');
h=input(' - Introduzca el tamaño de paso h : ');
fprintf('\n\n');
fprintf(' - La solución de la ecuación diferencial es : \n\n\n');
m = dsolve(d,n,'x');
pretty(m);
fprintf('\n\n\n');
%Condiciones para el funcionamiento de los lazos FOR
f=f1;
w(1)=ya;
i=0;
t(1)=a;
v(1)=a;
d=0;
c=0;
g=0;
%Este for obtiene y guarda todos los valores de t
%También se utiliza para evaluar la ecuación diferencial
for p=a:h:b
d=1+d;
t(d)=p;
v(d)=subs(m,p);
end
%Este for se usa para contabilizar las iteraciones
for s=c:1:(d-1)
g=1+g;
k(g)=(g-1);
end
k3=k(end);
%Este for obtiene los valores aproximados de solución
%También imprime en pantalla la fórmula de la ecuación para
%cada iteración
fprintf(' ------------------------------------------------');
fprintf('\n');
fprintf(' FÓRMULAS DE CADA ITERACIÓN');
fprintf('\n');
fprintf(' ------------------------------------------------');
fprintf('\n\n');
fprintf(' - w0 = %1.15f ',ya);
fprintf('\n');
for j=a:h:(b-h)
i=1+i;
w(i+1)=w(i)+(h*(subs(f,{x,y},{t(i),w(i)})));
fprintf('\n');
fprintf(' - w%1.0f = w%1.0f + h f(t%1.0f,w%1.0f)',i,i-1,i-1,i-1);
fprintf('\n');
fprintf(' - w%1.0f = w%1.0f + %1.15f f(%1.15f,%1.15f)',i,i-1,h,t(i),w(i));
fprintf('\n');
end
fprintf('\n');
fprintf(' ------------------------------------------------');
fprintf('\n');
fprintf('\n\n');
fprintf(' i ti wi y(t)');
fprintf('\n\n');
for k1=0:k3
k2=k1+1;
fprintf('\n');
fprintf(' %1.0f %10.15f %10.15f %10.15f',k(k2),t(k2),w(k2),v(k2));
fprintf('\n');
end
fprintf('\n');
%MÉTODO DE EXTRAPOLACIÓN
ResponderEliminar% - Introduzca la ecuación diferencial : 'Dy+(4*y)=(x*exp(-x))'
% - Introduzca la condición y(a)=b : 'y(0)=4'
% - Introduzca la función de trabajo : (x*exp(-x))-(4*y)
% - Introduzca la condición inicial : 4
% - Introduzca el valor de a : 0
% - Introduzca el valor de b : 0.1
% - Introduzca el tamaño de paso h : 0.05
% - Introduzca el valor de precisión : 10^(-4)
%NOTA 'CAMBIAR A T EN VEZ X EN EL PRINT'
fprintf('\n');
clear all
clc
fprintf(' -----------------------\n')
fprintf(' MÉTODO DE EXTRAPOLACIÓN\n')
fprintf(' -----------------------\n')
fprintf('\n');
syms x y
d=input(' - Introduzca la ecuación diferencial : ');
n=input(' - Introduzca la condición y(a)=b : ');
f=input(' - Introduzca la función de trabajo : ');
ya=input(' - Introduzca la condición inicial : ');
a=input(' - Introduzca el valor de a : ');
b=input(' - Introduzca el valor de b : ');
r=input(' - Introduzca el tamaño de paso h : ');
e=input(' - Introduzca el valor de precisión : ');
fprintf('\n\n');
fprintf(' - La solución de la ecuación diferencial es : \n\n');
m = dsolve(d,n,'x');
pretty(m);
fprintf('\n\n\n');
%Condiciones para el funcionamiento de los lazos FOR
%Condiciones para el primer lazo FOR
d=0;
dg=0;
t(1)=a;
v(1)=a;
%Condiciones para el segundo lazo FOR
c=1;
g=0;
%Conciciones para el ciclo de operaciones
hp=[2 4 6 8 12 16 24 32];
a2=a+r;
w(1)=ya;
%Para el incremento de la matriz Y
f1=1;
f2=1;
%Primer lazo FOR
%Este for obtiene y guarda todos los valores de t
%También se utiliza para evaluar la ecuación diferencial
for p=a:r:b
d=d+1;
dg=dg+1;
t(dg)=p;
v(d)=(subs(m,p));
end
xs(1)=v(1);
dj=1;
%Segundo lazo FOR
%Este for se usa para contabilizar las iteraciones
for s=c:1:d
g=1+g;
k(g)=(g-1);
end
k3=k(end);
%Varialbres utilizadas para el conteo de la presentación de los
%valores de t
g1=1;
t1=1;
%Este es el h inicial
r1=r;
dc=1;
%Inicio del for de las iteraciones
for a1=a2:r:b
%Para el incremento de hq (h principal)
a3=1;
%Para el incremento de hp
a4=1;
%Para el incremento de w
ix=1;
%Para el incremento de las evaluaciones
dc=dc+1;
dj=dj+1;
fprintf('---------------------------------------');
fprintf('\n')
fprintf(' - Para el valor de t%1.0f : %1.15f',k(g1+1),t(t1+1));
fprintf('\n')
fprintf('---------------------------------------');
fprintf('\n\n\n');
g1=g1+1;
t1=t1+1;
%Paso 1
hq(a3)=r1/hp(a4); %h(0)
fprintf(' - El valor de h%1.0f es : %1.15f',(a3-1),hq(a3));
fprintf('\n\n');
%Paso 2
%w(1)=ya --> w(0)= Condición inicial
%Paso 3
%w(1)
w(ix+1)=w(1)+(hq(a3)*(subs(f,{x,y},{a,w(1)})));
fprintf(' - w%1.0f = w%1.0f + h%1.0f * f(a,w%1.0f)',ix,ix-1,a3-1,ix-1);
fprintf('\n');
fprintf(' - w%1.0f = %1.15f + %1.15f * f(a,%1.15f)',ix,w(1),hq(a3),w(1));
fprintf('\n');
fprintf(' - w%1.0f = %1.15f',ix,w(2));
fprintf('\n\n');
%Paso 4
%w(2+n)
ix=3;
w(ix)=w(ix-2)+(2*hq(a3)*(subs(f,{x,y},{(a+((ix-2)*hq(a3))),(w(ix-1))})));
fprintf(' - w%1.0f = w%1.0f + 2 h%1.0f * f(a +h%1.0f,w%1.0f)',ix-1,ix-2,a3-1,a3-1,ix-2);
fprintf('\n');
fprintf(' - w%1.0f = %1.15f + 2 * %1.15f * f(a +%1.0f,%1.15f)',ix-1,w(1),hq(a3),hq(a3),w(2));
fprintf('\n');
fprintf(' - w%1.0f = %1.15f',ix-1,w(3));
fprintf('\n\n');
Hola! en el de extrapolación me parece que faltan más cálculos, saludos
Eliminar%MÉTODO DE HEUN
ResponderEliminar%Ejemplo de clase y'=x*sen(2*x) + y*tan(x)
% - Introduzca la ecuación diferencial : 'Dy=x*sen(2*x) + y*tan(x)'
% - Introduzca la condición y(a)=b : 'y(2)=4'
% - Introduzca la función de trabajo : x*sen(2*x) + y*tan(x)
% - Introduzca la condición inicial : 3
% - Introduzca el valor de a : 0
% - Introduzca el valor de b : 0.2
% - Introduzca el tamaño de paso h : 0.05
fprintf('\n');
clear all
clc
fprintf(' --------------\n')
fprintf(' MÉTODO DE HEUN\n')
fprintf(' --------------\n')
fprintf('\n');
syms x y
d=input(' - Introduzca la ecuación diferencial : ');
n=input(' - Introduzca la condición y(a)=b : ');
f1=input(' - Introduzca la función de trabajo : ');
ya=input(' - Introduzca la condición inicial : ');
a=input(' - Introduzca el valor de a : ');
b=input(' - Introduzca el valor de b : ');
h=input(' - Introduzca el tamaño de paso h : ');
fprintf('\n\n');
fprintf(' - La solución de la ecuación diferencial es : \n\n\n');
m = dsolve(d,n,'x');
pretty(m);
fprintf('\n\n\n');
%Condiciones para el funcionamiento de los lazos FOR
f=f1;
w(1)=ya;
i=0;
t(1)=a;
v(1)=a;
d=0;
c=0;
g=0;
%Este for obtiene y guarda todos los valores de t
%También se utiliza para evaluar la ecuación diferencial
for p=a:h:b
d=1+d;
t(d)=p;
v(d)=subs(m,p);
end
%Este for se usa para contabilizar las iteraciones
for s=c:1:(d-1)
g=1+g;
k(g)=(g-1);
end
k3=k(end);
%Este for obtiene los valores aproximados de solución
fprintf('-------------------------------------------------------------------------------------------------------');
fprintf('\n');
fprintf(' FÓRMULAS DE CADA ITERACIÓN');
fprintf('\n');
fprintf('-------------------------------------------------------------------------------------------------------');
fprintf('\n\n');
fprintf('- w0 = %1.5f ',ya);
fprintf('\n');
for j=a:h:(b-h)
i=1+i;
w(i+1)=w(i)+((h/4)*(subs(f,{x,y},{t(i),w(i)})))+(((3/4)*h)*(subs(f,{x,y},{(t(i)+((2/3)*h)),(w(i)+(((2/3)*h)*(subs(f,{x,y},{t(i),w(i)}))))})));
fprintf('\n');
fprintf('- w%1.0f = w%1.0f + h/4 f(t%1.0f,w%1.0f) + 3/4 h f(t%1.0f + 2/3 h,w%1.0f + 2/3 h f(t%1.0f,w%1.0f))',i,i-1,i-1,i-1,i-1,i-1,i-1,i-1);
fprintf('\n');
fprintf('- w%1.0f = w%1.0f + %1.5f f(%1.15f,w%1.0f) + %1.5f f(%1.15f + %1.5f,w%1.0f + %1.5f f(%1.15f,w%1.0f))',i,i-1,h/4,t(i),i-1,(3/4)*h,t(i),(2/3)*h,i-1,(2/3)*h,t(i),i-1);
fprintf('\n');
end
fprintf('\n');
fprintf('-------------------------------------------------------------------------------------------------------');
fprintf('\n');
%Presentación de los datos
fprintf('\n\n');
fprintf(' i ti wi y(t)');
fprintf('\n\n');
for k1=0:k3
k2=k1+1;
fprintf('\n');
fprintf(' %1.0f %10.15f %10.15f %10.15f',k(k2),t(k2),w(k2),v(k2));
fprintf('\n');
end
fprintf('\n');
%MÉTODO MODIFICADO DE EULER
ResponderEliminar% - Introduzca la ecuación diferencial : 'Dy=y-(x^2)+1' (cambiar t por la x)
% - Introduzca la condición y(a)=b : 'y(0)=0.5' (lo que esta igualado)
% - Introduzca la función de trabajo : y-(x^2)+1 (y' dy/dt Dy despejada)
% - Introduzca la condición inicial : 0.5
% - Introduzca el valor de a : 0
% - Introduzca el valor de b : 1
% - Introduzca el tamaño de paso h : 0.1
fprintf('\n');
clear all
clc
fprintf(' --------------------------\n')
fprintf(' MÉTODO MODIFICADO DE EULER\n')
fprintf(' --------------------------\n')
fprintf('\n');
syms x y
d=input(' - Introduzca la ecuación diferencial : ');
n=input(' - Introduzca la condición y(a)=b : ');
f1=input(' - Introduzca la función de trabajo : ');
ya=input(' - Introduzca la condición inicial : ');
a=input(' - Introduzca el valor de a : ');
b=input(' - Introduzca el valor de b : ');
h=input(' - Introduzca el tamaño de paso h : ');
fprintf('\n\n');
fprintf(' - La solución de la ecuación diferencial es : \n\n\n');
m = dsolve(d,n,'x');
pretty(m);
fprintf('\n\n\n');
%Condiciones para el funcionamiento de los lazos FOR
f=f1;
w(1)=ya;
i=0;
t(1)=a;
v(1)=a;
d=0;
c=0;
g=0;
%Este for obtiene y guarda todos los valores de t
%También se utiliza para evaluar la ecuación diferencial
for p=a:h:b
d=1+d;
t(d)=p;
v(d)=subs(m,p);
end
%Este for se usa para contabilizar las iteraciones
for s=c:1:(d-1)
g=1+g;
k(g)=(g-1);
end
k3=k(end);
%Este for obtiene los valores aproximados de solución
fprintf('-------------------------------------------------------------------------------------------------------');
fprintf('\n');
fprintf(' FÓRMULAS DE CADA ITERACIÓN');
fprintf('\n');
fprintf('-------------------------------------------------------------------------------------------------------');
fprintf('\n\n');
fprintf('- w0 = %1.15f ',ya);
fprintf('\n');
for j=a:h:(b-h)
i=1+i;
w(i+1)=w(i)+((h/2)*(subs(f,{x,y},{t(i),w(i)})))+((h/2)*(subs(f,{x,y},{(t(i)+h),(w(i)+(h*(subs(f,{x,y},{t(i),w(i)}))))})));
fprintf('\n');
fprintf('- w%1.0f = w%1.0f + h/2 f(t%1.0f,w%1.0f) + h/2 f(t%1.0f + h,w%1.0f + h f(t%1.0f,w%1.0f))',i,i-1,i-1,i-1,i-1,i-1,i-1,i-1);
fprintf('\n');
fprintf('- w%1.0f = w%1.0f + %1.15f f(%1.15f,w%1.0f) + %1.15f f(%1.15f + %1.15f,w%1.0f + %1.15f f(%1.15f,w%1.0f))',i,i-1,h/2,t(i),i-1,h/2,t(i),h,i-1,h,t(i),i-1);
fprintf('\n');
end
fprintf('\n');
fprintf('-------------------------------------------------------------------------------------------------------');
fprintf('\n');
%Presentación de los datos
fprintf('\n\n');
fprintf(' i ti wi y(t)');
fprintf('\n\n');
for k1=0:k3
k2=k1+1;
fprintf('\n');
fprintf(' %1.0f %10.15f %10.15f %10.15f',k(k2),t(k2),w(k2),v(k2));
fprintf('\n');
end
fprintf('\n');
fprintf('\n');
ResponderEliminarclear all
fprintf(' ----------------------------------\n')
fprintf(' MÉTODO DE TAYLOR DE ORDEN SUPERIOR\n')
fprintf(' ----------------------------------\n')
fprintf('\n');
syms x y
eb=0;
ix=0;
fprintf('Este programa funciona con las variables "x" y "y"\n');
e=input(' - Indique el orden a utilizar : ');
d=input(' - Introduzca la ecuación diferencial : ');
n=input(' - Introduzca la condición y(a)=b : ');
z=input (' - Se pidió aproximación de valor 1=(Si) : ');
if z==1
kz=input(' - Introduzca el valor a aproximar : ');
end
fprintf('\n')
for ea=1:1:e
ix=ix+1;
eb=eb+1;
fprintf(' - Función: %1.0f\n\n',eb);
f1(ix)=input(' - Introduzca la función de trabajo : ');
fprintf('\n')
end
ya=input(' - Introduzca la condición inicial : ');
a=input(' - Introduzca el valor de a : ');
b=input(' - Introduzca el valor de b : ');
h=input(' - Introduzca el tamaño de paso h : ');
fprintf('\n\n');
fprintf(' - La solución de la ecuación diferencial es : \n\n\n');
m = dsolve(d,n,'x');
pretty(m);
fprintf('\n\n\n');
%Condiciones para el funcionamiento de los lazos FOR
w(1)=ya;
i=0;
t(1)=a;
v(1)=a;
d=0;
c=0;
g=0;
%Este for obtiene y guarda todos los valores de t
%También se utiliza para evaluar la ecuación diferencial
for p=a:h:b
d=1+d;
t(d)=p;
v(d)=subs(m,p);
end
%Este for se usa para contabilizar las iteraciones
for s=c:1:(d-1)
g=1+g;
k(g)=(g-1);
end
k3=k(end);
%Este for obtiene los valores aproximados de solución
for sp=a:h:(b-h)
af=sprintf(' w%1.0f = w%1.0f',i+1,i);
fprintf('\n');
ag=sprintf(' w%1.0f = %1.15f',i+1,w(i+1));
fprintf('\n');
i=1+i;
kc=0;
df=0;
qc=0;
sd=1;
o=0;
while sd <= e
kc=kc+1;
df=df+1;
o=o+1;
qc=qc+(((h^(df))/(factorial(df)))*(subs((f1(o)),{x,y},{t(i),w(i)})));
ad=sprintf(' + h^%1.0f/%1.0f f%1.0f (t%1.0f, w%1.0f)',df,factorial(df),df-1,i-1,i-1);
ah=sprintf(' + %1.15f^%1.0f/%1.0f f%1.0f (%1.15f, %1.15f)',h,df,factorial(df),df-1,t(i),w(i));
af=[af,ad];
ag=[ag,ah];
sd=sd+1;
end
disp(af)
w(i+1)=w(i)+qc;
disp(ag)
af=' ';
ag=' ';
end
fprintf('\n\n\n');
fprintf(' i ti wi y(t) Error');
fprintf('\n\n\n');
for k1=0:k3
k2=k1+1;
fprintf('\n');
fprintf(' %1.0f %10.15f %10.15f %10.15f %10.15f',k(k2),t(k2),w(k2),v(k2),abs((v(k2)-w(k2))));
fprintf('\n');
end
fprintf('\n');
ResponderEliminarif z == 1
fprintf('\n');
bb=t;
im=1;
while bb(im)<kz
im=im+1;
end
xi=[t(im-1) t(im)];
aa=t;
af=1;
ae=aa(af);
ac=xi(1);
%Cálculo de los valores de f(x)
while ae < ac
af=af+1;
ae=aa(af);
end
af;
ag=af+1;
%Valores de f(x)
yl=[w(af) w(ag)];
%Cálculo de los valores de la derivada
ah=f1(1);
ai=subs(ah,x,xi(1));
aj=subs(ai,y,w(af));
ak=subs(ah,x,xi(2));
al=subs(ak,y,w(ag));
am=[aj al];
%Valores de la derivada
yderiv=am;
n=2*length(xi);
D=zeros(n,n);
b=1;
format long
for a=1:2:n
z(a)=xi(b);
z(a+1)=xi(b);
y2(a)=yl(b);
y2(a+1)=yl(b);
b=b+1;
end
D(:,1)=y2';
x=0;
j=0;
cont=1;
while j<n-1
x=x+1;
j=j+1;
for i=x:n-1
if (z(i+1)-z(i+1-j))==0
D(i+1,j+1)=yderiv(cont);
cont=cont+1;
else
D(i+1,j+1)=(D(i+1,j)-D(i,j))/(z(i+1)-z(i+1-j));
end
end
end
D
s=1;
c=0;
q=0;
p=0;
for i=2:n
for j=i
s=1;
for m=1:1
q=q+1;
for h=1:(i-1)
s=s*(kz-z(i-q));
q=q-1;
end
p=p+1;
q=q+p;
end
end
c=c+(D(i,j)*s);
end
for i=1:1
for j=i
c=c+(D(i,j));
end
end
fprintf('\n');
fprintf('P(%5.5f)= %5.5f + %5.5f (t - %5.5f) + %5.5f (t - %5.5f)^2 + %5.5f (t - %5.5f)^2 (t-%5.5f)\n', kz, D(1,1), D(2,2), D(1,1), D(3,3), D(1,1), D(4,4), D(1,1), D(3,1) )
fprintf(' - El resultado de y(%10.15f) es : %10.15f\n',kz,c);
fprintf('\n');
end
fprintf('\n');
ResponderEliminarclear all
clc
fprintf(' ----------------------\n')
fprintf(' MÉTODO DEL PUNTO MEDIO\n')
fprintf(' ----------------------\n')
fprintf('\n');
syms x y
d=input(' - Introduzca la ecuación diferencial : ');
n=input(' - Introduzca la condición y(a)=b : ');
f1=input(' - Introduzca la función de trabajo : ');
ya=input(' - Introduzca la condición inicial : ');
a=input(' - Introduzca el valor de a : ');
b=input(' - Introduzca el valor de b : ');
h=input(' - Introduzca el tamaño de paso h : ');
fprintf('\n\n');
fprintf(' - La solución de la ecuación diferencial es : \n\n\n');
m = dsolve(d,n,'x');
pretty(m);
fprintf('\n\n\n');
%Condiciones para el funcionamiento de los lazos FOR
f=f1;
w(1)=ya;
i=0;
t(1)=a;
v(1)=a;
d=0;
c=0;
g=0;
%Este for obtiene y guarda todos los valores de t
%También se utiliza para evaluar la ecuación diferencial
for p=a:h:b
d=1+d;
t(d)=p;
v(d)=subs(m,p);
end
%Este for se usa para contabilizar las iteraciones
for s=c:1:(d-1)
g=1+g;
k(g)=(g-1);
end
k3=k(end);
%Este for obtiene los valores aproximados de solución
fprintf(' ----------------------------------------------------------------------------');
fprintf('\n');
fprintf(' FÓRMULAS DE CADA ITERACIÓN');
fprintf('\n');
fprintf(' ----------------------------------------------------------------------------');
fprintf('\n\n');
fprintf(' - w0 = %1.5f ',ya);
fprintf('\n');
for j=a:h:(b-h)
i=1+i;
w(i+1)=w(i)+(h*(subs(f,{x,y},{(t(i)+h/2),w(i)+((h/2)*(((subs(f,{x,y},{t(i),w(i)})))))})));
fprintf('\n');
fprintf(' - w%1.0f = w%1.0f + h f(t%1.0f + h/2,w%1.0f + h/2 f(t%1.0f,w%1.0f)',i,i-1,i-1,i-1,i-1,i-1);
fprintf('\n');
fprintf(' - w%1.0f = w%1.0f + %1.15f f(%1.15f + %1.15f,w%1.0f + %1.15f f(%1.15f,w%1.0f)',i,i-1,h,t(i),(h/2),i-1,(h/2),t(i),i-1);
fprintf('\n');
end
fprintf('\n');
fprintf(' ----------------------------------------------------------------------------');
fprintf('\n');
%Presentación de los datos
fprintf('\n\n');
fprintf(' i ti wi y(t)');
fprintf('\n\n');
for k1=0:k3
k2=k1+1;
fprintf('\n');
fprintf(' %1.0f %10.15f %10.15f %10.15f',k(k2),t(k2),w(k2),v(k2));
fprintf('\n');
end
fprintf('\n');
fprintf('\n');
ResponderEliminarclear all
clc
fprintf(' -----------------------------------------\n')
fprintf(' MÉTODO DE RUNGE-KUTTA-FEHLBERG DE ORDEN 4\n')
fprintf(' -----------------------------------------\n')
fprintf('\n');
syms x y
d=input(' - Introduzca la ecuación diferencial : ');
n=input(' - Introduzca la condición y(a)=b : ');
f1=input(' - Introduzca la función de trabajo : ');
ya=input(' - Introduzca la condición inicial : ');
a=input(' - Introduzca el valor de a : ');
b=input(' - Introduzca el valor de b : ');
h=input(' - Introduzca el tamaño de paso h : ');
fprintf('\n\n');
fprintf(' - La solución de la ecuación diferencial es : \n\n\n');
m = dsolve(d,n,'x');
pretty(m);
fprintf('\n\n\n');
f=f1;
w(1)=ya;
i=0;
t(1)=a;
q(1)=a;
v(1)=a;
d=0;
c=0;
g=0;
e=1;
fprintf('- w0 = %1.15f ',ya);
fprintf('\n\n');
for j=a:h:(b-h)
i=1+i;
t(i)=j;
fprintf('---------------');
fprintf('\n');
fprintf('- Iteración: %1.0f\n',e);
fprintf('---------------');
fprintf('\n\n');
k1=h*subs(f,{x,y},{t(i),w(i)});
fprintf('- K1 = h * f(t%1.0f,w%1.0f)',i-1,i-1);
fprintf('\n');
fprintf('- K1 = %1.15f * f(%1.15f,w%1.0f)',h,t(i),i-1);
fprintf('\n');
fprintf('- K1 = %2.15f',(k1))
fprintf('\n\n');
k2=h*subs(f,{x,y},{t(i)+h/4,w(i)+k1/4});
fprintf('- K2 = h * f(t%1.0f + h/4 , w%1.0f + K1/4)',i-1,i-1);
fprintf('\n');
fprintf('- K2 = %1.15f * f(%1.15f + %1.15f , w%1.0f + %1.15f)',h,t(i),h/4,i-1,(k1)/4);
fprintf('\n');
fprintf('- K2 = %2.15f',(k2))
fprintf('\n\n');
k3=h*subs(f,{x,y},{t(i)+(3.*h/8),w(i)+(3.*k1/32)+(9.*k2/32)});
fprintf('- K3 = h * f(t%1.0f + (3/8)h , w%1.0f + 3K1/32 + 9K2/32)',i-1,i-1);
fprintf('\n');
fprintf('- K3 = %1.15f * f(%1.15f + %1.15f , w%1.0f + %1.15f + %1.15f)',h,t(i),((3/8)*h),i-1,(3*(k1)/32),(9*(k2)/32));
fprintf('\n');
fprintf('- K3 = %2.15f',(k3))
fprintf('\n\n');
k4=h*subs(f,{x,y},{t(i)+(12.*h/13),w(i)+(1932.*k1/2197)-(7200.*k2/2197)+(7296.*k3/2197)});
fprintf('- K4 = h * f(t%1.0f + (12/13)h , w%1.0f + 1932K1/2197 - 7200K2/2197 + 7296K3/2197)',i-1,i-1);
fprintf('\n');
fprintf('- K4 = %1.15f * f(%1.15f + %1.15f , w%1.0f + %1.15f - %1.15f + %1.15f)',h,t(i),((12/13)*h),i-1,(1932*(k1)/2197),(7200*(k2)/2197),(7296*(k3)/2197));
fprintf('\n');
fprintf('- K4 = %2.15f',(k4))
fprintf('\n\n');
ResponderEliminark5=h*subs(f,{x,y},{t(i)+h,w(i)+(439.*k1/216)-(8.*k2)+(3680.*k3/513)-(845.*k4/4104)});
fprintf('- K5 = h * f(t%1.0f + h , w%1.0f + 439K1/216 - 8K2 + 3680K3/513 - 845K4/4104)',i-1,i-1);
fprintf('\n');
fprintf('- K5 = %1.15f * f(%1.15f + %1.15f , w%1.0f + %1.15f - %1.15f + %1.15f - %1.15f)',h,t(i),h,i-1,(439*(k1)/216),(8*(k2)),(3680*(k3)/513),(845*(k3)/4104));
fprintf('\n');
fprintf('- K5 = %2.15f',(k5))
fprintf('\n\n');
w(1+i)=w(i)+(25*k1/216)+(1408*k3/2565)+(2197*k4/4104)-(k5/5);
fprintf('- w%1.0f = w%1.0f + (25/216) K1 + (1408/2565) K3 + (2197/4104) K4 - (1/5) K5)',i,i-1)
fprintf('\n');
fprintf('- w%1.0f = w%1.0f + %1.15f + %1.15f + %1.15f - %1.15f',i,i-1,(25/216)*(k1),(1408/2565)*(k3),(2197/4104)*(k4),(1/5)*(k5))
fprintf('\n');
fprintf('- w%1.0f = %2.15f',i,(w(i+1)))
fprintf('\n\n');
e=e+1;
end
fprintf('\n\n');
%Este for obtiene y guarda todos los valores de t
%También se utiliza para evaluar la ecuación diferencial
for p=a:h:b
d=1+d;
q(d)=p;
v(d)=subs(m,p);
end
%Este for se usa para contabilizar las iteraciones
for s=c:1:(d-1)
g=1+g;
k(g)=(g-1);
end
k3=k(end);
%Presentación de los datos
fprintf(' i ti wi+1 y(t)');
fprintf('\n\n');
for k1=0:k3
k2=k1+1;
fprintf('\n');
fprintf(' %1.0f %10.15f %10.15f %10.15f',k(k2),q(k2),w(k2),v(k2));
fprintf('\n');
end
fprintf('\n');
fprintf('\n');
ResponderEliminarclear all
fprintf(' -----------------------------------------\n')
fprintf(' MÉTODO DE RUNGE-KUTTA-FEHLBERG DE ORDEN 5\n')
fprintf(' -----------------------------------------\n')
fprintf('\n');
syms x y
d=input(' - Introduzca la ecuación diferencial : ');
n=input(' - Introduzca la condición y(a)=b : ');
f1=input(' - Introduzca la función de trabajo : ');
ya=input(' - Introduzca la condición inicial : ');
a=input(' - Introduzca el valor de a : ');
b=input(' - Introduzca el valor de b : ');
h=input(' - Introduzca el tamaño de paso h : ');
fprintf('\n\n');
fprintf(' - La solución de la ecuación diferencial es : \n\n\n');
m = dsolve(d,n,'x');
pretty(m);
fprintf('\n\n\n');
f=f1;
w(1)=ya;
i=0;
t(1)=a;
q(1)=a;
v(1)=a;
d=0;
c=0;
g=0;
e=1;
fprintf('- w0 = %1.15f ',ya);
fprintf('\n\n');
for j=a:h:(b-h)
i=1+i;
t(i)=j;
fprintf('---------------');
fprintf('\n');
fprintf('- Iteración: %1.0f\n',e);
fprintf('---------------');
fprintf('\n\n');
k1=h*subs(f,{x,y},{t(i),w(i)});
fprintf('- K1 = h * f(t%1.0f,w%1.0f)',i-1,i-1);
fprintf('\n');
fprintf('- K1 = %1.15f * f(%1.15f,w%1.0f)',h,t(i),i-1);
fprintf('\n');
fprintf('- K1 = %2.15f',(k1))
fprintf('\n\n');
k2=h*subs(f,{x,y},{t(i)+h/4,w(i)+k1/4});
fprintf('- K2 = h * f(t%1.0f + h/4 , w%1.0f + K1/4)',i-1,i-1);
fprintf('\n');
fprintf('- K2 = %1.15f * f(%1.15f + %1.15f , w%1.0f + %1.15f)',h,t(i),h/4,i-1,(k1)/4);
fprintf('\n');
fprintf('- K2 = %2.15f',(k2))
fprintf('\n\n');
k3=h*subs(f,{x,y},{t(i)+(3.*h/8),w(i)+(3.*k1/32)+(9.*k2/32)});
fprintf('- K3 = h * f(t%1.0f + (3/8)h , w%1.0f + 3K1/32 + 9K2/32)',i-1,i-1);
fprintf('\n');
fprintf('- K3 = %1.15f * f(%1.15f + %1.15f , w%1.0f + %1.15f + %1.15f)',h,t(i),((3/8)*h),i-1,(3*(k1)/32),(9*(k2)/32));
fprintf('\n');
fprintf('- K3 = %2.15f',(k3))
fprintf('\n\n');
k4=h*subs(f,{x,y},{t(i)+(12.*h/13),w(i)+(1932.*k1/2197)-(7200.*k2/2197)+(7296.*k3/2197)});
fprintf('- K4 = h * f(t%1.0f + (12/13)h , w%1.0f + 1932K1/2197 - 7200K2/2197 + 7296K3/2197)',i-1,i-1);
fprintf('\n');
fprintf('- K4 = %1.15f * f(%1.15f + %1.15f , w%1.0f + %1.15f - %1.15f + %1.15f)',h,t(i),((12/13)*h),i-1,(1932*(k1)/2197),(7200*(k2)/2197),(7296*(k3)/2197));
fprintf('\n');
fprintf('- K4 = %2.15f',(k4))
fprintf('\n\n');
ResponderEliminark5=h*subs(f,{x,y},{t(i)+h,w(i)+(439.*k1/216)-(8.*k2)+(3680.*k3/513)-(845.*k4/4104)});
fprintf('- K5 = h * f(t%1.0f + h , w%1.0f + 439K1/216 - 8K2 + 3680K3/513 - 845K4/4104)',i-1,i-1);
fprintf('\n');
fprintf('- K5 = %1.15f * f(%1.15f + %1.15f , w%1.0f + %1.15f - %1.15f + %1.15f - %1.15f)',h,t(i),h,i-1,(439*(k1)/216),(8*(k2)),(3680*(k3)/513),(845*(k3)/4104));
fprintf('\n');
fprintf('- K5 = %2.15f',(k5))
fprintf('\n\n');
k6=h*subs(f,{x,y},{t(i)+h/2,w(i)-(8.*k1/27)+(2*k2)-(3544.*k3/2565)+(1859.*k4/4104)-(11.*k5/40)});
fprintf('- K6 = h * f(t%1.0f + h/2 , w%1.0f + 8K1/27 + 2K2 - 3544K3/2565 + 1859K4/4104 - 11K5/40)',i-1,i-1);
fprintf('\n');
fprintf('- K6 = %1.15f * f(%1.15f + %1.15f , w%1.0f + %1.15f + %1.15f - %1.15f + %1.15f - %1.15f)',h,t(i),h,i-1,(8*(k1)/27),(2*(k2)),(3544*(k3)/2565),(1859*(k3)/4104),(11*(k3)/40));
fprintf('\n');
fprintf('- K6 = %2.15f',(k6))
fprintf('\n\n');
w(1+i)=w(i)+(16.*k1/135)+(6656.*k3/12825)+(28561.*k4/56430)-(9.*k5/50)+(2.*k6/55);
fprintf('- w%1.0f = w%1.0f + (16/135) K1 + (6656/12825) K3 + (28561/56430) K4 - (9/50) K5 + (2/55) K6)',i,i-1)
fprintf('\n');
fprintf('- w%1.0f = w%1.0f + %1.15f + %1.15f + %1.15f - %1.15f + %1.15f',i,i-1,(16/135)*(k1),(6656/12825)*(k3),(28561/56430)*(k4),(9/50)*(k5),(2/55)*(k6))
fprintf('\n');
fprintf('- w%1.0f = %2.15f',i,(w(i+1)))
fprintf('\n\n');
e=e+1;
end
fprintf('\n\n');
%Este for obtiene y guarda todos los valores de t
%También se utiliza para evaluar la ecuación diferencial
for p=a:h:b
d=1+d;
q(d)=p;
v(d)=subs(m,p);
end
%Este for se usa para contabilizar las iteraciones
for s=c:1:(d-1)
g=1+g;
k(g)=(g-1);
end
k3=k(end);
%Presentación de los datos
fprintf(' i ti wi+1 y(t)');
fprintf('\n\n');
for k1=0:k3
k2=k1+1;
fprintf('\n');
fprintf(' %1.0f %10.15f %10.15f %10.15f',k(k2),q(k2),w(k2),v(k2));
fprintf('\n');
end
fprintf('\n');
fprintf('\n');
ResponderEliminarclear all
clc
fprintf(' -------------------------------------\n')
fprintf(' MÉTODO DE RUNGE-KUTTA DE ORDEN CUATRO\n')
fprintf(' -------------------------------------\n')
fprintf('\n');
syms t y
d=input(' - Introduzca la ecuación diferencial : ');
n=input(' - Introduzca la condición y(a)=b : ');
f1=input(' - Introduzca la función de trabajo : ');
ya=input(' - Introduzca la condición inicial : ');
a=input(' - Introduzca el valor de a : ');
b=input(' - Introduzca el valor de b : ');
h=input(' - Introduzca el tamaño de paso h : ');
fprintf('\n\n');
fprintf(' - La solución de la ecuación diferencial es : \n\n\n');
m = dsolve(d,n,'t');
pretty(m);
fprintf('\n\n\n');
f=f1;
w(1)=ya;
ti=a;
n=(b-a)/h;
q(1)=a;
v(1)=a;
d=0;
c=0;
g=0;
e=1;
fprintf('- w0 = %1.15f ',ya);
fprintf('\n\n');
for i=0:(n)
fprintf('---------------');
fprintf('\n');
fprintf('- Iteración: %1.0f\n',e);
fprintf('---------------');
fprintf('\n\n');
k1=h*subs(f,{t,y},{ti,w(i+1)});
fprintf('- K1 = h * f(t%1.0f,w%1.0f)',i,i);
fprintf('\n');
fprintf('- K1 = %1.15f * f(%1.15f,w%1.0f)',h,ti,i);
fprintf('\n');
fprintf('- K1 = %2.15f',double(k1))
fprintf('\n\n');
k2=h*subs(f,{t,y},{(ti+(h/2)),(w(i+1)+(k1/2))});
fprintf('- K2 = h * f(t%1.0f + h/2 , w%1.0f + K1/2)',i,i);
fprintf('\n');
fprintf('- K2 = %1.15f * f(%1.15f + %1.15f , w%1.0f + %1.15f)',h,ti,h/2,i,(k1)/2);
fprintf('\n');
fprintf('- K2 = %2.15f',double(k2))
fprintf('\n\n');
k3=h*subs(f,{t,y},{(ti+(h/2)),(w(i+1)+(k2/2))});
fprintf('- K3 = h * f(t%1.0f + h/2 , w%1.0f + K2/2)',i,i);
fprintf('\n');
fprintf('- K3 = %1.15f * f(%1.15f + %1.15f , w%1.0f + %1.15f)',h,ti,h/2,i,(k2)/2);
fprintf('\n');
fprintf('- K3 = %2.15f',double(k3))
fprintf('\n\n');
k4=h*subs(f,{t,y},{(ti+h),(w(i+1)+k3)});
fprintf('- K4 = h * f(t%1.0f + h , w%1.0f + K3)',i,i);
fprintf('\n');
fprintf('- K4 = %1.15f * f(%1.15f + %1.15f , w%1.0f + %1.15f)',h,ti,h,i,k3);
fprintf('\n');
fprintf('- K4 = %2.15f',double(k4))
fprintf('\n\n');
w(i+2)=w(i+1)+((1/6)*(k1+(2*k2)+(2*k3)+k4));
fprintf('- w%1.0f = w%1.0f + (1/6)*(K1+2K2+2K3+K4)',i+1,i)
fprintf('\n');
fprintf('- w%1.0f = w%1.0f + (1/6)*(%1.15f+2*%1.15f+2*%1.15f+%1.15f)',i+1,i,k1,k2,k3,k4)
fprintf('\n');
fprintf('- w%1.0f = %2.15f',i+1,double(w(i+2)))
fprintf('\n\n');
ti=ti+h;
e=e+1;
end
fprintf('\n\n');
%Este for obtiene y guarda todos los valores de t
%También se utiliza para evaluar la ecuación diferencial
for p=a:h:b
d=1+d;
q(d)=p;
v(d)=subs(m,p);
end
%Este for se usa para contabilizar las iteraciones
for s=c:1:(d-1)
g=1+g;
k(g)=(g-1);
end
k3=k(end);
%Presentación de los datos
fprintf(' i ti wi+1 y(t)');
fprintf('\n\n');
for k1=0:k3
k2=k1+1;
fprintf('\n');
fprintf(' %1.0f %10.15f %10.15f %10.15f',k(k2),q(k2),w(k2),v(k2));
fprintf('\n');
end
fprintf('\n');
%Metodo de Runge-kutta
ResponderEliminar%ED de orden superior y sist. de ED
%Despejar y dejar en terminos de de DY and DX
%
% ESCRIBIR ECUACION TAL Y COMO LA DESPEJAMOS Y SOLO PONER LO QUE ESTA
% DESPEJADO
%
%Introduzca la funcion fx= ((391/3*exp(t))-(13/6*exp(4*t))-32+37*y)/(-12)
%Introduzca la funcion fy= ((-36*exp(t))-(6*exp(4*t))+116+(37*t))/12
%Introduzca el intervalo inicial a= 0
%Introduzca el intervalo final b= 1/5
%Introduzca wo de x= 2
%Introduzca wo de y= 1/2
%Introduzca el tamaño de paso h= 1/10
%k1i=h*fi(tj,w1j,w2j)
%k2i=h*fi(tj+h/2,w1j+1/2*k11,w2j+1/2*k12)
%k3i=h*fi(tj+h/2,wij+1/2*k21,w2j+1/2*k22)
%k4i=h*fi(tj+h,w1j+k31,w2j+k32)
%wi,j+1=wij+1/6*(k1i+2k2i+2k3i+k4i); i=0,1,...,N-1
clear all
clc
disp('MÉTODO DE RUNGE-KUTTA PARA SISTEMAS DE ECUACIONES DIFERENCIALES')
fprintf('--------------------------------------------------------------------------\n');
wi=0;
ti=0;
k=0;
syms t x y
fx=input('Introduzca la funcion fx= ');
fy=input('Introduzca la funcion fy= ');
a=input('Introduzca el intervalo inicial a= ');
b=input('Introduzca el intervalo final b= ');
wo_x=input('Introduzca wo de x= ');
wo_y=input('Introduzca wo de y= ');
h=input('Introduzca el tamaño de paso h= ');
wi(1,1)=wo_x;
wi(2,1)=wo_y;
ti=a:h:b;
n=(b-a)/h;
j=1;
while j<n+1
k(1,1)=h*subs(fx,{t,x,y},{ti(j),wi(1,j),wi(2,j)});
k(1,2)=h*subs(fy,{t,x,y},{ti(j),wi(1,j),wi(2,j)});
k(2,1)=h*subs(fx,{t,x,y},{ti(j)+(h/2),wi(1,j)+(1/2*k(1,1)),wi(2,j)+(1/2*k(1,2))});
k(2,2)=h*subs(fy,{t,x,y},{ti(j)+(h/2),wi(1,j)+(1/2*k(1,1)),wi(2,j)+(1/2*k(1,2))});
k(3,1)=h*subs(fx,{t,x,y},{ti(j)+(h/2),wi(1,j)+(1/2*k(2,1)),wi(2,j)+(1/2*k(2,2))});
k(3,2)=h*subs(fy,{t,x,y},{ti(j)+(h/2),wi(1,j)+(1/2*k(2,1)),wi(2,j)+(1/2*k(2,2))});
k(4,1)=h*subs(fx,{t,x,y},{ti(j)+h,wi(1,j)+k(3,1),wi(2,j)+k(3,2)});
k(4,2)=h*subs(fy,{t,x,y},{ti(j)+h,wi(1,j)+k(3,1),wi(2,j)+k(3,2)});
wi(1,j+1)=wi(1,j)+1/6*(k(1,1)+2*k(2,1)+2*k(3,1)+k(4,1));
wi(2,j+1)=wi(2,j)+1/6*(k(1,2)+2*k(2,2)+2*k(3,2)+k(4,2));
fprintf('\n\n\nPara t%d= %3.2f j=%d',j,ti(j+1),j-1)
for i=1:2
fprintf('\n\nK1%d=hf%d(t%d,w1%d,w2%d)= %10.15f',i,i,j-1,j-1,j-1,k(1,i))
end
for i=1:2
fprintf('\n\nK2%d=hf%d(t%d+h/2,w1%d+K11/2,w2%d+k12/2)= %10.15f',i,i,j-1,j-1,j-1,k(2,i))
end
for i=1:2
fprintf('\n\nK3%d=hf%d(t%d+h/2,w1%d+K21/2,w2%d+k22/2)= %10.15f',i,i,j-1,j-1,j-1,k(3,i))
end
for i=1:2
fprintf('\n\nK4%d=hf%d(t%d+h,w1%d+K31,w2%d+k32)= %10.15f',i,i,j-1,j-1,j-1,k(4,i))
end
for i=1:2
fprintf('\n\nw%d%d=w%d%d+1/6(K1%d+2K2%d+2K3%d+K4%d)= %10.15f',i,j,i,j-1,i,i,i,i,wi(i,j+1))
end
j=j+1;
end
fprintf('\n')
fprintf('\n');
ResponderEliminarclear all
clc
fprintf(' -----------------------------------------------------\n')
fprintf(' MÉTODO PARA SISTEMAS DE TRES ECUACIONES DIFERENCIALES\n')
fprintf(' -----------------------------------------------------\n')
fprintf('\n');
syms t x y z
d=input('- Introduzca la ecuación diferencial 1 : ');
d2=input('- Introduzca la ecuación diferencial 2 : ');
d3=input('- Introduzca la ecuación diferencial 3 : ');
n=input('- Introduzca la condición x(a)=b : ');
n2=input('- Introduzca la condición y(a)=b : ');
n3=input('- Introduzca la condición z(a)=b : ');
l=input('- Introduzca la variable : ');
f1=input('- Introduzca la función de trabajo 1 : ');
f2=input('- Introduzca la función de trabajo 2 : ');
f3=input('- Introduzca la función de trabajo 3 : ');
xa=input('- Introduzca la condición inicial 1 : ');
ya=input('- Introduzca la condición inicial 2 : ');
za=input('- Introduzca la condición inicial 3 : ');
a=input('- Introduzca el valor de a : ');
b=input('- Introduzca el valor de b : ');
h=input('- Introduzca el tamaño de paso h : ');
fprintf('\n\n');
[Ec1,Ec2,Ec3]=dsolve(d,d2,d3,n,n2,n3);
fprintf(' - La solución de la ecuación diferencial es : \n\n');
pretty(Ec1);
fprintf('\n\n\n');
fprintf(' - La solución de la ecuación diferencial 2 es : \n\n');
pretty(Ec2);
fprintf('\n\n\n');
fprintf(' - La solución de la ecuación diferencial 3 es : \n\n');
pretty(Ec3);
fprintf('\n\n\n');
ti=a;
ResponderEliminarn=(b-a)/h;
f=f1;
fb=f2;
fc=f3;
u(1)=xa;
w(1)=ya;
j(1)=za;
q(1)=a;
v(1)=a;
v1(1)=a;
v2(1)=a;
rp=0;
c=0;
g=0;
e=1;
for i=0:(n-1)
fprintf(' - Iteración: %1.0f\n\n',e);
ti
k11=h*subs(f,{t,x,y,z},{ti,u(i+1),w(i+1),j(i+1)});
k12=h*subs(fb,{t,x,y,z},{ti,u(i+1),w(i+1),j(i+1)});
k13=h*subs(fc,{t,x,y,z},{ti,u(i+1),w(i+1),j(i+1)});
k21=h*subs(f,{t,x,y,z},{(ti+(h/2)),(u(i+1)+((k11)/2)),(w(i+1)+((k12)/2)),(j(i+1)+((k13)/2))});
k22=h*subs(fb,{t,x,y,z},{(ti+(h/2)),(u(i+1)+((k11)/2)),(w(i+1)+((k12)/2)),(j(i+1)+((k13)/2))});
k23=h*subs(fc,{t,x,y,z},{(ti+(h/2)),(u(i+1)+((k11)/2)),(w(i+1)+((k12)/2)),(j(i+1)+((k13)/2))});
k31=h*subs(f,{t,x,y,z},{(ti+(h/2)),(u(i+1)+((k21)/2)),(w(i+1)+((k22)/2)),(j(i+1)+((k23)/2))});
k32=h*subs(fb,{t,x,y,z},{(ti+(h/2)),(u(i+1)+((k21)/2)),(w(i+1)+((k22)/2)),(j(i+1)+((k23)/2))});
k33=h*subs(fc,{t,x,y,z},{(ti+(h/2)),(u(i+1)+((k21)/2)),(w(i+1)+((k22)/2)),(j(i+1)+((k23)/2))});
k41=h*subs(f,{t,x,y,z},{(ti+h),(u(i+1)+(k31)),(w(i+1)+(k32)),(j(i+1)+(k33))});
k42=h*subs(fb,{t,x,y,z},{(ti+h),(u(i+1)+(k31)),(w(i+1)+(k32)),(j(i+1)+(k33))});
k43=h*subs(fc,{t,x,y,z},{(ti+h),(u(i+1)+(k31)),(w(i+1)+(k32)),(j(i+1)+(k33))});
u(i+2)=u(i+1)+((1/6)*(k11+(2*k21)+(2*k31)+k41));
w(i+2)=w(i+1)+((1/6)*(k12+(2*k22)+(2*k32)+k42));
j(i+2)=j(i+1)+((1/6)*(k13+(2*k23)+(2*k33)+k43));
fprintf(' K11= %2.8f\n K12= %2.8f\n K13= %2.8f\n\n',double(k11),double(k12),double(k13));
fprintf(' K21= %2.8f\n K22= %2.8f\n K23= %2.8f\n\n',double(k21),double(k22),double(k23));
fprintf(' K31= %2.8f\n K32= %2.8f\n K33= %2.8f\n\n',double(k31),double(k32),double(k33));
fprintf(' K41= %2.8f\n K42= %2.8f\n K43= %2.8f\n\n',double(k41),double(k42),double(k43));
ti=ti+h;
e=e+1;
end
rp=0;
for p=a:h:b
rp=1+rp;
v1(rp)=subs(Ec2,p);
end
rp=0;
for p=a:h:b
rp=1+rp;
v2(rp)=subs(Ec3,p);
end
%Este for se usa para contabilizar las iteraciones
for s=c:1:(rp-1)
g=1+g;
k(g)=(g-1);
end
fprintf('\n\n');
fprintf(' i ti');
[k' q']
fprintf('\n\n');
fprintf(' ui+1 x(t)');
[u' v']
fprintf('\n\n');
fprintf(' wi+1 y(t)');
[w' v1']
fprintf('\n\n');
fprintf(' wi+1 z(t)');
[j' v2']
clear all
ResponderEliminarclc
format_dec=15; %Setea la cantidad de decimales a emplear en las respuestas
fprintf('MÉTODO DE PUNTO FIJO PARA 2 ECUACIONES NO LINEALES\n')
fprintf('------------------------------------------------------\n')
fprintf('\n');
syms x1;
syms x2;
%syms x3;
fx1 = input(' Ingresar (X1) g1(x1,x2): ');
fx2 = input(' Ingresar (X2) g2(x1,x2): ');
%fx3 = input('Ingresar X3 despejada: ');
x1k = input(' Ingresar el valor x1^(0): ');
x2k = input(' Ingresar el valor x2^(0): ');
%x3k = input('Ingresar el valor x3: ');
tol = input(' Ingresar la tolerancia: ');
X1 = subs(fx1, {x1,x2}, {x1k, x2k});
X2 = subs(fx2, {x1,x2}, {x1k, x2k});
%X3 = subs(fx3, {x1,x2}, {x1k, x2k});
%X1 = subs(fx1, {x1,x2,x3}, {x1k, x2k, x3k});
%X2 = subs(fx2, {x1,x2,x3}, {x1k, x2k, x3k});
%X3 = subs(fx3, {x1,x2,x3}, {x1k, x2k, x3k});
i = 1;
fprintf('\n\n');
fprintf('k \t x1^(k) \t\t\t\t x2^(k) \t\t\t || X^k - X^(k-1)||');
fprintf('\n');
fprintf('%d \t %3.*f \t %3.*f \t -',i-1,format_dec,x1k,format_dec,x2k);
fprintf('\n');
i = i + 1;
rx1 = abs(x1k - X1);
rx2 = abs(x2k - X2);
%rx3 = abs(x3k - X3);
if rx1 > rx2
%if rx1 > rx3
rest = rx1;
else
rest = rx2;
% end
%else
%if rx2 > rx3
%rest = rx2;
%else
%rest = rx3;
%end
end
fprintf('%d \t %3.*f \t %3.*f \t %e \n',i-1,format_dec,X1,format_dec,X2,rest);
%rest = 1;
while rest > tol
x1k = X1;
x2k = X2;
% x3k = X3;
%X1 = subs(fx1, {x1,x2,x3}, {x1k, x2k, x3k});
%X2 = subs(fx2, {x1,x2,x3}, {x1k, x2k, x3k});
%X3 = subs(fx3, {x1,x2,x3}, {x1k, x2k, x3k});
X1 = subs(fx1, {x1,x2}, {x1k, x2k});
X2 = subs(fx2, {x1,x2}, {x1k, x2k});
% X3 = subs(fx3, {x1,x2,x3}, {x1k, x2k, x3k});
rx1 = abs(x1k - X1);
rx2 = abs(x2k - X2);
%rx3 = abs(x3k - X3);
% if rx1 > rx2
% if rx1 > rx3
% rest = rx1;
% else
% rest = rx3;
% end
%else
% if rx2 > rx3
% rest = rx2;
%else
% rest = rx3;
%end
%end
if rx1 > rx2
%if rx1 > rx3
rest = rx1;
else
rest = rx2;
% end
%else
%if rx2 > rx3
%rest = rx2;
%else
%rest = rx3;
%end
end
i = i + 1;
fprintf('%d \t %3.*f \t %3.*f \t %e \n',i-1,format_dec,X1,format_dec,X2,rest);
end
fprintf('\n\nX1: %3.*f\n',format_dec,X1);
fprintf('X2: %3.*f\n',format_dec,X2);
%fprintf('X3: %3.8f\n',X3);
buenas tardes amigo una consulta en el metodo de Neville en la parte de FX(i+1)= funcion(X(i+1),fun); hay un error y no corre en Matlab me podrias ayudar por favor gracias
ResponderEliminar