Sei sulla pagina 1di 10

RACES DE ECUACIONES

Mtodo Mller
Ing Yamil Armando Cerquera Rojas yacerque@gmail.com Especialista en Sistemas Universidad Nacional Docente Universidad Surcolombiana Neiva - Huila

Contenido

Introduccin
Recuerde que el mtodo de la secante obtiene la raz dirigiendo una recta hasta el eje x con dos valores de la funcin. El mtodo de Mller es similar; pero construye una parbola con tres puntos. Este mtodo utilizado para encontrar races de ecuaciones con races mltiples, y consiste en obtener los coeficientes de la parbola que pasa por tres puntos elegidos. Dichos coeficientes son sustituidos en la frmula cuadrtica para obtener el valor donde la parbola intersecta al eje X; es decir, la raz estimada. La aproximacin se puede facilitar, si se escribe la ecuacin de la parbola en una forma conveniente. Una de las mayores ventajas de este mtodo, es que al trabajar con la formula cuadrtica es posible localizar tanto races reales, como races complejas.
f 2 ( xi ) = a ( xi x 2 ) 2 + b( xi x 2 ) + c Ecuacin 1

Si se quiere que esta parbola pase por los tres puntos [ x 0 , f ( x 0 )] , [ x1 , f ( x1 )] , [ x2 , f ( x2 )] , Los coeficientes de la Ecuacin 1 se evalan sustituyendo cada uno de esos tres puntos para dar:
f ( x 0 ) = a ( x 0 x 2 ) 2 + b( x 0 x 2 ) + c Ecuacin 2

f ( x1 ) = a ( x1 x 2 ) 2 + b( x1 x 2 ) + c Ecuacin 3 f ( x 2 ) = a( x 2 x 2 ) 2 + b( x 2 x 2 ) + c Ecuacin 4

Observe que se ha eliminado el subndice 2 de la funcin por brevedad. Debido a que se tiene tres ecuaciones es posible encontrar los tres coeficientes desconocidos a,b,c. De la Ecuacin 4 se tiene que c = f ( x 2 ) . As el valor de c es la funcin evaluada en el tercer valor inicial x 2 . Este valor se sustituye en las ecuaciones Ecuacin 2 y Ecuacin 3 para tener dos ecuaciones con dos incgnitas:
f ( x 0 ) f ( x 2 ) = a ( x0 x 2 ) 2 + b( x0 x 2 )a ( x0 x 2 ) 2 b( x0 x 2 ) = f ( x 2 ) f ( x0 )
Ecuacin 5

f ( x1 ) f ( x 2 ) = a( x1 x 2 ) 2 + b( x1 x 2 ) a( x1 x 2 ) 2 b( x1 x 2 ) = f ( x 2 ) f ( x1 )
Ecuacin 6

Una manipulacin algebraica permite encontrar los coeficientes restantes a y b. La manera de hacer esto consiste en definir las diferencias:
h0 = x1 x0

0 =

f ( x1 ) f ( x0 ) x1 x0

h1 = x 2 x1 f ( x 2 ) f ( x1 ) 1 = x 2 x1

Estas se sustituyen en la Ecuacin 5: a ( x0 x 2 ) 2 b( x0 x 2 ) = f ( x 2 ) f ( x0 ) Teniendo h0 = x1 x0 y h1 = x 2 x1 , entonces ( x 0 x 2 ) = (h0 + h1 ) , por tanto se tiene finalmente:
(h0 + h1 )b (h0 + h1 ) 2 a = h0 0 + h11

Y de la Ecuacin 6
a ( x1 x 2 ) 2 b( x1 x 2 ) = f ( x 2 ) f ( x1 ) , si f ( x 2 ) f ( x) = 1 ( x 2 x1 )

b( x1 x 2 ) a( x1 x 2 ) 2 = 1 ( x 2 x1 ) , convierte en:

si

( x1 x2 ) = h1 ,

entonces

la

ecuacin

se

b(h1 ) a (h1 ) 2 = 1 ( x 2 x1 ) , y reacomodando signos se tiene finalmente:

( h1 ) *b ( h12 ) *a = h1 1
Se han convertido las Ecuacin 5 y Ecuacin 6 en:
(h0 + h1 )b (h0 + h1 ) 2 a = h0 0 + h11

( h1 ) *b ( h12 ) *a = h1 1
De donde se despeja a y b. El resultado se resume como
1 0 h1 h0 b = ah1 + 1 c = f ( x2 )
a=

