МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра БІТ
Звіт про виконання
лабораторної роботи №2
з курсу: «Комп’ютерні методи дослідження інформаційних процесів та систем»
на тему: «Метод Гаусса для розв’язування систем
лінійних алгебраїчних рівнянь»
Мета роботи – ознайомлення з прямими методами розв’язування систем лінійних алгебраїчних рівнянь.
1.Короткі теоретичні відомості
Метод Гаусса з вибором головного елемента.
Запишемо розширену прямокутну матрицю коефіцієнтів системи з рівнянь.
Серед елементів матриці вибираємо найбільший за модулем елемент, який називається головним елементом. Нехай ним буде . Рядок з номером називається головним рядком. Обчислюємо множники для всіх .
Далі перетворюємо матрицю наступним чином: з кожного го неголовного рядка віднімаємо почленно головний рядок, домножений на . Отримаємо матрицю, у якої всі елементи го стовпця за винятком , дорівнюють нулю. Відкидаючи цей стовпець і головний рядок, отримуємо нову матрицю з меншою на одиницю кількістю рядків та стовпців. Над матрицею повторюємо такі ж дії й тримаємо матрицю і т.д. Ці перетворення продовжуємо доки не отримаємо матрицю, що містить один рядок з двох елементів, який вважаємо головним.
Об’єднаємо всі головні рядки починаючи з останнього. Після перестановки вони утворять трикутну матрицю, еквівалентну початковій матриці . Цей етап називають прямим ходом обчислень. Розв’язавши систему з отриманою трикутною матрицею коефіцієнтів, знайдемо послідовно невідомі . Цей етап обчислень називають зворотним ходом. Усі описані обчислення проводять аналогічно до методу Гауса. Сенс вибирання головного елемента полягає в тому, щоб зробити як найменшими числа і завдяки цьому зменшити похибку обчислень.
2.Завдання
Розв’язати систему лінійних алгебраїчних рівнянь методом Гаусса з вибором головного елемента.
3.Блок-схема алгоритму програми
+
+
4. Список ідентифікаторів констант, змінних, функцій,
використаних у блок-схемі алгоритму і програмі,
та їх пояснення
class Program – клас, в якому виконуються всі дії;
double[] b, double[,] a- масиви в яких зберігаються коефіцієнти системи;
n – розмірність масиву;
max – максимальний елемент масиву ;
max_i – індекс максимального елемента масиву;
lead, a_div_lead – змінні які використовуються для отримання розв’язку;
Console.WriteLine() – метод виведення на екран;
5. Текст програми
using System;
namespace Sabodaschko
{
class Program
{
static void Main()
{
int i, n,k,j;
double[] b;
double[,] a;
Console.WriteLine("Введи порядок системи");
n= Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введи коефiцiєнти ");
a = new double[n, n];
b = new double[n];
for (i = 0; i < n; i++)
{
for (j = 0; j < n ; j++)
{
Console.WriteLine("a["+(i+1)+","+(j+1)+"]=");
a[i, j] =Convert.ToDouble(Console.ReadLine());
}
Console.WriteLine("b[" + (i + 1) + "]=");
b[i] = Convert.ToDouble(Console.ReadLine());
}
double eps = 0.000001;
double max;
int max_i;
double lead, a_div_lead;
for (k = 0; k < n; k++)
{
max = 0;
max_i = -1;
for (i=k; i <n; i++)
{
if (Math.Abs(a[i,k]) > max)
{
max = Math.Abs(a[i, k]);
max_i = i;
}
}
if (max_i == -1 || Math.Abs(a[max_i,k]) < eps)
{
Console.WriteLine("Error: det=0");
break;
}
lead = a[k,k];
for (j = k; j < n; j++)
a[k,j] /= lead;
b[k] /= lead;
for (i = 0; i < n; i++)
{
a_div_lead = a[i,k] / a[k,k];
if (i != k)
{
for (j = k; j < n; j++)
a[i,j] -= a[k,j] * a_div_lead;
b[i] -= b[k] * a_div_lead;
}
}
}
Console.Write( "Матриця пiсля перетворень та вiдповiднi результати \n");
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
Console.Write(a[i,j] + " ");
Console.Write("x("+(i+1)+")="+b[i] + " \n");
}
Console.ReadKey();
}
}
}
6. Результати роботи програми
/
7. Висновки
На даній лабораторній роботі я навчився розв’язувати системи лінійних
алгебраїчних рівнянь за допомогою комп’ютерних програм . Розв’язував
системи за допомогою методу Гаусса з вибором головного елемента. Застосовував різноманітні кроки для того , щоб звести матрицю до
діагонального вигляду , і тим самим отримати розв’язки даної системи
лінійних алгебраїчних рівнянь .