Hilaquita Mamani Gladys

Método de la Müller.

Introducción

Este método utilizado para encontrar raíces de ecuaciones  con raíces múltiples, y consiste en obtener los coeficientes de la parábola que pasa por tres puntos elegidos. Dichos coeficientes son sustituidos en la formula cuadrática para obtener el valor donde la parábola intersecta al eje X; es decir, la raíz estimada. La aproximación se puede facilitar, si se escribe la ecuación de la parábola en una forma conveniente.

Una de las mayores ventajas de este método, es que al trabajar con la formula cuadrática es posible localizar tanto raíces reales, como raíces complejas.

Características del método Muller.

▪ Converge cuadráticamente en un intervalo cercano a la raíz.

▪ No requiere evaluar la primera derivada.

▪ Se obtiene raíces reales   y complejas (cuando las raíces sean repetidas.

▪ Requiere valores iníciales

▪ Extensión del método de la secante; aprox. la gráfica de la función f(x) por una línea recta que pasa por x los puntos (xi -1,f(x1)) su intersección con el eje x   da   una nueva aproximación (Xi -1).

▪ n=2 segundo

Se tomó 3 valores iníciales X0, X1, X2 y está ene. Polinomio P(x) de segundo grado que pasa por los puntos (X0,f(X0)), (X1,f(X1)) y (X2,f(X2)).

▪ Se toman sus raíces de p(x), la más cercana a X 2,   como la siguiente aproximación   a X3

Fórmula

Los tres valores iniciales necesitados son denotados como xk, xk-1 y xk-2. La parábola pasa a través de los puntos: (xkf(xk)), (xk-1f(xk-1)) y (xk-2f(xk-2)), si se escribe en la forma de Newton, entonces:

donde f[xk, xk-1] y  f[xk, xk-1, xk-2] denotan restas divididas. Esto puede ser escrito como:

Donde:

La próxima iteración esta dada por la raíz que brinda la ecuación  y = 0.

  • Determina la siguiente aproximación x3 encontrando la intersección con el eje x de la parábola definida por los puntos (x0,f(x0)), (x1,f(x1)), (x2,f(x2)).

Pseudocódigo

using System;

using System.Collections.Generic;

using System.Text;

namespace Muller

{

class Program

{

static double F(double x)

{

double F= Math.Pow(x,3)-13*x-12;

return F;

}

static void Main(string[] args)

{

Console.WriteLine(“****METODO MULLER***”);

Console.WriteLine(“ingrese X0″);

double X0 = double.Parse(Console.ReadLine());

Console.WriteLine(“ingrese X1″);

double X1 = double.Parse(Console.ReadLine());

Console.WriteLine(“ingrese X2″);

double X2 = double.Parse(Console.ReadLine());

Console.WriteLine(“ingrese Eadm”);

double Eadm = double.Parse(Console.ReadLine());

Console.WriteLine(“ingrese n”);

Double n = double.Parse(Console.ReadLine());

double h0,h1,d0,d1,A,B,C,R, denominador, h,X3;

int i = 1;

h0 = X1 – X0;

h1 = X2 – X1;

d0 = (F(X1) – F(X0)) / (X1 – X0);

d1 = (F(X2) – F(X1)) / (X2 – X1);

A = (d1 – d0) / (h1 + h0);

i = 3;

do

{

B = A * h1 + d1;

C=F(X2);

R=Math.Sqrt(Math.Pow(B,2)-(4*A*C));

if (B+R>B-R)

{

denominador = B + R;

}

else

{

denominador = B – R;

}

h = (-2*C) / (denominador);

X3 = X2 + h;

if (Eadm>Math.Abs(h ))

{

Console.WriteLine(X3);

Console.WriteLine(i);

goto id1;

}

X0 = X1;

X1 = X2;

X2 = X3;

h0 = X1 – X0;

h1 = X2 – X1;

d0 = (F(X1) – F(X0)) / h0;

d1 = (F(X2) – F(X1)) / h1;

A = (d1 – d0) / (h1 + h0);

i++;

} while (i<=n);

Console.WriteLine(“NeuN”);

id1:

Console.ReadKey();

}

}

}

Salidas

Gutierrez Bautista Brenda

Método de Muller  

 

Contenido

 

1.     Introducción. 3

2.     Fundamento teórico. 3

2.1Formula Metodo Muller 4

3.     JAVA de Eclipse. 5

3.1   Código. 5

3.2  Corrida. 6

MÉTODO DE Müller

1.       Introducción

Este método utilizado para encontrar raíces de ecuaciones  con raíces múltiples, y consiste en obtener los coeficientes de la parábola que pasa por tres puntos elegidos. Dichos coeficientes son sustituidos en la formula cuadrática para obtener el valor donde la parábola intersecta al eje X; es decir, la raíz estimada. La aproximación se puede facilitar, si se escribe la ecuación de la parábola en una forma conveniente.

Una de las mayores ventajas de este método, es que al trabajar con la formula cuadrática es posible localizar tanto raíces reales, como raíces complejas.

2.       Fundamento teórico

El método de la secante obtiene raíces de una función estimando una proyección de una línea recta en el eje de las x, a través de los valores de la función. El método de Müller, trabaja de manera similar, pero en lugar de hacer la proyección de una recta  utilizando dos puntos, requiere de tres puntos para calcular una parábola.

Para esto necesitaremos de tres puntos [x0, f(x0)], [x1, f(x1)] y [x2, f(x2)]. La aproximación la podemos escribir como:

 

f2(x) = A(x – x2)2 + B(x – x2) + C

 Los coeficientes de la parábola los calculamos resolviendo el siguiente sistema de ecuaciones.

 f2(x0) = A(x0 – x2)2 + B(x0 – x2) + C

f2(x1) = A(x1 – x2)2 + B(x1 – x2) + C

f2(x2) = A(x2 – x2)2 + B(x2 – x2) + C

 De la última ecuación podemos ver que el calor de C = f2(x2). Sustituyendo los valores de C en las otras dos ecuaciones tenemos

 f2(x0)- f2(x2)  = A(x0 – x2)2 + B(x0 – x2)

f2(x1) – f2(x2) = A(x1 – x2)2 + B(x1 – x2)

 Si definimos

 h0 = x1 – x0

h1 = x2 – x1

d0 = [f(x1) – f(x0)]/[x1 – x0]

d1 = [f(x2) – f(x1)]/[x2 –x1]

 Sustituyendo en las ecuaciones tenemos

 (d0* h0 + d1* h1)= A(h1 + h0 )2 – B(h1 + h0 )

-d1* h1 = A(h1)2 – Bh1

 La solución de este sistema de ecuaciones es:

 A = (d1 – d0)/(h1 + h0)

                                                           B = Ah1 + d1

                                                    C = f(x2)

2.1.Formula Método Muller

El método de Muller cuenta con tres valores iniciales necesitados son denotados como xk, xk-1 y xk-2. La parábola pasa a través de los puntos: (xkf(xk)), (xk-1f(xk-1)) y (xk-2f(xk-2)), si se escribe en la forma de Newton, entonces:

donde f[xk, xk-1] y  f[xk, xk-1, xk-2] denotan restas divididas. Esto puede ser escrito como:

donde

La próxima iteración esta dada por la raíz que brinda la ecuación  y = 0.

3.       Java de Eclipse

Implementaremos el algoritmo matemático haciendo uso del programa  Eclipse Java. Uso el método de Müller con el siguiente ejemplo los valores iniciales de 4.5, 5.5 y 5 para determinar la raíz de la ecuación f(x) = x3 – 13x – 12.

(CHICOS AQUÍ PUEDEN AÑADIR MÁS COSAS)

 3.1   Código

  1. public class metmuller {
  2. public static void main(String[] args) {
  3.     Muller();
  4.   }

10. static public void Muller()

  1. {
  2. double x0 = 4.5, x1 = 5.5, x2 = 5.0, x3;
  3. double h0, h1, d0, d1, A, B, C;
  4. double den, raiz;

16. do

  1. {

20.

  1. h0 = x1 – x0;
  2. h1 = x2 – x1;
  3. d0 = (f(x1) – f(x0)) / h0;
  4. d1 = (f(x2) – f(x1)) / h1;
  5. A = (d1 – d0) / (h1 + h0);
  6. B = A * h1 + d1;
  7. C = f(x2);
  8. raiz = Math.sqrt(B * B – 4.0 * A * C);
  9. if (Math.abs(B + raiz) > Math.abs(B – raiz))
  10. den = B + raiz;
  11. else
  12. den = B – raiz;
  13. x3 = x2 – 2 * C / den;
  14. System.out.println(” x = ” + x3 + ” ” + f(x3));
  15. x0 = x1;
  16. x1 = x2;
  17. x2 = x3;
  18. }while (Math.abs(f(x3)) > 0.000001);
  19. }
  20. static public double f(double x)
  21. {
  22. return(x*x*x – 13*x -12);
  23. }

60.}

3.2   Corrida

COLQUE QUISPE ELMER

MÉTODO DE MULLER

 

Este es un método para encontrar las raíces de ecuaciones polinomiales de la forma general:

Donde n es el orden del polinomio y las  son coeficientes constantes. Continuando con los polinomios, estos cumplen con las siguientes reglas:

 

  • Para la ecuación de orden n, hay n raíces reales o complejas. Se debe notar que esas raíces no son necesariamente distintas.
  • Si n es impar, hay al menos una raíz real.
  • Si las raíces complejas existen, existe un par conjugado.

 

Antecedentes

 

Los polinomios tienen muchas aplicaciones en ciencia e ingeniería, como es el caso de su utilización en ajuste de curvas. Sin embargo, se considera que una de las aplicaciones mas interesantes  y potentes es en los sistemas dinámicos, particularmente en los lineales.

 

El polinomio mas conocido en el mundo científico, es el denominado, ecuación característica, que es de la forma:

Donde las raíces de este polinomio satisfacen:

También denominados eigenvalores del sistema. Los eigenvalores pueden utilizarse para analizar un sistema, para nuestro caso es muy útil en lo concerniente a la estabilidad. Con base en lo anterior, encontrar las raíces en sistemas de segundo orden es prácticamente sencillo, pero para sistemas de orden superior, puede resultar en un arduo trabajo.

 

EL MÉTODO

 

Un predecesor del método de Muller, es el método de la secante, el cual obtiene raíces, estimando una proyección de una línea recta en el eje x, a través de dos valores de la función (Figura 1). El método de Muller toma un punto de vista similar, pero proyecta una parábola a través de tres puntos (Figura 2).

 

El método consiste en obtener los coeficientes de los tres puntos, sustituirlos en la fórmula cuadrática y obtener el punto donde la parábola intercepta el eje x. La aproximación es fácil de escribir, en forma conveniente esta sería:

Así, se busca esta parábola para intersectar los tres puntos [x0, f(x0)], [x1, f(x1)] y [x2, f(x2)]. Los coeficientes de la ecuación anterior se evalúan al sustituir uno de esos tres puntos para dar:

La última ecuación genera que,, de esta forma, se puede tener un sistema de dos ecuaciones con dos incógnitas:

 

Definiendo de esta forma:

 

Sustituyendo en el sistema:

 

Teniendo como resultado los coeficientes:

Hallando la raiz, se implementar la solución convencional, pero debido al error de redondeo potencial, se usará una formulación alternativa:

despejando

La gran ventaja de este método es que se pueden localizar tanto las raíces reales como las imaginarias.

Hallando el error este será:

 

Al ser un método de aproximación, este se realiza de forma secuencial e iterativamente, donde x1, x2, x3 reemplazan los puntos x0, x1, x2 llevando el error a un valor cercano a cero.

 

PROGRAMA

Por ser un método que trabaja de forma lineal, es posible una aplicación computacional en forma sencilla, la cual sería:

 

FUNCION MULLER

 

SubMuller (xr, h, eps, maxit)

x2 = xr

x1 = xr + h*xr

x0 = xr – h*xr

Do

iter = iter + 1

h0  = x1 + x0

h1 = x2 – x1

d0 = (f(x1)-f(x0))/h0

d1 = (f(x2)-f(x1))/h1

a = (d1 – d0)/(h1 + h0)

b = a*h1 +d1

c = f(x2)

rad = sqrt (b*b – 4*a*c)

if I b+ rad I > l b – rad l then

den = b + rad

Else

den = b – rad

End if

dxr = -2*c/den

xr = x2 + dxr

Print iter, xr

IF (Idxrl<eps*xr or iter>maxit) exit

x0 = x1

x1 = x2

x2 = xr

End do

End Muller

 

FUNCION MULLER EN C#

 

using System;
using System.Collections.Generic;
using System.Text;
namespace Muller
{
class Program
{
static double F(double x)
{
double F= Math.Pow(x,3)-13*x-12;
return F;
}
static void Main(string[] args)
{
Console.WriteLine(“ingrese X0″);
double X0 = double.Parse(Console.ReadLine());
Console.WriteLine(“ingrese X1″);
double X1 = double.Parse(Console.ReadLine());
Console.WriteLine(“ingrese X2″);
double X2 = double.Parse(Console.ReadLine());
Console.WriteLine(“ingrese Eadm”);
double Eadm = double.Parse(Console.ReadLine());
Console.WriteLine(“ingrese n”);
double n = double.Parse(Console.ReadLine());
double h0,h1,d0,d1,A,B,C,R, denominador, h,X3;
int i = 1;
h0 = X1 – X0;
h1 = X2 – X1;
d0 = (F(X1) – F(X0)) / (X1 – X0);
d1 = (F(X2) – F(X1)) / (X2 – X1);
A = (d1 – d0) / (h1 + h0);
i = 3;
do
{
B = A * h1 + d1;
C=F(X2);
R=Math.Sqrt(Math.Pow(B,2)-(4*A*C));
if (B+R>B-R)
{
denominador = B + R;
}
else
{
denominador = B – R;
}
h = (-2*C) / (denominador);
X3 = X2 + h;
if (Eadm>Math.Abs(h ))
{
Console.WriteLine(X3);
Console.WriteLine(i);
goto id1;
}
X0 = X1;
X1 = X2;
X2 = X3;
h0 = X1 – X0;
h1 = X2 – X1;
d0 = (F(X1) – F(X0)) / h0;
d1 = (F(X2) – F(X1)) / h1;
A = (d1 – d0) / (h1 + h0);
i++;
} while (i<=n);
Console.WriteLine(“NeuN”);
id1:
Console.ReadKey();

}
}
}

 

 

Ejemplo

h = 0,1

x2 = 5  x1 = 5,5  x0 =4,5

Con un análisis previo, las raíces son –3, -1 y 4

 

Solución

 

Calculando

 

 

Hallando los coeficientes

 

La raíz cuadrada del discriminante es:

 

Así

 

Y el error estimado

 

Ahora

x2 = 3,9765  x1 = 5  x0 =5,5

 

Haciendo uso de un programa y realizando diferentes iteraciones:

i xr Ea %
0 5  
1 3,9465 25,740
2 4,0011 0,614
3 4,0000 0,026
4 4,0000 0,000

 

Jimenez Chavez Maria

 METODO DE LA SECANTE

function secante
global fun
fprintf(‘METODO DE LA SECANTE:\n’);
fun=input(‘Ingrese la funcion:\n’,’s’);
x0=input(‘Ingrese el primer punto inicial:\n’);
x1=input(‘Ingrese el segundo punto inicial:\n’);
tol=input(‘Ingrese la tol:\n’);
it=0;
fprintf(‘it x0 x1 x2 x1-x2′);
while(it<50) it=”it+1;” x=”x0;” f0=”eval(fun);” x=”x1;” f1=”eval(fun);” x2=”(x0*f1-x1*f0)/(f1-f0);”> fprintf(‘el procedimiento se completo satisfactoriamente:\n’);
break
end
x0=x1;
x1=x2;
end
fprintf(‘la raiz buscada es=%15.9f\n’,x2);
ezplot(fun),
grid on

 METODO DE MULLER

% m metodo de Muller para obtener una solución para f(x)=0
function p = muller(f,x0,x1,x2,tol,ni)
h1 = x1 – x0;
h2 = x2 – x1;
d1 = (polyval(f,x1) – polyval(f,x0))/h1;
d2 = (polyval(f,x2) – polyval(f,x1))/h2;
d = (d2 – d1)/(h2 + h1);
i = 3;
while i <= ni
b = d2 + h2*d;
D = (b*b – 4*polyval(f,x2)*d)^0.5;
if abs(b – D) < abs(b + D)
E = b + D;
else
E = b – D;
end
h = -2*polyval(f,x2)/E;
p = x2 + h;
if abs(h) < tol
return;
end

x0 = x1;
x1 = x2;
x2 = p;
h1 = x1 – x0;
h2 = x2 – x1;
d1 = (polyval(f,x1) – polyval(f,x0))/h1;
d2 = (polyval(f,x2) – polyval(f,x1))/h2;
d = (d2 – d1)/(h2 + h1);
i = i + 1;
end
fprintf(‘Fallo después de %d iteraciones’,ni);

 

 

 

Gutierrez Condori Ximena

 

METODO MULLER

 

PRIMERA FORMA

% Muller

function Muller

tol=eps(’double’);

x0=1.5; x1=1.2; x2=1.0;

fx0=fx(x0); fx1=fx(x1); fx2=fx(x2); iter=1;

while abs(fx2)>tol

c=fx2;

d0=x0-x2; d1=x1-x2;

det=d0*d1*(x0-x1);

b=(d0*d0*(fx1-fx2)-d1*d1*(fx0-fx2))/det;

a=(d1*(fx0-fx2)-d0*(fx1-fx2))/det;

di=sqrt(b*b-4*a*c);

isig=1; if b<0 isig=-1; end

z=(-2)*c/(b+isig*di);

x3=x2+z;

if abs(x3-x1)<abs(x3-x0)

u=x1; x1=x0; x0=u;

u=fx1; fx1=fx0; fx0=u;

end

if abs(x3-x2)<abs(x3-x1)

u=x2; x1=u;

u=fx2; fx1=u;

end

x2=x3;

fx2=fx(x2);

fprintf(’%17.14f+%17.14fi %23.15f %4.0f\n’,real(x2),imag(x2),fx2,iter);

iter=iter+1;

end

function f=fx(x)

f=xˆ3-sin(x);

EJEMPLO

SEGUNDA FORMA

% metodo de Muller para obtener una solución para f(x)=0
function p = muller(f,x0,x1,x2,tol,ni)
h1 = x1 – x0;
h2 = x2 – x1;
d1 = (polyval(f,x1) – polyval(f,x0))/h1;
d2 = (polyval(f,x2) – polyval(f,x1))/h2;
d = (d2 – d1)/(h2 + h1);
i = 3;
while i <= ni
    b = d2 + h2*d;
    D = (b*b – 4*polyval(f,x2)*d)^0.5;
    if abs(b – D) < abs(b + D)
        E = b + D;
    else
        E = b – D;
    end
    h = -2*polyval(f,x2)/E;
    p = x2 + h;
    if abs(h) < tol
        return;
    end

x0 = x1;
    x1 = x2;
    x2 = p;
    h1 = x1 – x0;
    h2 = x2 – x1;
    d1 = (polyval(f,x1) – polyval(f,x0))/h1;
    d2 = (polyval(f,x2) – polyval(f,x1))/h2;
    d = (d2 – d1)/(h2 + h1);
    i = i + 1;
end
fprintf(‘Fallo después de %d iteraciones’,ni);

EJEMPLO