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

20 comentarios:

  1. %MÉTODO EXPLÍCITO DE ADAMS-BASHFORTH DE DOS PASOS

    % - 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');

    ResponderEliminar
  2. %MÉTODO EXPLÍCITO DE ADAMS-BASHFORTH DE TRES PASOS
    %-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

  3. %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');


    ResponderEliminar
  4. %MÉTODO DE EXTRAPOLACIÓN

    % - 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');

    ResponderEliminar
    Respuestas
    1. Hola! en el de extrapolación me parece que faltan más cálculos, saludos

      Eliminar
  5. %MÉTODO DE HEUN
    %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');


    ResponderEliminar
  6. %MÉTODO MODIFICADO DE EULER

    % - 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');

    ResponderEliminar
  7. fprintf('\n');
    clear 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

    ResponderEliminar
  8. fprintf('\n');

    if 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

    ResponderEliminar
  9. fprintf('\n');
    clear 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');

    ResponderEliminar
  10. fprintf('\n');
    clear 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))

    ResponderEliminar
  11. fprintf('\n\n');
    k5=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');

    ResponderEliminar
  12. fprintf('\n');
    clear 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))

    ResponderEliminar
  13. fprintf('\n\n');
    k5=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');

    ResponderEliminar
  14. fprintf('\n');
    clear 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');

    ResponderEliminar
  15. %Metodo de Runge-kutta
    %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')

    ResponderEliminar
  16. fprintf('\n');
    clear 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');

    ResponderEliminar
  17. ti=a;
    n=(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']

    ResponderEliminar
  18. clear all
    clc
    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);

    ResponderEliminar
  19. 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