Para encontrar la raz se aplica la frmula cuadrtica de la Ecuacin 1, sin embargo debido al error de redondeo potencial, en lugar de usar la frmula convencional, se usar la frmula alternativa1, es decir: Si se tiene que encontrar x3 , de f 2 ( x3 ) = a ( x3 x 2 ) 2 + b( x3 x 2 ) + c .
x3 x 2 = 2c b b 2 4ac

O despejando la incgnita x3 =

2c b b 2 4ac

+ x2

La utilizar la formula cuadrtica, es posible localizar tanto las races reales como las complejas. Esta es la mayor ventaja del mtodo. Cancelacin por resta Frmula alternativa: Se refiere al redondeo incluido cuando se restan dos nmeros de punto flotante casi iguales. Un caso comn donde ocurre es en la determinacin de las races de una ecuacin cuadrtica o parbola utilizando la ecuacin cuadrtica.
x1 x2 = b b 2 4ac , En los casos donde b 2 >>> 4ac , la diferencia en el numerados 2a

puede ser muy pequea. En tales casos, la precisin doble llega a reducir el problema. Adems una formulacin alternativa puede usarse para minimizar la cancelacin por resta.
x1 2c = x 2 b b 2 4ac

Una ilustracin del problema y del uso de esta frmula alternativa se ofrece en el siguiente ejemplo. Calcule el valor de las races de una ecuacin cuadrtica con a=1, b=3000.001 y c=3. Compare el valor calculado con las races verdaderas x1 = 0.001 y x 2 = 3000 Si se ejecuta en MatLab el siguiente cdigo a=1; b=3000.001; c=3; x1=(-b+sqrt(b*b-4*a*c))/(2*a) x2=(-b-sqrt(b*b-4*a*c))/(2*a)
1

Mtodos para ingenieros, 5 edicin Steven Chapra Raymond Canale, Mc Graw Hill. Pag. 73),

Se tendr como respuesta lo siguiente


x1 = -1.000007614493370e-003 x 2 = -3.000000999999000e+003

Si se realiza en Excel de Microsoft se tendrn los siguientes resultados


A B C 1 3000001 3 -1,00001E- =(-B1+(B1^2-4*A1*C1)^0,5)/ 03 (2*A1) =(-B1-(B1^2-4*A1*C1)^0,5)/ -3000.001 (2*A1)

x1 =-1,00001E-03 x 2 =-3000.001

Ejercicio de aplicacin: Utilice el mtodo de Mller para encontrar las races de la ecuacin f ( x) = x 3 13 x 12 , con valores iniciales x 0 = 4,5,x1 = 5.5,x 2 = 5 . Si se grfica la funcin, y teniendo en cuenta que es de orden tres, puede visualizar que las races son reales y dadas en -3, -1 y 4.

Solucin: si
x 0 = 4,5

f ( x 0 ) = f (4.5) = 20.625 ,

x1 = 5.5 , f ( x1 ) = f (5.5) = 82.875 x2 = 5 , f ( x 2 ) = f (5) = 48


h0 = x1 x 0 = 5.5 4.5 = 1

h1 = x 2 x1 = 5 5.5 = 0.5 f ( x1 ) f ( x 0 ) 82.875 20.625 0 = = = 62.25 x1 x0 5.5 4.5

1 =

f ( x 2 ) f ( x1 ) 48 82.875 = = 69.75 x 2 x1 5 5.5

Estos valores a su vez se sustituyen en las ecuaciones:

1 0 59.75 62.25 = = 5 h1 h0 0.5 + 1 b = ah1 + 1 = 5(0.5) + 69.75 = 72.25


a=
c = f ( x 2 ) = 48

La raz cuadrtica del determinante se evala como:


b 2 4ac = 62.25 2 4(15)( 48) = 31.54461

Luego,

62.25 + .54451 > 62.25 .54451 31 31

denominador de la ecuacin x3 = x 2 +
x3 = 5 + 2 * (48) = 3.976487 62.25 + 31.54451

2c

, se emplea un signo positivo en el , y as se encuentra la nueva raz.

b + b 2 4ac

Y desarrollando el error relativo:


er = 1.023513 * 100% = 25.74% 3.976487

