МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
Кафедра ЗІ
/
ЗВІТ
До лабораторної роботи №2
МЕТОД ГАУССА ДЛЯ РОЗВ’ЯЗУВАННЯ СИСТЕМ
ЛІНІЙНИХ АЛГЕБРАЇЧНИХ РІВНЯНЬ
Варіант №13
Львів – 2013
1. МЕТА РОБОТИ
Ознайомлення з прямими методами розв’язування систем лінійних алгебраїчних рівнянь.
2. ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ
Розв’язати систему лінійних алгебраїчних рівнянь методом Гаусса.
Варіант
Метод
К, Р
13
МЕТОД - LU
2,1
Метод LU – розвитку
Це одна з модифікацій методу Гауса. Матрицю А зображають у вигляді добутку двох трикутних матриць: , де
(7)
Тоді система коефіцієнтів системи з рівнянь набуде вигляду
(9)
(10)
Прямий хід тут – це розв’язування системи (9), зворотний – розв’язування системи (10). Елементи матриць і обчислюють послідовно: спочатку елементи першого стовпця матриці , потім – першого рядка матриці і перший елемент вектора ; далі – другий стовпець матриці , другий рядок матриці і другий елемент вектора і так далі:
Під час зворотного ходу визначають невідомі :
Текст програми
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Laba2
{
class Program
{
static void Main(string[] args)
{
int n = 4, p = 1, K = 2;
double s = 0.2 * K, b = 0.2 * p;
double[,] A = new double[,]
{
{8.3, 2.62 + s, 4.1, 1.9},
{3.92, 8.45, 7.78 - s, 2.46},
{3.77, 7.21 + s, 8.04, 2.28},
{2.21, 3.65 - s, 1.69, 6.69}
};
double[] B = new double[]
{
-10.65 + b,
12.21,
15.45 - b,
-8.35
};
double[,] L = new double[n, n], U = new double[n, n];
double[] X = new double[n], Y = new double[n];
//lu - розклад
for (int k = 0; k < n; k++)
{
for (int i = k; i < n; i++)
{
double sum = 0;
for (int m = 0; m <= k - 1; m++)
sum += L[i, m] * U[m, k];
L[i, k] = A[i, k] - sum;
}
for (int j = k + 1; j < n; j++)
{
double sum = 0;
for (int m = 0; m <= k - 1; m++)
sum += L[k, m] * U[m, j];
U[k, j] = (A[k, j] - sum) / L[k, k];
}
U[k, k] = 1;
}
//прямий хід
Y[0] = B[0] / L[0, 0];
for (int i = 1; i < n; i++)
{
double sum = 0;
for (int m = 0; m <= i - 1; m++)
sum += L[i, m] * Y[m];
Y[i] = (B[i] - sum) / L[i, i];
}
//об. хід
X[n - 1] = Y[n - 1];
for (int i = n - 2; i >= 0; i--)
{
double sum = 0;
for (int m = i + 1; m < n; m++)//////
sum += U[i, m] * X[m];
X[i] = Y[i] - sum;
}
Console.WriteLine("Розвязок системи X[]");
for (int i = 0; i < n; i++)
Console.WriteLine(X[i]);
Console.WriteLine();
Console.WriteLine("Перевiрка Вивiд B[]");
for (int i = 0; i < n; i++)
Console.WriteLine(B[i]);
Console.WriteLine();
Console.WriteLine("Перевiрка (вивiд суми A[i, j] * X[j])");
for (int i = 0; i < n; i++)
Console.WriteLine(A[i, 0] * X[0] + A[i, 1] * X[1] + A[i, 2] * X[2] + A[i, 3] * X[3]);
Console.ReadKey();
}
}
}
Результати виконання програми
/
Висновок:
Я ознайомився з прямими методами розв’язування систем лінійних алгебраїчних рівнянь.