Розв'язування системи лінійних алгебраїчних рівнянь методом Гауса


Мета роботи: навчитись розв'язувати систему лінійних алгебраїчних рівнянь методом Гауса.

Нехай задана система п лінійних рівнянь із п невідомими, яка в матричному записі має вигляд

    (1) - шуканий вектор - розв'язок із відповідними компонентами.

Метод Гауса полягає в зведенні квадратної системи (1) до трикутного вигляду з використанням алгоритму послідовного виключення невідомих.

Алгоритм методу Гауса складається з двох етапів:

    1. Триангуляція матриці 2. Обчислення розв'язку

Наступну СЛАР розв'язати методом Гауса

Текст програми

Лінійний алгебраїчний рівняння гаус

//---------------------------------------------------------------------------

#include <vcl. h>

#pragma hdrstop

#include "SLAU. h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma link "XPManifest"

#pragma resource "*.dfm"

TForm1 *Form1;

Int k_z=4;

Float A_mas[100][100]=[1],

A[100][100]=[1],

X_mas[100]={0};

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

Void __fastcall TForm1::StGrPaint ()

{

Int i, j;

K_z=StrToInt(CSpinEdit1->Text);

StringGrid1->RowCount=k_z;

StringGrid1->ColCount=k_z;

StringGrid3->RowCount=k_z;

For (i=0; i<k_z; i++)

{

For (j=0; j<k_z; j++)

{

StringGrid1->Cells[j][i]=FloatToStrF(A[i][j],ffFixed,6,2);

}

StringGrid2->Cells[0][i]=FloatToStrF(x_mas[i],ffFixed,6,2);

StringGrid3->Cells[0][i]=FloatToStrF(A[i][k_z],ffFixed,6,2);

}

}

//---------------------------------------------------------------------------

Void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,

Int ARow, TRect &;Rect, TGridDrawState State)

{

Int H;

AnsiString str;

PChar s;

Cardinal Flag;

((TStringGrid*)Sender)->Canvas->FillRect(Rect);

Str = ((TStringGrid*)Sender)->Cells[ACol][ARow];

S = str. c_str();

Flag = DT_CENTER;

Flag = Flag | DT_WORDBREAK;

Rect. Left+=3;

Rect. Right+=3;

H = DrawTextA(((TStringGrid*)Sender)->Canvas->Handle, s,strlen(s),&;Rect, Flag);

If (H > ((TStringGrid*)Sender)->RowHeights[ARow])

((TStringGrid*)Sender)->RowHeights[ARow] = H;

}

//---------------------------------------------------------------------------

Void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,

Int ARow, bool &;CanSelect)

{

StGrPaint ();

}

//---------------------------------------------------------------------------

Void __fastcall TForm1::FormCreate(TObject *Sender)

{

StringGrid2->RowCount=-1;

StringGrid2->ColCount=-1;

StGrPaint ();

}

//---------------------------------------------------------------------------

Void __fastcall TForm1::StringGrid1KeyPress(TObject *Sender, char &;Key)

{

If ((Key < '0' || Key > '9') &;&; Key!= 8 &;&; Key!= ',' &;&; Key!= '-') Key= 0;

}

//---------------------------------------------------------------------------

Void __fastcall TForm1::StringGrid1SetEditText(TObject *Sender, int ACol,

Int ARow, const AnsiString Value)

{

If(Value!="")

{

AnsiString AS = Value;

If (AS. Pos(",")) AS. Delete(AS. Pos(","),1);

If (AS. Pos("-")==1) AS. Delete(AS. Pos("-"),1);

If ((AS. Pos(",")==0)&;&;(AS. Pos("-")==0)&;&;(Value!="-")&;&;(Sender==StringGrid1)) A[ARow][ACol]=StrToFloat(Value);

If ((AS. Pos(",")==0)&;&;(AS. Pos("-")==0)&;&;(Value!="-")&;&;(Sender==StringGrid3)) A[ARow][k_z]=StrToFloat(Value);

}

}

//---------------------------------------------------------------------------

Void __fastcall TForm1::Button1Click(TObject *Sender)

{

Int k, i,j;

StringGrid2->RowCount=k_z;

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];

}

StGrPaint ();

}

//---------------------------------------------------------------------------

Void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)

{

StGrPaint ();

}

//---------------------------------------------------------------------------

Результат виконання програми

Висновок

Похожие статьи




Розв'язування системи лінійних алгебраїчних рівнянь методом Гауса

Предыдущая | Следующая