Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Звіт
про виконання лабораторної роботи №2
«Прямі та ітераційні методи розв’язування систем лінійних алгебраїчних рівнянь»
З курсу «Комп’ютерні методи дослідження систем керування»
Мета роботи: вивчити найпоширеніші прямі та ітераційні методи розв’язування систем лінійних алгебричних рівнянь та способи їх застосування для обчислення визначників і обертання матриць.
Завдання:
10
Знайти обернену матрицю методом Гауса з вибором головного елемента по стовпцю
система №1
Система №1
де ; ; порядковому № завдання; № групи
(наприклад, для КС-21 )
Короткі теоретичні відомості:
Опис алгоритму
Встановлюємо значення для одиничної матриці .
У верхньому циклі по змінній здійснюємо пошук стовпців оберненої матриці шляхом розв’язування систем рівнянь (5.4) методом Гауса. У прямому ході методу Гауса ми замість вектора вільних членів передаємо методу відповідний стовпець одиничної матриці . Після закінчення роботи методу Гауса здійснюємо присвоєння обчислених значень елементів вектора невідомих відповідному стовпцю оберненої матриці .
Виконуємо перевірку алгоритму. Скалярно помножимо матрицю на знайдену їй обернену матрицю . У результаті маємо отримати одиничну матрицю (в межах похибки обчислень).
З метою уникнення ситуації, коли головні елементи можуть бути рівними чи близькими нулю необхідно використовувати метод Гауса з вибором головного елемента. У наведеному вище алгоритмі потрібно лише замінити використаний звичайний метод Гауса на метод із повним чи частковим вибором головного елемента (стр. 9, 11, 13). Єдиною модифікацією для них є лише на початку прямого ходу.
Блок-схема алгоритму роботи програми
1 2 3 4 5 6 7
Список ідентифікаторів:
const int n=4; - Розмірність матриць
double M{{8.3, 2.62, 4.1, 1.9} {3.92, 8.45, 7.78, 2.46} {3.77, 7.21, 8.04, 2.28} {2.21, 3.65, 1.69, 6.69} }, L{-10.65, 12.21, 15.45, -8.35}; - Задані матриці
double E[n][n], V[n][n], A[n][n], C[n][n], Invers[n][n]; - Двовимірні матриці
double P[n], Y[n]; - Одновимірні матриці
int w; - змінна для лічильника одного з циклів
double sum, value, max; - змінні для проміжних одинарних значень
Остаточна версія програми:
Файл MyForm.h
const int n=4;
double M{{8.3, 2.62, 4.1, 1.9} {3.92, 8.45, 7.78, 2.46} {3.77, 7.21, 8.04, 2.28} {2.21, 3.65, 1.69, 6.69} }, L{-10.65, 12.21, 15.45, -8.35};
double E[n][n], V[n][n], A[n][n], C[n][n], Invers[n][n];
double P[n], Y[n];
int w;
double sum, value, max;
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
{
if (i=j; E[i][j]=1)
else E[i][j]=0;
}
for (int b=0; b<n; b++)
{
for (int i=0; i<n; i++)
for (j=0; j<n; j++)
{
V[i][j]=A[i][j];
P[i]=E[i][j];
}
for (k=0; k<n; k++)
{
max=abs(V[k][k]);
w=k;
for (int l=k+1, l<n; l++)
if (max<V[l][k]; max=ABS(V[l][k]); w=l)
value=P[k];
P[k]=P[w];
P[w]=value;
for (int d=0; 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]=P[i]-V[i][k]*Y[k];
for (int j=k+1; k<n; k++)
{
C[k][j]=V[k][j]/V[k][k];
V[i][j]=V[i][j]-V[i][k]*C[k][j];
}
}
}
for(int i=0; i<n; i++)
for (int j=i+1; j<n; j++)
{
sum=C[i][j]+x[j];
x[i]=y[i]-sum;
}
for (int i=0; i<n; i++)
{
Invers[i][b]=x[i]
}
}
richTextBox1->AppendText( Invers[0][0]);
richTextBox1->AppendText( Invers[0][1]);
richTextBox1->AppendText( Invers[0][2]);
richTextBox1->AppendText( Invers[0][3]);
richTextBox1->AppendText( Invers[1][0]);
richTextBox1->AppendText( Invers[1][1]);
richTextBox1->AppendText( Invers[1][2]);
richTextBox1->AppendText( Invers[1][3]);
richTextBox1->AppendText( Invers[2][0]);
richTextBox1->AppendText( Invers[2][1]);
richTextBox1->AppendText( Invers[2][2]);
richTextBox1->AppendText( Invers[2][3]);
richTextBox1->AppendText( Invers[3][0]);
richTextBox1->AppendText( Invers[3][1]);
richTextBox1->AppendText( Invers[3][2]);
richTextBox1->AppendText( Invers[3][3]);
};
}
Результат виконання програми
Висновок:
В результаті виконання цієї лабораторної роботи я навчився створювати програми WindowsForms у середовищі Microsoft Visual Studio 2015, а також вивчив найпоширеніші прямі та ітераційні методи розв’язування систем лінійних алгебричних рівнянь та способи їх застосування для обчислення визначників і обертання матриць.