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.2) = 5.768
P (-0.6) = 0.296
P (-0.4) = 0.216
P (-1/7) 0.6559767

P (1/7) 1.548105
P (0.4) =3.384
P (0.6) =5.896
P (1.2) =22.168
P (2) =75

iterativo.

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

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

-2.7

-1.035

2.3

1.965

-2.7

0.18

-0.4
( .
( .

-0.88425
0.11575=R

2.145=S

0.45

0.5039627039627

0.5039627039627

--Segunda iteracin:
6

x
6

x
6

-3.02377622378

-0.995943077901

-1.00996994536

1.97622377622

2.0040569221

-0.009969945356=R

-3.02377622378

0.527927364013

-1.04755244756

2.5319842861=S

x =

0.5039627039627

x =

0.50002510237065

.
( .

)
)

0.500025102371

--Tercera iteracin:
6

x
6

x
6

-3.00015061422

-0.999974893849

1.99984938578

2.00002510615

-3.000015061422

0.500175724154

-1.00030122844

2.5002008303=S

1
-1.00006275845
-0.000062758447=R

x =

0.50002510237065

x =

0.5000000010083

.
( .

)
)

0.5000000010083

--Cuarta iteracin:
6

x
6

x
6

-3.00000000605

-0.999999998992

1.99999999395

2.00000000101

-3.00000000605

0.500000007058

-1.0000000121

x =

0.50002510237065

x =

0.5

x =

1
-1.00000000252
-0.000000002521=R

2.50000000807=S

( 0.000000002521)
( .
)

0.5

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 =
primera raz de P(x) con un E < = 10 .
P (

0.5 que es una aproximacin a la

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
}
printf("\n\n");
system("pause");
}

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