Está en la página 1de 4

Cdigo de programacin del mtodo de Lin-Bairstow

#include <stdio.h>
#include <math.h>
#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;
main()
{
int n,i,con,k,j,nit,ban,f1,f2;
float aux,pol[15],polr[15],a[15],b[15],c[15],d[4],a0,a1,det,da1,da0,eps;
float r;
char c1,s;
printf("Proporcione el grado del polinomio n= ");
cin>>n;
printf("\n");
for(i=1;i<=n+1;i++)
{
printf("pol[%d]= ",i);
scanf("%f",&pol[i]);
}
printf("eps= ");
scanf("%f",&eps);
printf("nit= ");
scanf("%d",&nit);
for(i=1;i<=n+1;i++)
{
printf("\n pol[%2d]= %9.3f",i,pol[i]);
}
printf("\n");
system("pause");
if(pol[1]!=1.0)
{
aux=pol[1];
for(i=1;i<=n+1;i++)
pol[i]=pol[i]/aux;
for(i=1;i<=n+1;i++)
{
printf("\n pol[%2d]= %9.3f",i,pol[i]);
printf("\n");

}
printf("\n");
system("pause");
}
for(i=1;i<=n+1;i++)
{
a[n+2-i]=pol[i];
b[i] =0.0;
c[i] =0.0;
}
a[n+2] =0.0;
a[n+3] =0.0;
b[n+2] =0.0;
b[n+3] =0.0;
c[n+2] =0.0;
c[n+3] =0.0;
for(i=1;i<=3;i++)
d[i]=pol[n-2+i];
if(d[1]==0.0)
d[1]=1.0;
aux=d[1];
for(i=1;i<=3;i++)
{
d[i]=d[i]/aux;
}
a1 = d[2];
a0 = d[3];
printf("\n Datos del polinomio supuesto");
printf("\n %9.4f %9.4f %9.4f",d[1],d[2],d[3]);
printf("\n a1= %9.4f a0=%9.4f",a1,a0);
printf("\n");
system("pause");
con=1;
s='t';
ban=0;
while(con<=nit&&s=='t')
{
system("cls");
printf("\n Datos del divisor\n");
for(i=1;i<=3;i++)
{
printf("%9.4f ",d[i]);
}
aux=d[1];
for(i=1;i<=3;i++)

d[i]=d[i]/aux;
for(k=1;k<=n+1;k++)
{
j=n+2-k;
b[j]=a[j]-a1*b[j+1]-a0*b[j+2];
}
for(k=1;k<=n-1;k++)
{
j=n-k;
c[j]=b[j+2]-a1*c[j+1]-a0*c[j+2];
}
printf("\n
A
B
C");
for(k=1;k<=n+3;k++)
{
printf("\n a%d=%9.4f ",k-1,a[k]);
printf("b%d=%9.4f ",k-3,b[k]);
printf("c%d=%9.4f ",k-1,c[k]);
}
det=c[1]*c[1]-c[2]*(-a1*c[1]-a0*c[2]);
da1=(b[2]*c[1]-b[1]*c[2])/det;
da0=(c[1]*b[1]-b[2]*(-a1*c[1]-a0*c[2]))/det;
printf("\n da0= ");
printf("%9.4f",da0);
printf("\n da1= ");
printf("%9.4f",da1);
d[2] = d[2] + da1;
d[3] = d[3] + da0;
a0 = a0 + da0;
a1 = a1 + da1;
printf("\n");
system("pause");
if(fabs(da0)<=eps&&fabs(da1)<=eps)
{
s='f';
ban=1;
}
con++;
}
if(ban==1)
{
printf("\n Despues de %d iteraciones el sistema converge y las raices dobles
son:\n",con);

printf("\n %9.4fx2 %9.4fx %9.4f",d[1],d[2],d[3]);


}
else
printf("\n Despues de %d iteraciones el sistema no converge",nit);
printf("\n");
system("pause");
}

También podría gustarte