Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра автоматизованих систем управління
Звіт
до лабораторної роботи № 2
з курсу «Чисельні методи в інформатиці»
на тему «Розв’язування системи лінійних алгебраїчних рівнянь методом Гауса»
Львів – 2011
Мета роботи: навчитись розв’язувати систему лінійних алгебраїчних рівнянь методом Гауса.
Короткі теоретичні відомості
Нехай задана система п лінійних рівнянь із п невідомими, яка в матричному записі має вигляд
(1) – шуканий вектор – розв’язок із відповідними компонентами.
Метод Гауса полягає в зведенні квадратної системи (1) до трикутного вигляду з використан-ням алгоритму послідовного виключення невідомих.
Алгоритм методу Гауса складається з двох етапів:
Триангуляція матриці
Обчислення розв’язку
Варіант 17
наступну СЛАР розв’язати методом Гауса
X1=-0,44
X2=2,47
X3=-0,86
X4=-2.07
Текст програми:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int k_z=4;
float A_mas[5][5]={{1.17,2,3,-2,6},{2,-0.17,-2,-3,6.64},{3,2,-1,1.83,0.68},{2,-3,2,1,-12.08}},
A[5][5]={{1.17,2,3,-2,6},{2,-0.17,-2,-3,6.64},{3,2,-1,1.83,0.68},{2,-3,2,1,-12.08}},
x_mas[4]={0};
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for (int i=0;i<=k_z;i++)
{
for (int j=0;j<=k_z;j++)
{
StringGrid1->Cells[j][0]="X"+IntToStr(j+1);
StringGrid1->Cells[i][j+1]=FloatToStrF(A[i][j],ffFixed,6,2);
}
StringGrid2->Cells[0][i]="X"+IntToStr(i+1);
StringGrid3->Cells[0][i]=FloatToStrF(A[i][k_z],ffFixed,6,2);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int k,i,j;
for (i=0; i<k_z; i++)
for (j=0; j<=k_z; j++)
A_mas[i][j]=A[i][j];
for(k=0; k<k_z-1; k++)
for(i=k+1; i<k_z; i++)
for(j=k_z; j>=k; j--)
A_mas[i][j]=A_mas[i][j]*A_mas[k][k]-A_mas[k][j]*A_mas[i][k];
for(i=k_z-1; i>=0; i--)
{
float sum=0;
for(j=k_z-1; j>i; j--)
sum += A_mas[i][j]*x_mas[j];
x_mas[i]=(A_mas[i][k_z]-sum)/A_mas[i][i];
}
for (i=0;i<=k_z;i++)
StringGrid2->Cells[1][i]=FloatToStrF(x_mas[i],ffFixed,6,2);
}
//---------------------------------------------------------------------------
Результат виконання програми:
Висновок: На цій лабораторній роботі я розв’язав систему лінійних алгебраїчних рівнянь методом Гауса, а також запрограмував його.