Evaluación de Polinomios
Evaluación de Polinomios
Evaluación de Polinomios
Horner
ltima actualizacin el Sbado, 18 de Septiembre de 2010 11:25
Estamos tan acostumbrados a ver los polinomios expresados como suma de monomios,
Si nos paramos un momento a pensar las operaciones de suma y producto que estamos
haciendo, nos daremos cuenta rpidamente de que el algoritmo no es muy bueno. Por
qu? Pues porque invocamos varias vaces al mtodo potencia. En cada invocacin, se
calcula una potencia de x. En el caso del ejemplo, x3, luego x2, luego x1 y luego x0.
Ningn programador elegante hara semejante barbaridad, ya que en cada llamada a
potencia se entra en un bucle que multiplica x por s mismo un determinado nmero de
veces. Es decir... si nuestro polinomio fuera de grado 15, una llamada a potencia(x,15)
Mucho mejor... con ste algoritmo de arriba, en cada iteracin del bucle for se realizan
slo dos multiplicaciones y una suma. Es decir, para nuestro polinomio de ejemplo, se
realizan cuatro vueltas del bucle, as que 8 multiplicaciones y cuatro sumas. En el
primer algoritmo, se realizaban 13 multiplicaciones y cuatro sumas. Si el polinomio
fuera mayor, por ejemplo de grado 15... con ste segundo algoritmo se realizan 30
multiplicaciones y 15 sumas, pero con el primero se realizan 134 multiplicaciones y
15 sumas !!! Como ves, hemos disminuido muchsimo el nmero de operaciones.
Bueno, pero todava lo podemos mejorar. Aqu es donde entra el algoritmo de Horner.
Vamos a retomar nuestro polinomio de ejemplo P(x)=3x3-2x2+5x-1, y vamos a separar
el coeficiente que no est multiplicado por x, el -1, y lo vamos a dejar a un lado.
Nos queda 3x3-2x2+5x Rpidamente nos damos cuenta de que sobre esa expresin
podemos sacar factor comn, y dejarla como (3x2-2x+5) x
Vale. Ahora cojamos el interior del parntesis (nos dejamos la x que multiplica en el
mismo lado que nos dejamos el -1), y volvamos a separar el coeficiente que no
multiplica a x (y nuevamente lo dejamos a un lado)... 3x2-2x Si sacamos factor comn,
nos queda (3x-2)x
Ahora reescribamos todo junto, el resultado al que hemos llegado y todo lo que nos
hemos dejado a un lado: ((3x-2)x +5)x-1. Simplemente, tenemos el mismo polinomio de
antes, pero escrito de otra forma. De la expresion como suma de monomios hemos
sacado la x como factor comn unas cuantas veces. No me crees?... Haz las
operaciones...
((3x-2)x -5)x-1 = ((3x2-2x) -5)x-1 = (3x2-2x -5)x-1 = (3x3-2x2 +5x)-1 = 3x3-2x2 +5x-1
--> Nuestro polinomio como nuevo.
Bueno... pues a esta forma de escribir los polinomios "((3x-2)x -5)x-1", en la cual, todas
las veces que aparece x no est elevado a ninguna potencia, se le denomina esquema de
horner. Realmente, x se va multiplicando por s mismo, pero sto se logra gracias a la
astuta parentizacin.
Pues bien, cuando implementamos un algoritmo que se basa en evaluar un polinomio
escrito segn el esquema de Horner, resulta que slo necesitamos una suma y una
multiplicacin por cada iteracin del bucle... y adems, al no realizarse operaciones de
potencia, los errores de redondeo cometidos son mucho menores.
RecapitulandoPara evaluar un polinomio segn el algoritmo de Horner, empezamos por
el coeficiente del monomio de mayor grado, y lo multiplicamos por x. Luego sumamos
el siguiente coeficiente y volvemos a multiplicar por x.... Luego sumamos el siguiente y
multiplicamos por x...... y as sucesivamente, hasta que sumamos el ltimo coeficiente y
paramos.
Vamos a poner todo juntito en una clase a la que llamaremos Polinomio. Le vamos a
poner un constructor y una funcin evaluar que utilice el esquema de Horner.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//crear el polinomio
Polinomio p = new Polinomio(3, -2, 5, -1);
//evaluar para x=7
Console.WriteLine(p.evaluar(7));