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:
4 | 1 | -4401051 | 8780580554426 | 33232930569601 |
5 | 1 | 1808088795749 | 7.7098887392409E+025 | 1.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 iteraciones | 1 | 7.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.