Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Звіт до лабораторної роботи № 2
з курсу “Комп’ютерні методи дослідження систем керування”
ПРЯМІ ТА ІТЕРАЦІЙНІ МЕТОДИ РОЗВ’ЯЗУВАННЯ СИСТЕМ ЛІНІЙНИХ АЛГЕБРИЧНИХ РІВНЯНЬ
Варіант #4
Прийняв: ст. викладач
Яцук Ю.В.
Львів 2014
Мета роботи: вивчити найпоширеніші прямі та ітераційні методи розв’язування систем лінійних алгебричних рівнянь та способи їх застосування для обчислення визначників і обертання матриць.
Завдання
4
Розв’язати систему рівнянь методом Гауса з вибором головного елемента по всій матриці
система №1
Система №1
де ; ;Код програми
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int l, g=22;
cout<<"student Number = "; cin>>l;
double s, b;
b=0.02*g;
s=0.02*l;
int n=4;
double max,c;
int w, h, inx[4]={0,1,2,3},z;
double A[4][4]={{8.3, 2.62+s, 4.1, 1.9},{3.92, 8.45, 7.78-s, 2.46},{3.77, 7.21+s, 8.04, 2.28},{2.21, 3.65-s, 1.69, 6.69}};
double B[4]={-10.65+b, 12.21, 15.45-b, -8.35};
double V[4][4], P[4], X[4], Y[4], C[4][4];
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
V[i][j]=A[i][j];
P[i]=B[i];
}
for(int k=0;k<n;k++)
{
max=fabs(V[k][k]);
h=k;
w=k;
for(int l=k+1;l<n; l++)
for(int f=k+1;f<n; f++)
if(max<fabs(V[l][f]))
{
max=fabs(V[l][f]);
h=l;
w=k;
}
double value=P[k];
P[k]=P[h];
P[h]=value;
for(int d=0; d<n; d++)
{
double value=V[k][d];
V[k][d]=V[h][d];
V[h][d]=value;
}
z=inx[k];
inx[k]=inx[w];
inx[w]=z;
for(int d=0;d<n;d++)
if(d<k)
{
double value=C[d][k];
C[d][k]=C[d][w];
C[d][w]=value;
}
else
{
double value=V[d][k];
V[d][k]=V[d][w];
V[d][w]=value;
}
Y[k]=P[k]/V[k][k];
for(int i=k+1; i<n; i++)
{
P[i]-=V[i][k]*Y[k];
for(int j=k+1; j<n; j++)
{
C[k][j]=V[k][j]/V[k][k];
V[i][j]-=V[i][k]*C[k][j];
}
}
}
for(int i=0; i<n; i++)
X[i]=0;
X[n]=Y[n];
for(int i=n-1;i>=0;i--)
{
for(int j=i+1; j<n; j++)
X[i]+=C[i][j]*X[j];
X[i]=Y[i]-X[i];
}
for(int i=0; i<n; i++)
if(inx[i]!=i)
{
z=inx[i];
double value=X[i];
X[i]=X[z];
X[z]=value;
inx[i]=inx[z];
inx[z]=z;
}
cout<<"this system"<<endl;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
if(A[i][j]>0)
{
cout<<"+";
cout<<A[i][j]<<" *x"<<j+1<<" ";
}
else
cout<<A[i][j]<<" *x"<<j+1<<" ";
cout<<" = "<<B[i];
cout<<endl;
}
for(int i=0;i<n;i++)
{
c=0;
for(int j=0;j<n;j++)
c+=A[i][j]*X[j];
cout<<"C = "<<c<<endl;
}
cout<<"solution system "<<endl;
for(int i=0; i<n; i++)
{
cout<<"x("<<i+1<<") = "<<X[i]<<endl;
}
system("pause");
}
Результат роботи програми
/