jueves, 19 de noviembre de 2015

Método de Müller en MATLAB para encontrar raíces imaginarías.

Este método te permitirá obtener las raices de una ecuación de cualquier grado, este método tiene la ventaja de que, además de obtener el resultado real, también otorga la parte imaginaría del resultado.

Para implementar el método en MATLAB, debes crear un Script que contenga el siguiente código, este será único script que debes correr.

%programa principal método Muller
fun=@(x)(16*x.^4-40*x.^3+5*x.^2+20*x+6) %La parte en negritas es la que debes sustituir
x=[0.5,-0.5,0] %El dominio en el que quieres que los resultados sean gráficados
N=5 %Corresponde al numero de iteraciones, te recomiendo que sea siempre mayor o igual a 5
P=metodoMuller(fun,x,N)

El siguiente será el código que llevará a cabo todo el proceso matemático, debe ser vaciado en un script distinto y guardado en la misma carpeta que el programa principal.

function P=metodoMuller(fun,x,N)
 l=0
 f=0;
  c=fun(x(3))
   b=(((((x(1)-x(3))^2)*(fun(x(2))-fun(x(3))))-((x(2)-x(3))^2)*(fun(x(1))-fun(x(3)))))/((x(1)-x(3))*(x(2)-x(3))*(x(1)-x(2)))
    a=(((((x(2)-x(3)))*(fun(x(1))-fun(x(3))))-((x(1)-x(3)))*(fun(x(2))-fun(x(3)))))/((x(1)-x(3))*(x(2)-x(3))*(x(1)-x(2)))
    x4=(x(3)-((2*c)/((b)+((b/abs(b))*sqrt((b^2)-(4*a*c))))))
%Scienceprocedures.blogspot.mx
    x0=min(x)-1:0.09:max(x)+1
    hold on
    grid on
    plot (x(1),fun(x(1)),'Ok')
    hold on
    plot (x(2),fun(x(2)),'Ok')
    hold on
    plot (x(3),fun(x(3)),'Ok')
    hold on
    plot(x0,fun(x0),'b')
    hold on
for i=1:1:N
    if i==N
         plot (x0,R(x0),'+r')
    hold on
    end
    c=fun(x(3))
   b=(((((x(1)-x(3))^2)*(fun(x(2))-fun(x(3))))-((x(2)-x(3))^2)*(fun(x(1))-fun(x(3)))))/((x(1)-x(3))*(x(2)-x(3))*(x(1)-x(2)))
    a=(((((x(2)-x(3)))*(fun(x(1))-fun(x(3))))-((x(1)-x(3)))*(fun(x(2))-fun(x(3)))))/((x(1)-x(3))*(x(2)-x(3))*(x(1)-x(2)))
    x4=(x(3)-((2*c)/((b)+((b/abs(b))*sqrt((b^2)-(4*a*c))))))
    x(1)=x(2)
    x(2)=x(3)
    x(3)=x4;
          x0=min(x)-1:0.09:max(x)+1
    R=@(x0)((a*((x0-x(3)).^2))+(b*(x0-x(3)))+c)
    C=['k','b','y','g','r','m','k','b','y','g','r','m','k','b','y','g','r','m','k','b','y','g','r','m','k','b','y','g','r','m','k','b','y','g','r','m','k','b','y','g','r','m','k','b','y','g','r','m','k','b','y','g','r','m','k','b','y','g','r','m',]
    plot (x0,R(x0),C(i))
    hold on
end
P=x(3)
plot (P,R(P),'*r')
end

Nota importante: Ten cuidado al escribir la ecuación cuya raíz deseas encontrar, observa, como en el ejemplo, que es necesario poner un punto antes del signo "^" para que el programa funcione apropiadamente. 
Si piensas utilizar el código anterior para propósitos no académicos, te pido que incluyas un link a esta pagina web.

2 comentarios:

  1. crack maquina fiera mastodonte leyenda QUE BUEN CODIGO :V

    ResponderEliminar
  2. Excelente código muy completo, cómo se modificaría para que almacenara los valores que se van tomando?

    ResponderEliminar