Calculo de las raíces de un polinomio. Método de Graeffe.

Para construir el algoritmo ejecute
los siguientes pasos:

1) Almacene en una matriz, en la fila 0 los coeficientes del polinomio
2) Convierta en 1 el primer coeficiente.
dividiendo el polinomio por el primer coeficiente
3) Almacene en la matriz, en la primera columna el número 1
4) A partir de esta información, genere m filas adicionales así




Donde X, Y y Z se calculan así:

X = g2 - 2fh + 2ei - 2dj (Signos alternos)
Y = j2 - 2ik
Z = k2
S = b2 - 2(1c)

Para el ejemplo se escogio m = 8. Cada fila
se genera a partir de la fila anterior.
Ejecute el proceso fila por fila, hasta
completar las m filas.


Por ejemplo para el polinomio:

1x3 - 3x2 + 2x1 + 7

La fila 5 se genera a partir de la fila 4,
con los siguientes valores:

41 -44010518780580554426 33232930569601
51 1808088795749 7.7098887392409E+0251.1044276742439E+027

Una vez se hayan completado las m filas,
utilice la última fila para generar
las raíces. Tenga presente que se pueden
generar 3 tipos de raíces:

1) Raíces simples
2) Raíces dobles (Multiplicidad)
3) Raíces complejas.

Raíces simples

Las raíces simples se calculan así:


|log(r1)| = (log(b') - log(1)) / (2m)
|log(r2)| = (log(c') - log(b')) / (2m)
..
|log(r5)| = (log(f') - log(e')) / (2m)
..
|log(rn)| = (log(k') - log(j')) / (2m)

Se debe calcular el antilogaritmo para
llegar a la raíz. Por ejemplo, si se uso log
en base e, será con la función exp().
el calculo del antilogaritmo

Si tenemos el polinomio:

3x3 - 17x2 + 2x1 + 7

Ultima fila. 8 iteraciones17.1836727036714E+188 3.0449945971184E+158 1.5924178438016E+094

Si se aplican las formulas anteriores, se
obtiene el valor absoluto de las raíces:

5.4666353281565
0.76095049907409
0.56091916056394

Calculo de los signos de las raíces

Para calcular los signos de las raíces,
se debe ejecutar el siguiente proceso:

1) Evalue el polinomio con el valor
positivo de la raíz calculada y almacene
el resultado en A
2) Evalue el polinomio con el valor
negativo de la raíz calculada y almacene
el resultado en B
3) La raíz será positiva si |A| < |B|
4) La raíz será negativa si |A| >= |B|

Procedimiento para saber si una raíz
es simple o tiene multiplicidad.

Analice la fila m y la fila m-1 desde
la columna 1 así:


Se determina una raíz simple o una raíz doble
ejecutando la siguiente pregunta:

aux = log(b') - 2log(v1)

Si |aux| < 0 entonces se encontró una raíz simple.
Si |aux| >= 0 entonces se encontró una raíz doble
o repetida.

Calculo de una raíz doble.

Supongamos que vamos a calcular la raíz doble f':
Para calcular la raíz doble f', se ejecuta la
siguiente instrucción:

raiz=log(e')-log(g')

y se calcula el antilogaritmo:

raiz = exp( raiz);

Ahora:
Evalue el polinomio con raíz y almacene
el resultado en A

Evalue el polinomio con -raíz y almacene
el resultado en B

Si |A| < 0.0001(Muy cerca a 0) se encontró
una raíz positiva con multiplicidad

Si |loB| < 0.0001(Muy cerca a 0) se encontró
una raíz negativa con multiplicidad

Raíces complejas.

Para saber si existen raíces complejas,
recorra toda la matriz desde la fila 2,
por columnas. Si existe algún valor
negativo o 0 en la columna que se esta recorriendo,
existen raíces complejas.