método horner

5
Método Horner Fernando Espinosa Sánchez 2013300118 Es un algoritmo para evaluar de forma eficiente funciones polinómicas de una forma monomial . Dado el polinomio p ( x) =a 0 +a 1 x +a 2 x 2 ++a n x n Dónde: a 0 ,…,a n son números reales, queremos evaluar el polinomio a un valor específico de x. Para llevar a cabo el procedimiento, se debe definir una nueva secuencia de constantes como se muestra a continuación: b n =a n b n 1 ¿ a n1 + b n x 0 b 0 =a 0 +b 1 x 0 Entonces b 0 es elvalor de p ( x 0 ) El algoritmo de Horner se usa a menudo para convertir entre distintos sistemas numéricos posicionales. Es un caso particular del método de coeficientes separados y se emplea para la división de dos polinomios de cualquier grado. Procedimiento: Se escribe los coeficientes del dividendo en una fila con su propio signo Se escribe los coeficientes del divisor en una columna a la izquierda del primer término del dividendo; el primero de ellos con su propio signo y los restantes con signo cambiado. El primer término del dividendo se divide entre el primer término del divisor, obteniéndose el primer término. Se multiplica este término del cociente solamente por los términos del divisor a los cuales se cambió de signo, colocándose los resultados a partir de la segunda fila, corriendo un lugar hacia la derecha.

Upload: fernando-espinosa

Post on 14-Jan-2016

7 views

Category:

Documents


0 download

DESCRIPTION

metodo Horner de analisis numerico

TRANSCRIPT

Page 1: Método Horner

Método Horner

Fernando Espinosa Sánchez 2013300118

Es un algoritmo para evaluar de forma eficiente funciones polinómicas de una forma monomial.

Dado el polinomio

p ( x )=a0+a1 x+a2 x2+…+an x

n

Dónde: a0 ,…,an  son números reales, queremos evaluar el polinomio a un

valor específico de x .

Para llevar a cabo el procedimiento, se debe definir una nueva secuencia de

constantes como se muestra a continuación:

bn=an

bn−1¿an−1+bn x0

b0=a0+b1 x0

Entonces b0es el valor de p(x0)

El algoritmo de Horner se usa a menudo para convertir entre distintos sistemas numéricos posicionales. Es un caso particular del método de coeficientes separados y se emplea para la división de dos polinomios de cualquier grado.

Procedimiento: Se escribe los coeficientes del dividendo en una fila con su propio signo Se escribe los coeficientes del divisor en una columna a la izquierda del primer

término del dividendo; el primero de ellos con su propio signo y los restantes con signo cambiado.

El primer término del dividendo se divide entre el primer término del divisor, obteniéndose el primer término.

Se multiplica este término del cociente solamente por los términos del divisor a los cuales se cambió de signo, colocándose los resultados a partir de la segunda fila, corriendo un lugar hacia la derecha.

Se reduce la siguiente columna y se coloca el resultado en la parte superior para dividirlo entre el primer coeficiente del divisor y obtener el segundo término del cociente.

Se multiplica este cociente por los términos del divisor a los cuales se cambió de signo, colocándose el resultado en la tercera fila y corriendo un lugar hacia la derecha.

Se continuaría este procedimiento hasta obtener el término debajo del último término del dividendo, separando inmediatamente los términos del cociente y resto.

Page 2: Método Horner

Para obtener los coeficientes del residuo se reducen directamente cada una de las columnas que pertenecen.

#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; system("color 1f");//esta en la libreria stdlib.h //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); } }

Page 3: Método Horner

//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");

Page 4: Método Horner

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"); }