- •Учреждение образования
- •Лабораторная работа №1 Тема: «Прямые методы решения систем линейных алгебраических уравнений»
- •Изученные теоретические вопросы: Метод Гаусса
- •Решение:
- •Лабораторная работа №2
- •Изученные теоретические вопросы:
- •Лабораторная работа №3
- •Изученные теоретические вопросы:
- •Лабораторная работа №4
- •Изученные теоретические вопросы: Метод квадратного корня
- •Лабораторная работа №5
- •Изученные теоретические вопросы: Метод отражений
- •Лабораторная работа №6 Решить систему линейных алгебраических уравнений методом вращений.
- •Изученные теоретические вопросы:
- •Решение:
- •Лабораторная работа№7 Тема: «Прямые методы решения систем линейных алгебраических уравнений»
- •Изученные теоретические вопросы: Метод ортогонализации
- •Лабораторная работа №8
- •Изученные теоретические вопросы: Метод сопряженных градиентов
- •Лабораторная работа № 9
- •Лабораторная работа № 10
- •Решение:
Решение:
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
|