Debido a que el error es demasiado grande todava, se asignan nuevos valores as: x 0 se remplaza por x1 , x1 se remplaza por x 2 y x 2 se remplaza por x3 , por lo tanto la nueva iteracin se realiza con:
x 0 = 5,5,x1 = 5,x 2 = 3.976487 , y se repite de nuevo todos los clculos

i xr 0 5.00000 0 1 3.97648

er

25.74000

7 2 4.00105 0 3 4.00000 0 4 4.00000 0

0 0.613900 0 0.026200 0 0.000011 9

Otra forma de obtener la Frmula de del mtodo de Muller


Los tres valores iniciales necesitados son denotados como x k , x k 1 ,y x k 2 . La parbola pasa a travs de los puntos: [ x k , f ( x k )] , [ x k 1 , f ( x k 1 )] y [ x k 2 , f ( x k 2 )] , si se escribe en la forma de Newton, entonces:
y = f ( xk ) + ( x xk ) f [ xk , xk 1 ] + ( x xk )( x xk 1 ) f [ xk , xk 1 , xk 2 ]

Donde f ( x k , x k 1 ) y f ( x k , x k 1 , x k 2 ) denotan restas divididas. Esto puede ser escrito como:


y = f ( xk ) + w( x xk ) + f [ xk , xk 1 , xk 2 ]( x xk ) 2

Donde

w = f [ x k , x k 1 ] + f [ x k , x k 2 ] f [ x k 1 , x k 2 ]

La prxima iteracin esta dada por la raz que brinda la ecuacin y = 0. 2 f ( xk ) x k +1 = x k w w 2 4 f ( x k ) f [ x k , x k 1 , x k 2 ]

Algoritmo para MatLab


Para encontrar la solucin a f ( x) = 0 debe tener tres aproximaciones x 0 , x1 , x 2 Valores de entrada: x 0 , x1 , x 2 ; tolerancia o margen de error TOL; y mximo numero de iteraciones No. Valores de salida: Solucin aproximada p o mensaje de fallo. This implementation allows for a switch to complex arithmetic. Los coeficientes son almacenados en el vector A, so el dimension of A may have to be changed.
syms('P', 'OK', 'TOL', 'M', 'X', 'FLAG', 'NAME', 'OUP', 'F', 'H'); syms('r','DEL1', 'DEL', 'I', 'B', 'D', 'E', 'J','x','s','N');

TRUE = 1; FALSE = 0; F = zeros(1,4); X = zeros(1,4); H = zeros(1,3); DEL1 = zeros(1,2); fprintf(1,'Este es el mtodo de Mullers.\n'); fprintf(1,'Ingrese el polinomio P(x)\n'); fprintf(1,'Por ejemplo: para entrar x^3-2*x+4 ingrese \n'); fprintf(1,' [ 1 0 -2 4 ] \n'); P = input(' '); OK = TRUE; N = length(P); if N == 2 r = -P(N)/P(N-1); fprintf(1,'El Polinomio es lineal: La raz es %11.8f\n', r); OK = FALSE; end if OK == TRUE OK = FALSE; while OK == FALSE fprintf(1,'Ingrese tolerancia\n'); TOL = input(' '); if TOL <= 0 fprintf(1,'La Tolerancia debe ser positiva \n'); else OK = TRUE; end end OK = FALSE; while OK == FALSE fprintf(1,'Ingrese el mximo numero de iteraciones sin punto decimal \n'); M = input(' '); if M <= 0 fprintf(1,'Debe ser un entero positivo \n'); else OK = TRUE; end end fprintf(1,'Ingrese el primer de 3 valores de entrada \n'); X(1) = input(' '); fprintf(1,'Ingrese el segundo de 3 valores de entrada \n'); X(2) = input(' '); fprintf(1,'Ingrese el tercer de 3 valores de entrada \n'); X(3) = input(' '); end if OK == TRUE fprintf(1,'Seleccione output destination\n'); fprintf(1,'1. Screen\n'); fprintf(1,'2. Text file\n'); fprintf(1,'Enter 1 or 2\n'); FLAG = input(' '); if FLAG == 2 fprintf(1,'Input el file name in el form - drive:\\name.ext\n'); fprintf(1,'For example: A:\\OUTPUT.DTA\n'); NAME = input(' ','s'); OUP = fopen(NAME,'wt'); else

