Está en la página 1de 5

Encontrar las Races de P(x) = 1+ 3x +5x+6x mediante el mtodo de Horner.

Sol:

Para encontrar las races del polinomio debemos primero ver en que intervalo se
encuentran. El intervalo se puede encontrar por medio de un anillo, dado por la
siguiente frmula:

|a|/(|a|+am) |x| (|an|+am)/|an|

Al aplicarla resulta:

1/(1+6) |x| (6+6)/6 1/7 |x| 2 0.142 |x| 2

Entonces el intervalo que contiene a la races del polinomio es

I = [-2; 1/7] U [1/7; 2] = I U I

Ahora hacemos un barrido en los 2 sub intervalos.

-Sub intervalo I -Sub intervalo I

P (-2) = 33 P (1/7) 1.548105


P (-1.2) = 5.768 P (0.4) =3.384
P (-0.6) = 0.296 P (0.6) =5.896
P (-0.4) = 0.216 P (1.2) =22.168
P (-1/7) 0.6559767 P (2) =75

Grafico del polinomio P(x) = 1+


3x+5x+6x. Se puede ver que la raz del
polinomio es -0.5, pero la idea del ejercicio
es calcular esa raz por medio de un mtodo
iterativo.

Segn el anlisis, hay una raz real y est ubicada en el intervalo


I= [-0.6;-0.4]. Ya que P (-0.6)*P (-0.4) <0
Segn la derivada P(x) =3+10x+18x

P(x)>0, x I. La funcin es creciente en el intervalo I. En el intervalo existe una raz


.

Ahora aplicamos el mtodo de Horner

Considerado el punto inicial de iteracin como x=-0.45

--Primera iteracin:
6 5 3 1

-2.7 -1.035 -0.88425

6 2.3 1.965 0.11575=R

-2.7 0.18

6 -0.4 2.145=S

( . )
= 0.45 ( . )
= 0.5039627039627

= 0.5039627039627

--Segunda iteracin:
6 5 3 1

x -3.02377622378 -0.995943077901 -1.00996994536

6 1.97622377622 2.0040569221 -0.009969945356=R

x -3.02377622378 0.527927364013

6 -1.04755244756 2.5319842861=S

( . )
x = 0.5039627039627 ( . )
= 0.500025102371

x = 0.50002510237065

--Tercera iteracin:
6 5 3 1

x -3.00015061422 -0.999974893849 -1.00006275845

6 1.99984938578 2.00002510615 -0.000062758447=R

x -3.000015061422 0.500175724154

6 -1.00030122844 2.5002008303=S
( . )
x = 0.50002510237065 ( . )
= 0.5000000010083

x = 0.5000000010083

--Cuarta iteracin:
6 5 3 1

x -3.00000000605 -0.999999998992 -1.00000000252

6 1.99999999395 2.00000000101 -0.000000002521=R

x -3.00000000605 0.500000007058

6 -1.0000000121 2.50000000807=S

( 0.000000002521)
x = 0.50002510237065 ( . )
= 0.5

x = 0.5

x = 0.5

El error absoluto de x es:

E (x ) = |x x| = | 0.5 0.5000000010083|=1.0083*10

E (x ) = 1.0083*10 < =10

Despus de 4 iteraciones se llego a x = 0.5 que es una aproximacin a la


primera raz de P(x) con un E < = 10 .

P ( 0.5) = 0 = -0.5 es la raz del polinomio

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

También podría gustarte