Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Звіт
до лабораторної роботи № 2
ПРЯМІ ТА ІТЕРАЦІЙНІ МЕТОДИ РОЗВ’ЯЗУВАННЯ СИСТЕМ ЛІНІЙНИХ АЛГЕБРИЧНИХ РІВНЯНЬ
з курсу “Комп’ютерні методи дослідження систем керування”
Мета роботи: вивчити найпоширеніші прямі та ітераційні методи розв’язування систем лінійних алгебричних рівнянь та способи їх застосування для обчислення визначників і обертання матриць.
Загальний алгоритм методу Гауса
з вибором головного елемента по стовпцю
для
для
стовпцеві сортування
для
для
;
Прямий хід:
стовпцеві сортування
;
для
якщо {; }
; ;
для
; ;
для
Оберне-ний хід:
Опис алгоритму
Прямий хід методу. Резервуємо (копіюємо) базові матриці та у відповідні матриці та . Вхідні матриці та нам необхідні для кінцевої перевірки результату. Протягом виконання алгоритму ми працюємо з копіями вхідних матриць.
Далі в трьох циклах виконується перетворення початкової матриці до трикутного вигляду матриці та відповідне перетворення правих частин системи . Зазначимо, що на кожному кроці першого циклу по змінній виконуємо процедуру стовпцевого сортування по головним елементам. Тобто, відшукуємо максимальне значення по модулю головного елемента, а потім міняємо місцями рядки в матриці та (копії матриці та ). Змінна визначає номер рядка головного елемента, а використовується як проміжна змінна.
Обернений хід. Спершу присвоюємо значення для останнього невідомого , а потім в циклі відшукуємо усі решта невідомі. Для перевірки вірності роботи алгоритму підставляємо наші знайдені в систему (1.1). Обчислені ліві частини рівнянь повинні відповідати правим значенням елементів вектора .
Завдання до лабораторної роботи.
Варіант номер 2.
2
Розв’язати систему рівнянь методом Гауса з вибором головного елемента по стовпцю
система №1
Система №1
Список ідентифікаторів констант, змінних, функцій, методів, використаних у програмі, та їх пояснення.
#include <vcl.h> - бібліотека візуальних компонентів;
A[][],B[] – матриці з вхідними данними;
V[][],P[] – матрицы для математичних перетворень;
X[] – розв’язок системи;
C[] – отримана трикутна матриця;
I,j,k,l,d,w,value – проміжні змінні для використання у циклах і пере присвоєннях;
max – максимальний елемент;
Остаточна версія програми.
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{}
void __fastcall TForm1::Button1Click(TObject *Sender)
{ int n=4;
double A[4][4]={{8.3,2.62+0.2*2,4.1,1.9},{3.92,8.45,7.78-0.2*2,2.46},
{3.77,7.21+0.2*2,8.04,2.28},{2.21,3.65-0.2*2,1.69,6.69}};
double B[4]={-10.65+0.02*21,12.21,15.45-0.02*21,-8.35};
double V[4][4],C[4][4],P[4],X[4],Y[4];
double max,value;
int w;
for (int i=0;i<n;i++)
{ P[i]=B[i];
for (int j=0;j<n;j++)
{ V[i][j]=A[i][j]; } }
for (int k=0;k<n;k++)
{ max=abs(V[k][k]);
w=k;
for (int l=k+1;l<n;l++)
{ if (max<abs(V[l][k]))
{ max=abs(V[l][k]);
w=l; } }
value=P[k];
P[k]=P[w];
P[w]=value;
for (int d=1;d<n;d++)
{ value=V[k][d];
V[k][d]=V[w][d];
V[w][d]=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-1]=Y[n-1];
for(int i=n-2;i>=0;i--)
{for (int j=i+1;j<n;j++)
X[i]+=C[i][j]*X[j];
X[i]=Y[i]-X[i];}
Memo1->Lines->Clear();
Memo1->Lines->Add("Rozvyazok systemy X[]");
for (int i=0; i<n; i++)
Memo1->Lines->Add(X[i]);
Memo1->Lines->Add("");
Memo1->Lines->Add("Perevirka vuvid B[]");
for (int i=0; i<n; i++)
Memo1->Lines->Add(B[i]);
Memo1->Lines->Add("");
Memo1->Lines->Add("Perevirka vuvid symu A[i][j]*X[j]");
for (int i=0; i<n; i++)
Memo1->Lines->Add(A[i][0]*X[0]+A[i][1]*X[1]+A[i][2]*X[2]+A[i][3]*X[3]);
Memo1->Lines->Add("Vuvid C[]");
for (int i=0; i<n;i++)
for(int j=0; j<n;j++)
Memo1->Lines->Add(C[i][j]);}
Результати роботи програми:
/
Висновок: программа написана на лабораторних заняттях може використовуватися для розв’зку систем лінійних рівнянь. Саме метод Гауса
з вибором головного елемента по стовпцю найкраще підходить для використання на практиці.