OUP = 1; end fprintf(OUP, 'MULLERS METHOD\n'); fprintf(OUP, 'El output is i, approximation x(i), f(x(i))\n\n'); fprintf(OUP,'El real and imaginary parts of x(i) are\n'); fprintf(OUP,'followed by real and imaginary parts of f(x(i)).\n\n'); F(1) = polyval(P,X(1)); F(2) = polyval(P,X(2)); F(3) = polyval(P,X(3)); % STEP 1 H(1) = X(2)-X(1); H(2) = X(3)-X(2); DEL1(1) = (F(2)-F(1))/H(1); DEL1(2) = (F(3)-F(2))/H(2); DEL = (DEL1(2)-DEL1(1))/(H(2)+H(1)); I = 3; % STEP 2 while I <= M & OK == TRUE % STEP 3 B = DEL1(2)+H(2)*DEL; D = B*B-4*F(3)*DEL; if abs(DEL) <= 1.0e-20 % test to see if straight line if abs(DEL1(2)) <= 1.0e-20 % straight line - test if horizontal line fprintf(1,'Horizontal Line\n'); OK = FALSE; else % straight line but not horizontal X(4) = (F(3)-DEL1(2)*X(3))/DEL1(2); H(3) = X(4)-X(3); end else % not a straight line D = sqrt(D); % STEP 4 E = B+D; if abs(B-D) > abs(E) E = B-D; end % STEP 5 H(3) = -2*F(3)/E; X(4) = X(3)+H(3); end if OK == TRUE F(4) = polyval(P,X(4)); fprintf(OUP, '%d %f %f %f %f\n',I,X(4),imag(X(4)),F(4),imag(F(4))); end % STEP 6 if abs(H(3)) < TOL % Procedure completed successfully. fprintf(OUP, '\nMethod Succeeds\n'); fprintf(OUP, 'Approximation is within %.10e\n', TOL); fprintf(OUP, 'in %d iterations\n', I); OK = FALSE; else % STEP 7

for J = 1:2 H(J) = H(J+1); X(J) = X(J+1); F(J) = F(J+1); end X(3) = X(4); F(3) = F(4); DEL1(1) = DEL1(2); DEL1(2) = (F(3)-F(2))/H(2); DEL = (DEL1(2)-DEL1(1))/(H(2)+H(1)); end I = I+1; end % STEP 8 if I > M & OK == TRUE % Procedure completed unsuccessfully. fprintf (OUP, 'Method Failed\n'); end if OUP ~= 1 fclose(OUP); fprintf(1,'Output file %s created sucessfully\n',NAME); end end

Otro algoritmo para la funcin de muller function [Xp, ITER, FLAG] = MULLER(F, X0, X1, X2, EPS1, EPS2, MAXIT) % Sintaxis % [Xp, ITER, FLAG] = MULLER(F, X0, X1, X2, EPS1, EPS2, MAXIT) % Entrada % - F es la funcin, almacenada como un archivo F.m % - X0, X1, X2 son los valores iniciales % - EPS1 es el criterio de convergencia % - EPS2 es el criterio de exactitud % - MAXIT es el nmero mximo de iteraciones % Salida % - Xp es el valor de la raz aproximada % - ITER es el nmero de iteraciones realizadas % - FLAG es una variable lgica, es 1 si hubo convergencia, caso contrario es 0 for K = 1 : MAXIT
F10 = (feval(F, X1) - feval(F, X0)) / (X1 - X0); F21 = (feval(F, X2) - feval(F, X1)) / (X2 - X1); F210 = (F21 - F10) / (X2 - X0); A2 = F210; A1 = F21 - (X2 + X1) * A2; A0 = feval(F, X2) - X2 * (F21 - X1 * A2); D1 = -A1 + sqrt(A1^2 - 4 * A0 * A2); D2 = -A1 - sqrt(A1^2 - 4 * A0 * A2); if (abs(D1) > abs(D2)) X3 = 2 * A0 / D1;

else

X3 = 2 * A0 / D2;

end if (abs(X3 - X0) <= EPS1 | abs(feval(F, X3)) <= EPS2)


Xp = X3; ITER = K; FLAG = 1; return;

end
X0 = X1; X1 = X2; X2 = X3;

end
disp('Se ha excedido ITER = MAXIT; FLAG = 0; return;

el mximo nmero de iteraciones...' );

Nota. Para usar el programa MULLER, es necesario introducir la funcin de iteracin f(x) en un archivo, por ejemplo F.m, que cumpla con la sintaxis de MATLAB para la creacin de funciones, y que pueda ser llamado por MULLER como una cadena de caracteres.

Potrebbero piacerti anche