Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Moy_otchyot2.docx
Скачиваний:
8
Добавлен:
25.03.2015
Размер:
269.22 Кб
Скачать

Решение:

1.

#include <vcl.h>

#include<stdio.h>

#include<conio.h>

#include<math.h>

float F(float x, float b,float c,float d)

{ return x*x*x-b*x*x-c*x+d;}

float F1(float x, float b,float c)

{ return 3*x*x-2*b*x-c;}

float F2(float x, float b)

{ return 6*x-2*b;}

float *F3(float x, float A[3][3],float b[3])

{

int i,j,n=3;

float s[50][50];

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

for ( j=0;j<n;j++)

{

if (i!=j) s[i][j]=A[i][j];

else s[i][i]=A[i][i]-x;

}

b[0]=1;

b[1]=(-s[2][0]-s[2][2]*b[2])/s[2][1];

b[2]=-(s[1][0]+s[1][1]*s[0][0])/(s[1][2]+s[1][1]*s[0][2]);

return b;

}

void main(){

int n,i,j;

float y,*m,q[3],x,k,l,w,t,k1,l1;

float A[3][3]={{1.22,-0.11,0.31},{-0.11,2.12,-0.22},{0.31,-0.22,1.51}};

clrscr();

n=3;

printf("\nisxodnay matritha:\n");

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

for(j=0;j<n;j++)

printf("%6.2f ",A[i][j]);

printf("\n");

}

float b=-0.019,c=0.115,d=-0.012;

k=(b+sqrt(b*b+3*c))/3;

l=(b-sqrt(b*b+3*c))/3;

k1=sqrt(b*b+3*c);

x=k;

float r=l;

if (F(x,b,c,d)*F2(x,b)<0)

x=l,

r=k;

w=8;

float eps=0.005;

t=0;

while(w>eps){

y=x-F(x,b,c,d)/(F(r,b,c,d)-F(x,b,c,d))*(r-x);

w=fabs(y-x);

t=t+1;

x=y;

}

k1=(-x+b+sqrt((x-b)*(x-b)-4*(x*x-x*b-c)))/2;

l1=(-x+b-sqrt((x-b)*(x-b)-4*(x*x-x*b-c)))/2;

printf("\n");

printf("\nSobstvennie znachenia:");

printf("\nx1= %5.3f",x);

printf("\nx2= %5.3f",k1);

printf("\nx3= %5.3f",l1);

printf("\n");

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

q[i]=1;

printf("\nSobstvennie vectora:");

*m=*F3(x,A,q);

printf("\n");

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

printf(" %.3f",q[i]);

float e=q[0]*(A[0][0]-x)+q[1]*A[0][1]+q[2]*A[0][2];

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

q[i]=1;

*m=*F3(k1,A,q);

printf("\n");

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

printf(" %.3f",q[i]);

e=q[0]*(A[1][0])+q[1]*(A[1][1]-k1)+q[2]*A[1][2];

*m=*F3(l1,A,q);

printf("\n");

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

printf(" %.3f",q[i]);

e=q[0]*(A[2][0])+q[1]*(A[2][1])+q[2]*(A[2][2]-l1);

getch();

}

Введенные данные

Собственные значения

Собственные вектора

-0.116

0.374

-0.278

1 8.798 -6.080

1 6.572 -4.255

1 -33.162 -6.652

2.

#include <vcl.h>

#include<stdio.h>

#include<conio.h>

#include<math.h>

void main()

{

int n,i,j,i1,j1;

float b[3],Y[3][3],p[3],x[3];

float A[3][3]={{ {1.22,-0.11,0.31},{-0.11,2.12,-0.22},{0.31,-0.22,1.51}};

clrscr();

n=3;

printf("\nisxodnay matritha:\n");

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

{

for(j=0;j<n;j++)

printf("%6.2f ",A[i][j]);

printf("\n");

}

Y[1][n]=1;

for (i=2;i<=n;i++)

Y[i][n]=0;

for (i=n-1;i>=0;i--)

{

for (j=1;j<=n;j++)

b[j]=Y[j][i+1];

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

{

p[i]=0;

for (int j=1;j<=n;j++)

p[i]+=(A[i][j]*b[j]);

}

for (j=1;j<=n;j++)

Y[j][i]=p[j];

}

for (i=1;i<=n;i++)

b[i]=-p[i];

float del;

for (i=1;i<=n;i++)

{

if (i>1)

{

for (i1=i;i1<=n;i1++)

{

del=Y[i1][i-1];

for (j1=i-1;j1<=n;j1++)

{

Y[i1][j1]-=(Y[i-1][j1]*del);

}

b[i1]-=(b[i-1]*del);

}

}

del=Y[i][i];

for (j=1;j<=n;j++)

Y[i][j]/=del;

b[i]/=del;

}

x[n]=b[n];

float sum;

for (i=n-1;i>0;i--)

{

sum=0;

for (j=i+1;j<=n;j++)

sum=sum+Y[i][j]*x[j];

x[i]=b[i]-sum;

}

printf("\npolinim matrithi:\n");

printf("l^3+(");

for (i=1;i<n;i++)

printf("%.3f)*l^%d+(",x[i],n-i);

printf("%.3f)*l^0",x[n]);

getch();

}

Результат:

Введенные данные

Полином методом Крылова

l^+(0.033)*l^2+(0.121)*l^1+(0.049)*l^0

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]