Anda di halaman 1dari 8

Mtodo de Horner.

Un caso especial de importancia prctica es encontrar las races de la ecuacin P(x)=0


cuando P(x) es un polinomio evaluado en x.

El mtodo de Horner se usa para el clculo de races de polinomios con el mtodo de Newton
Raphson. Mediante la divisin sinttica se calcula P(x)=Q(x) y se evala en un valor dado P(x)
y Q(x). Es un algoritmo poderoso para evaluar de forma muy eficiente a los polinomios de una
forma monomial.

Sea
P(x) = anxn + an-1xn-1 + ... +a1x + a0
Si bn = an y
bk = ak + bk+1x0 para k = n 1, n 2, ..., 1, 0
Por tanto b0 = P(x0). Ms an, si
Q(x) = bnxn1 + bn-1xn-2 + ... +b2x + b1
Entonces
P(x) = (x x0) Q(x) + b0
Para la derivada

Dado que:
P(x) = (x x0) Q(x) + b0
donde
Q(x) = bnxn1 + bn-1xn-2 + ... +b2x + b1
Derivando
P(x) = Q(x)+(x x0)Q(x)
En x = x0,
P(x0) = Q(x0)
Ejemplo:

Analizando la siguiente funcin: () = 4 2 3 12 2 + 16 10 en Xi=4

Raz Curva f(x)

Xi
Xr1
Xr2

Paso 1:

Divisin Sinttica de Polinomios

Para () = 4 2 3 12 2 + 16 10

1 -2 -12 16 -10
4 4 8 -16 0
1 2 -4 0 -10
a4 a3 a2 a1 a0

Para () = 4 3 6 2 24 + 16

4 -6 -24 16
4 16 40 64
4 10 16 80
a3 a2 a1 a0
Paso 2:

Mtodo de Newton-Raphson

()
() =
()

V.V=4.11484

n= 5 c.s

Es=5x10-4

() = 4 3 6 2 24 + 16
Formulas en Excel.

Cdigo c++:

Cdigo Mtodo de Horner.

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

int main (){

int i,n;

float A0,A1,A2,A3,A4,A5,AM,B5,B4,B3,B2,B1,C5,C4,C3,C2;

float x0,x1,x2,y1,R,S,aux0,auxn,Er;

//Mensaje para el usuario

printf("**********************************************\n");

printf("***ALGORITMO DE HORNER (Division sintetica)***\n");

printf("**********************************************\n\n");

//polinomio tipo a analizar

printf("Pn(x)=a5x^5+a4x^4+a3x^3+a2x^2+a1x^1+a0 \n\n");

printf("Para cualquier polonomio con grado menor o igual a 5\n");


printf("escriba sus coeficientes:\n");

printf(" a5=");scanf("%f",&A5);

printf(" a4=");scanf("%f",&A4);

printf(" a3=");scanf("%f",&A3);

printf(" a2=");scanf("%f",&A2);

printf(" a1=");scanf("%f",&A1);

printf(" a0=");scanf("%f",&A0);

//Verificacion de si A0 es el coeficiente mayor (AM)

if(A0 != 0){//fabs() genera el valor absoluto para valores float

if(fabs(A0)>=fabs(A1) && fabs(A0)>=fabs(A2) && fabs(A0)>=fabs(A3) &&

fabs(A0)>=fabs(A4) && fabs(A0)>=fabs(A5)){

AM=fabs(A0);

//Verificacion de si A1 es el coeficiente mayor (AM)

if(A1 != 0){

if(fabs(A1)>=fabs(A0) && fabs(A1)>=fabs(A2) && fabs(A1)>=fabs(A3) &&

fabs(A1)>=fabs(A4) && fabs(A1)>=fabs(A5)){

AM=fabs(A1);

//Verificacion de si A2 es el coeficiente mayor (AM)

if(A2 != 0){

if(fabs(A2)>=fabs(A0) && fabs(A2)>=fabs(A1) && fabs(A2)>=fabs(A3) &&

fabs(A2)>=fabs(A4) && fabs(A2)>=fabs(A5)){

AM=fabs(A2);

}
}

//Verificacion de si A3 es el coeficiente mayor (AM)

if(A3 != 0){

if(fabs(A3)>=fabs(A0) && fabs(A3)>=fabs(A1) && fabs(A3)>=fabs(A2) &&

fabs(A3)>=fabs(A4) && fabs(A3)>=fabs(A5)){

AM=fabs(A3);

//Verificacion de si A4 es el coeficiente mayor (AM)

if(A4 != 0){

if(fabs(A4)>=fabs(A0) && fabs(A4)>=fabs(A1) && fabs(A4)>=fabs(A2) &&

fabs(A4)>=fabs(A3) && fabs(A4)>=fabs(A5)){

AM=fabs(A4);

//Verificacion de si A5 es el coeficiente mayor (AM)

if(A5 != 0){

if(fabs(A5)>=fabs(A0) && fabs(A5)>=fabs(A1) && fabs(A5)>=fabs(A2) &&

fabs(A5)>=fabs(A3) && fabs(A5)>=fabs(A4)){

AM=fabs(A5);

//Caso en que A0 sea 0

aux0=A0;

if(A0==0){

auxn=A1;

if(A1==0){
auxn=A2;

//Caso en que A5 sea 0

auxn=A5;

if(A5==0){

auxn=A4;

if(A4==0){

auxn=A3;

//Cotas por anillo de polinomio

x1=(float)fabs(aux0)/(fabs(aux0)+AM);

x2=(float)(fabs(auxn)+AM)/fabs(auxn);

printf("Las raices del polinomio se encuentran es estos intervalos");

printf("\n[-%.3f ,-%.3f] y [%.3f ,%.3f]",x2,x1,x1,x2);

printf("\n\nElija algun punto de inicio para el algoritmo:");

scanf("%f",&x0);

printf("Cuantas iteraciones quiere realizar?:");

scanf("%d",&n);

printf("\n Iteraciones Error entre ellas");

for(i=1;i<=n;i++){

B5=x0*A5;

B4=(B5+A4)*x0;

B3=(B4+A3)*x0;

B2=(B3+A2)*x0;

B1=(B2+A1)*x0;
R=(B1+A0);

C5=x0*A5;

C4=(B5+A4+C5)*x0;

C3=(B4+A3+C4)*x0;

C2=(B3+A2+C3)*x0;

S=(B2+A1+C2);

y1=x0-R/S;

Er=fabs(y1-x0);

x0=y1;

printf("\nX%d=%0.9f Er(X%d)=%0.9f ",i,x0,i-1,Er);

printf("\n\n");

system("pause");

https://www.easycalculation.com/es/algebra/quartic-equation.php

https://www.youtube.com/watch?v=DzUH6-VyjUY

Autor/ Canal de YouTube: Juanita Bonita

Programa:

http://lineaalinea.blogspot.mx/2008/01/mtodo-de-horner-en-lenguaje-c.html

Autor: Sergio Palmas

Anda mungkin juga menyukai