Bautista_Torres_Tarea6.docx

8
BAUTISTA TORRES CARLOS ALBERTO 09SEP15 ANÁLISIS NUMÉRICO TAREA 4 Sea la función: f ( x )=x 4 x 3 + 6 x 2 3 x+ 4 Encontrar sus raíces Por lo tanto todas sus raíces son complejas void lb() { int n, m,w,np,contadorConver,k,z,nx,mx;

Transcript of Bautista_Torres_Tarea6.docx

Page 1: Bautista_Torres_Tarea6.docx

BAUTISTA TORRES CARLOS ALBERTO 09SEP15ANÁLISIS NUMÉRICO TAREA 4

Sea la función:

f ( x )=x 4−x3+6 x2−3 x+4

Encontrar sus raíces

Por lo tanto todas sus raíces son complejas

void lb() {

int n, m,w,np,contadorConver,k,z,nx,mx;

float r,s,e,dr,ds,error,newsize,r0,s0;

cout<<"Introduzca el grado del polinomo: "<<endl;

Page 2: Bautista_Torres_Tarea6.docx

BAUTISTA TORRES CARLOS ALBERTO 09SEP15ANÁLISIS NUMÉRICO TAREA 4

cin>>n;

n++;

w=contadorConver=z=0; //w es el contador de veces que se repite el proceso (no solo la division, todo el proceso)

m = n-1;

float C[n],Mr[n],Ms[n],Mat1[n],Mat2[m],raizReal[n],raizImaginaria[n];

float raiz;

for (int i = 0; i<n;i++)

{

Mr[i]=Ms[i]=Mat1[i]=raizReal[i]=raizImaginaria[i]=0;

}

cout<<"Introduzca los coeficientes del polinomio (deben de ir en orden descendednte segun el exponente y el primer coeficiente debe ser 1)"<<endl;

for(int i = 0; i < n; i++)

{

cout<<"Introduzca el coeficiente de x^"<<-i+(n-1)<<" :"<<endl;

cin>>C[i];

}

if (C[0] != 1)

{

cout<<"El coeficiente de x^"<<n-1<<" debe ser = 1 "<<endl;

}

else

{

cout<<"Introduzca el valor inicial de r : "<<endl;

cin>>r0;

cout<<"Introduzca el valor inicial de s : "<<endl;

cin>>s0;

cout<<"Introduzca el valor del error de convergencia: " <<endl;

Page 3: Bautista_Torres_Tarea6.docx

BAUTISTA TORRES CARLOS ALBERTO 09SEP15ANÁLISIS NUMÉRICO TAREA 4

cin>>error;

cout<<"Introduzca numero maximo de iteraciones : "<<endl;

cin>>k;

dr = ds = 1;

for(int j = 0; j < 2*(n-1) ; j=j+2) //Se necesita sumarle 2 al contador dado que en cada paso se guardan 2 valores en las raices (j y j+1)

{

dr=ds=1;

np = (n-1)- 2*w; //np es el grado del polinomio a dividir

nx = n-1 - 2*w;

mx = nx-1;

if (np <= 2)

{

if(np == 2)

{

raiz=(C[1]*C[1])-(4*C[2]);

if (raiz < 0)

{

raiz = abs(raiz);

raizReal[j]=(-C[1])/2;

raizReal[j+1]=(-C[1])/2;

raizImaginaria[j]=sqrt(raiz)/2;

raizImaginaria[j+1]=-sqrt(raiz)/2;

}

else

{

raizReal[j]=((-C[1])+(sqrt(raiz)))/2;

raizReal[j+1]=((-C[1])-(sqrt(raiz)))/2;

Page 4: Bautista_Torres_Tarea6.docx

BAUTISTA TORRES CARLOS ALBERTO 09SEP15ANÁLISIS NUMÉRICO TAREA 4

raizImaginaria[j]=0;

raizImaginaria[j+1]=0;

}

}

else

{

raizReal[j]=-C[1];

}

break;

}

else{

contadorConver=0;

r=r0;

s=s0;

for (int i = 0; i<= np;i++)

{

Mr[i]=Ms[i]=Mat1[i]=Mat2[i]=0; //regresa a 0 Mr y Ms

}

while (abs(dr) > error || abs(ds) > error){

for (int i = 0; i <= np ; i++)

{

Mat1[i]=C[i]+Mr[i]+Ms[i]; //hace la primera division sintetica

Mr[i+1]=(-r)*(Mat1[i]);

Ms[i+2]=(-s)*(Mat1[i]);

}

for (int i = 0; i<= np;i++)

{

Mr[i]=Ms[i]=0; //regresa a 0 Mr y Ms

}

Page 5: Bautista_Torres_Tarea6.docx

BAUTISTA TORRES CARLOS ALBERTO 09SEP15ANÁLISIS NUMÉRICO TAREA 4

for (int i = 0; i < np; i++) //segunda division sintetica

{

Mat2[i]=-Mat1[i]+Mr[i]+Ms[i];

Mr[i+1]=(-r)*(Mat2[i]);

Ms[i+2]=(-s)*(Mat2[i]);

}

dr = (((Mat2[mx-1])*(-Mat1[nx-1]))-((-Mat1[nx])*(Mat2[mx-2])))/(((Mat2[mx-1])*(Mat2[mx-1]))-((Mat2[mx]+Mat1[nx-1])*(Mat2[mx-2]))); //cramer

ds = (((-Mat1[nx])*(Mat2[mx-1]))-((Mat2[mx]+Mat1[nx-1])*(-Mat1[nx-1])))/(((Mat2[mx-1])*(Mat2[mx-1]))-((Mat2[mx]+Mat1[nx-1])*(Mat2[mx-2]))); //cramer

r = r+dr;

s = s+ds;

contadorConver++;

if (contadorConver > k)

{

cout<<"Fallo en la convergencia"<<endl;

break;

}

z++;

}

raiz = (r*r)-(4*s);

if (raiz < 0)

{

raiz = abs(raiz);

raizReal[j]=-r/2;

raizReal[j+1]=-r/2;

raizImaginaria[j]=sqrt(raiz)/2;

raizImaginaria[j+1]=-sqrt(raiz)/2;

}

Page 6: Bautista_Torres_Tarea6.docx

BAUTISTA TORRES CARLOS ALBERTO 09SEP15ANÁLISIS NUMÉRICO TAREA 4

else

{

raizReal[j]=((-r)+(sqrt(raiz)))/2;

raizReal[j+1]=((-r)-(sqrt(raiz)))/2;

raizImaginaria[j]=0;

raizImaginaria[j+1]=0;

}

w++;

newsize=(n-1)-(2*w);

for(int i = 0; i<=newsize ; i++)

{

C[i]=Mat1[i];

}

}

}

cout<<"Raices :"<<endl;

for (int i = 0 ;i < n-1; i ++)

{

if (raizImaginaria[i]==0)

{

cout<<"X"<<i<<" = "<<raizReal[i]<<endl;

}

else

{

cout<<"X"<<i<<" = "<<raizReal[i];

if(raizImaginaria[i]<0)

{

cout<<raizImaginaria[i]<<"i"<<endl;

}

Page 7: Bautista_Torres_Tarea6.docx

BAUTISTA TORRES CARLOS ALBERTO 09SEP15ANÁLISIS NUMÉRICO TAREA 4

else

{

cout<<"+"<<raizImaginaria[i]<<"i"<<endl;

}

}

}

}

}