Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра КСА
Звіт
з лабораторної роботи №2
з курсу “Комп’ютерні методи дослідження систем керування”
ПРЯМІ ТА ІТЕРАЦІЙНІ МЕТОДИ РОЗВ’ЯЗУВАННЯ СИСТЕМ ЛІНІЙНИХ АЛГЕБРИЧНИХ РІВНЯНЬ
Варіант №2
Львів-2014
Мета роботи: вивчити найпоширеніші прямі та ітераційні методи розв’язування систем лінійних алгебричних рівнянь та способи їх застосування для обчислення визначників і обертання матриць.
Завдання:
Розв’язати систему рівнянь методом Гауса з вибором головного елемента по стовпцю
Код програми:
#include<iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define n 4
#define n1 n+1
using namespace std;
void WriteSLAR(void);
void WriteterraSLAR(void);
float terraSLAR[n][n1];
float SLAR[n][n1]={{ 8.3, 2.62, 4.1, 1.9, -10.65},
{3.92, 8.45, 7.78, 2.46, 12.21},
{3.37, 7.21, 8.04, 2.28, 15.45},
{2.21, 3.65, 1.69, 6.69, -8.35}};
float A[n][n]={{ 8.3, 2.62, 4.1, 1.9},
{3.92, 8.45, 7.78, 2.46},
{3.37, 7.21, 8.04, 2.28},
{2.21, 3.65, 1.69, 6.69}};
int main()
{
float process, X[n1];
short int i, j, k;
float max, value;
int w,l,k1,d;
setlocale(0,"");
WriteSLAR();
for(int i=0; i<n1; i++)
{
for(int j=0; j<n1; j++)
{
terraSLAR[i][j]=SLAR[i][j];
}
}
for(k1 = 0;k1<n1;k1++)
{
max = terraSLAR[k1][k1];
w = k1;
for(l=k1+1;l<n1;l++)
{
if(max < terraSLAR[l][k1])
{
max = terraSLAR[l][k1];
w=l;
}
}
for(d=1;d<n1;d++)
{
value=terraSLAR[k1][d];
terraSLAR[k1][d]=terraSLAR[w][d];
terraSLAR[w][d]=value;
}
}
WriteterraSLAR();
//Прямий хід
for (i=0; i<n; i++)
{
process=terraSLAR[i][i];
for (j=n;j>=i;j--)
terraSLAR[i][j]/=process;
for (j=i+1;j<n;j++)
{
process=terraSLAR[j][i];
for (k=n;k>=i;k--)
terraSLAR[j][k]-=process*terraSLAR[i][k];
}
}
// Обернений хід
X[n-1] = terraSLAR[n-1][n];
for (i=n-2; i>=0; i--)
{
X[i] = terraSLAR[i][n];
for (j=i+1;j<n;j++)
X[i]-=terraSLAR[i][j]*X[j];
}
//Вивід результату
printf("\nРезультати:\n");
for (i=0; i<n; i++){
printf("x%d=%3.2f\n", i+1, X[i]);}
//Проведення перевірки
printf("\nПеревiрка:\n");
for (i=0; i<n; i++)
{
float sum=0;
for (j=0; j<n; j++)
sum+=A[i][j]*X[j];
printf("%3.2f\n", sum);
}
}
// Вивід початкової СЛАР
void WriteSLAR(void)
{
printf("\nПочаткова СЛАР:\n");
int i,j;
for (i=0 ;i<n; i++)
{
for (j=0; j<n; j++)
printf("% + 3.2f*x%d",SLAR[i][j],j+1);
printf("=%3.2f\n",SLAR[i][n]);
}
}
// Вивід результату роботи метода шукаючого найбільший елемент в стовпці
void WriteterraSLAR(void)
{
printf("\nПiсля пошуку найбiльшого елемента в стовпцi:\n");
int i,j;
for (i=0 ;i<n; i++)
{
for (j=0; j<n; j++)
printf("% + 3.2f*x%d",SLAR[i][j],j+1);
printf("=%3.2f\n",terraSLAR[i][n]);
}
}
Результати:
/