Professional Documents
Culture Documents
donde los valores de r y s estn dados y calculamos los incrementos dr y ds que hacen a
b1(r+dr, s+ds) y b0(r+dr, s+dr) igual a cero. El sistema de ecuaciones que tenemos que
resolver es:
b1
b
dr 1 ds b1
r
s
b0
b
dr 0 ds b0
r
s
Bairtow muestra que las derivadas parciales pueden obtener haciendo un procedimiento
similar a la divisin sinttica, as
cn = bn
cn-1 = bn-1 + rcn
ci = bi + rci+1 + sci+2
donde
b0
c1
r
b1 b0
c2
r
s
b1
c3
s
Sustituyendo trmino
Ejemplo 1
Dado el polinomio f5(x) = x5 - 3.5x4 + 2.75x3 + 2.125x2 - 3.875x + 1.25, determinar los
valores de r y s que hacen el resido igual a cero. Considere r0 = -1 y s0 = 2.
Solucin.
Iteracin 1.
La divisin sinttica con el polinomio f2(x) = x2 -x + 2.0 da como resultado
f3(x) = x3 - 4.5x2 + 9.25x - 16.125
-43.875 16.75
108.125 -43.875
dr
ds
-30.75
61.75
de donde
r1 = -1.0 + 2.7636812508572213 =1.7636812508572213
s1 = 2.0 + 5.403374022767796 =7.403374022767796
Iteracin 2.
La divisin sinttica con el polinomio f2(x) = x2 -1.7636812508572213x 7.403374022767796 da como resultado
f3(x) = x3 1.776754563401905
1.7363187491427787x2
7.091061199392814x
14.542693
27.62800
dr
ds
-51.75640
-105.68578
de donde
r2 = 1.7636812508572213 - 0.04728019113442016 = 1.7164010597228012
s2 = 7.403374022767796 - 3.469106187802152 = 3.934267834965644
Iteracin 3.
La divisin sinttica con el polinomio f2(x)= x2 - 1.7164010597228012x 3.934267834965644 da como resultado
f3(x) = x3 - 1.7835989402771988x2
1.3261878347051992
3.622896723753395x
7.44182
13.83497
dr
ds
-12.65471
-28.18814
de donde
r3 = 1.7164010597228012 - 0.11666951305731528 = 1.599731546665486
s3 = 3.934267834965644 - 1.4835870659929915 = 2.4506807689726524
En resumen
k
0
1
r
-1
1.76368
s
2
7.403374
Residuo
30.75
51.756406
-61.75
105.68578
2
3
4
5
6
7
8
1.71640
1.599731
1.33354
1.11826
1.02705
1.00165
1.00000
3.93426
2.450680
2.18666
2.11302
2.02317
2.00153
2.00000
12.65471
2.89958
0.760122
0.271940
0.04313
0.00277
1.13930E-5
28.18814
8.15467
2.522228
0.607688
0.11185
0.00634
2.67534E-5
La solucin es:
f3(x) = x3 - 2.53x2 + 2.25x - 0.625 y f2(x) = x2 - x - 2
Las races de f2(x) = x2 - x - 2, son
x1 = 2
x2 = -1
Si repetimos el ejemplo pero ahora considerando el polinomio f3(x) = x3 - 2.53x2 +
2.25x - 0.625 , podemos calcular el total de las races del polinomio original.
Ejemplo 2
Dado el polinomio f5(x) = x5 - 3.5x4 + 2.75x3 + 2.125x2 - 3.875x + 1.25, determinar las
races de este polinomio. Considere r0 = -1 y s0 = -1.
Paso 1.
f5(x) = x5 - 3.5x4 + 2.75x3 + 2.125x2 - 3.875x + 1.25
f5(x) =( x3 - 4x2 + 5.25x - 2.5)*( x2 +0.5x - 0.5)
Las races de x2 +0.5x - 0.5=0 son
x1 = 0.5
x2 =-1.0
Paso 2.
f3(x) = x3 - 4x2 + 5.25x - 2.5
f3(x) =(x - 2)*(x2 - 2x +1.25)
Las races de x2 - 2x +1.25=0 son
x3 = 1.0 + j0.5
x4 =-1.0 - j0.5
Paso 3
f1(x) =(x - 2)
La raz de este polinomio es
x5 = 2;
Todas la races de f5(x) son x = [0.5, 1.0, (1.0 + j0.5), (1 - j0.5), 2]
Implementacin en Java.
package ejemplos;
/**
* <p>Title: Metodo de Baritow </p>
* <p>Description: Calcula todas las raices de un polinomio de grado
n</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: UMSNH</p>
* @author Dr. Felix Calderon Solorio
* @version 1.0
*/
public class ej065 {
public static void main(String[] args) {
//double a[] = {-2.5, 5.25, -4, 1};
double a[] ={1.25, -3.875, 2.125, 2.75, -3.5, 1};
int n = a.length;
double re[] = new double[n];
double im[] = new double[n];
Bairstow(a, -1, -1, re, im);
//Bairstow(a, -1, 2, re, im);
}
static public void Bairstow(double a[], double r0, double s0, double
re[], double im[])
{
int n = a.length, iter =0;
double b[] = new double[n], c[] = new double[n];
double ea1 = 1, ea2 = 1, T = 0.00001;
double r=r0, s=s0,det, ds, dr;
int MaxIter = 100, i;
for(iter=0; iter< MaxIter && n>3; iter++)
{
do {
Division_Derivada(a, b, c, r, s, n);
/*
System.out.println("Solucionando ");
System.out.print("fn(x) = "); imprime(a, n);
System.out.print("fn-2(x) = "); imprime2(b, n);
System.out.println("f2(x) = x2 + " + r + "x + " + s);
System.out.println(c[2] + " " + c[3] + " = " + -b[1]);
System.out.println(c[1] + " " + c[2] + " = " + -b[0]);
*/
det = c[2]*c[2] - c[3]*c[1];
if(det!=0)
{
dr = (-b[1]*c[2] + b[0]*c[3])/det;
ds = (-b[0]*c[2] + b[1]*c[1])/det;
/*
System.out.println("*********************************");
System.out.println(r+dr +" = " + r + " + " + dr);
System.out.println(s+ds +" = " + s + " + " + ds);
System.out.println("-----------------------------------");*/
r = r+dr;
s = s+ds;
if(r!=0) ea1 = Math.abs(dr/r)*100.0;
if(s!=0) ea2 = Math.abs(ds/s)*100.0;
}
else
{
r = 5*r+1;
s = s+1;
iter = 0;
}
}
while ((ea1 > T) && (ea2 > T));
raices(r, s, re, im, n);
System.out.println("iter " +iter);
System.out.print("fn(x) = "); imprime(a, n);
System.out.print("fn-2(x) = "); imprime2(b, n);
System.out.println("f2(x) = x2 -(" +r + ")x -(" +s +")");
n = n-2;
for(i=0; i<n; i++)
a[i] = b[i+2];
if (n < 4) break;
}
if(n==3)
{
System.out.println("n = " + n);
r = -a[1]/a[2];
s = -a[0]/a[2];
imprime(a, n);
raices(r, s, re, im, n);
}
else
{
re[n-1] = -a[0]/a[1];
im[n-1] = 0;
}
for(i=1; i<re.length; i++)
System.out.println( "X["+i+"]= " + re[i] + " j " + im[i]);
}
public static void Division_Derivada(double a[], double b[], double
c[], double r, double s, int n)
{
int i;
b[n-1] = a[n-1];
b[n-2] = a[n-2] + r*b[n-1];
c[n-1] = b[n-1];
c[n-2] = b[n-2] + r*c[n-1];
for(i=n-3; i>=0; i--)
{
b[i] = a[i] + r*b[i+1] + s*b[i+2];