Розробка програмного забезпечення для розв`язку СЛАР методом Гауса

–PAGE_BREAK–1.2

Розв’язання системи лінійних рівнянь

методом Гаусса

Одним з найпоширеніших методів розв’язування систем алгебраїчних рівнянь є метод послідовного виключення невідомих – метод Гаусса. Цей метод ґрунтується на деяких перетвореннях системи лінійних рівнянь, внаслідок яких дістанемо систему, еквівалентну початковій системі.

Метод Гаусса ґрунтується на деяких перетвореннях системи лінійних рівнянь, внаслідок яких дістанемо систему, еквівалентну початковій системі.

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

1)          множення рівняння системи на число, відмінне від нуля;

2)          додавання до одного рівняння іншого, помноженого на довільне число;

3)          зміна місцями двох рівнянь в системі.

Після елементарних перетворень система стає рівносильною. Якщо система лінійних рівнянь має вигляд
a11x1 + a12x2 +…+ a1nxn = b1,

a22x2 +…+ a2nxn = b2,

…………………………….

annxn = bn,

тобто матриця коефіцієнтів системи – верхня трикутна, то розв’язують її досить просто, послідовно виключаючи невідомі по черзі з останнього рівняння.

Прямий перебіг методу Гаусса саме й дає змогу внаслідок елементарних перетворень замінити систему лінійних рівнянь загального вигляду еквівалентною системою з верхньою трикутною матрицею.

Є багато реалізацій методу Гаусса з певними перевагами обчислення. Наприклад, у схемі з вибором головного елемента послідовність вилучення визначають під час обчислення.

Схема єдиного ділення. Опишемо метод Гаусса для розв’язування системи лінійних рівнянь загального вигляду:
a11x1 + a12x2 +…+ a1nxn = a1,n+1,

a21x1 + a22x2 +…+ a2nxn = a2,n+1,

……………………………………………

an1x1 + an2x2 +…+ annxn = an,n+1.
Виберемо a110 як провідний елемент і поділимо на нього перше рівняння. Дістанемо
x1 + a12x2+…+ a1nxn = a1,n+1,

a1k= a1k a11, k=2,3,…,n.
Вилучимо x1 з усіх рівнянь системи, крім першого. Для цього помножимо перетворене перше рівняння на -a21 і додамо його до другого. Аналогічно вилучаємо x1 зтретього рівнянняіт. ін. Помножимопершерівнянняна -an1 і додамо його до останньго, вилучимо x1 з n-го рівняння. На цьому перший крок гауссового вилучення завершено. Початкова система матиме еквівалентний вигляд:

x1 + a12x2+…+ a1nxn = a1,n+1,

a22x2+…+ a2nxn = a2,n+1,

…………………………………………………..

 an2x2+…+ annxn = an,n+1.
де aij= aij- ai1 a1j, j=2,3,…,n+1.

На другому кроці, припустивши, що провідний елемент a220,вилучимо невідомеx2 з усіх рівнянь,починаючиз третього.

Післяскінченоїкількостітакихперетвореньпочатковасистема лінійнихрівнянь матиме одинз такихвиглядів:

а)

б)
У випадку а) система має єдиний розв’зок, який легко знайти шляхом послідовного вилучення невідомих, починаючи з xn, за формулами:

pascalрівняння лінійний програма гаус

Цей випадок можливий, коли всі рівняння системи лінійно незалежні, тобто визначник матриці коефіцієнтів біля невідомих не дорівнює нулю. Крім того, всі провідні елементи a11, a22, …, annтакож відмінні від нуля. Остання умова завжди виконуватиметься, якщо матриця системи має властивість діагонального перевантаження, тобто

 

або відмінні від нуля головні мінори матриці.

У випадку б) система несумісна, коли хоча б одне з чисел сr+1,n+1,…,сn,n+1не дорівнює нулю. Якщо всі елементи сr+1,n+1,…, сn,n+1 дорівнюють нулю, то система має нескінченну множину розв’язків. Невідомі xr+1,…,xnможуть набирати будь-яких значень, а з перших rрівнянь перетвореної системи подано послідовно xr,xr-1,…,x1 через вільні невідомі xr+1,…,xn. У цьому разі система має rлінійно незалежних рівнянь, а решта є їх наслідками.

Схема єдиного ділення полягає у використанні однотипних дій, які легко програмувати на сучасних ЕОМ. Метод Гаусса надзвичайно ефективний також за кількістю арифметичних дій. Кількість множень і ділень у прямому перерізі методу має порядок O(n), де n– кількість рівнянь у системі. У зворотному перерізі цей порядок становить O(n).

У загальному випадку коефіцієнти системи є дробові числа. Крім того, під час ділення на провідні елементи обмежуються скінченою кількістю десяткових знаків. Тому гауссові виключення неминуче супроводжує похибка заокруглення, яка може збільшуватися зі зростанням кількості рівнянь системи. Отже, метод Гаусса дає змогу знайти розв’язок системи з точністю до похибки заокруглення.

1.3

Вхідна інформація

В програмі описаний тип mas1, який являється масивом дійсних чисел максимальної розмірності 50 на 51.

Для введення коефіцієнтів при невідомих і вільних членів в програмі описано матрицю а. Розмірність цієї матриці має тип integer, але її значення обмежене програмою – залежить від кількості рівнянь. Елементи матриці мають такий тип, як і матриця, до якої вони належать.

Показник

Ідентифікатор

Значність

Тип

матриця а

a

mas1

висота матриці а

n

1..50

integer

ширина матриці а

n+1

1..51

integer

елемент матриці а

a[i,j]

 real

1.4

Вихідна інформація

В програмі описаний тип mas2. Цей тип являється одновимірним масивом дійсних чисел розмірності 50. Матриця xформується в результаті перетворень над матрицею а і обчислень всередині програми.

Показник

Ідентифікатор

Значність

Тип

матриця x

a

mas1

розмірність матриці x

n

1..50

integer

елемент матриці x

a[i,j]

 real

2.

Практична частина

2.1

Архітектура програми

Програма Gaysпризначена для обчислення системи лінійних рівнянь методом Гаусса. Програма складається з головної програми і шести процедур:

Vvid

Mriv

Dil

Nkoef

Nevid

Result

Текст програми (Додаток ), блок-схеми всіх процедур і головної програми подані в додатках.

Процедура vvidпризначена для введення кількості рівнянь, коефіцієнтів при невідомих і вільних членів (Додаток ).

Процедура mrivпризначена для того, щоб поміняти провідне рівняння, якщо провідний коефіцієнт рівний нулю, на те, де ведучий коефіцієнт відмінний від нуля. Це рівняння автоматично стає ведучим (Додаток ).

Процедура dilпризначена для ділення коефіцієнтів провідного рівняння на провідний коефіцієнт (Додаток ).

Процедура nkoefпризначена для обчислення нових коефіцієнтів при невідомих (Додаток ).

Процедура nevidпризначена для обчислення невідомих шляхом арифметичних перетворень над зведеною до трикутної форми матрицею коефіцієнтів і вільних членів системи рівнянь(Додаток ).

Процедура vuvidпризначена для виводу на екран результатів виконання програми (Додаток ).

Головна програма призначена для виклику процедур. Спочатку викликається процедура vvid. Процедури mriv, dil, nkoefвикликаються в циклі, кількість повторень якого на одиницю менше від кількості рівнянь. На цьому прямий хід розв’язку системи лінійних рівнянь методом Гаусса закінчується.

Після цього викликається процедура nevid, яка реалізує зворотній хід розв’язку системи – пошук невідомих (Додаток ).

Останньою викликається процедура vuvid(Додаток ).
2.2

Опис програми

{01} Назва програми;

{02} підключення модуля crt;

{03} службове слово для опису типів;

{04} опис двовимірного масиву дійсних чисел mas1;

{05} опис одновимірного масиву дійсних чисел mas2;

{06} службове слово для опису змінних;

{07} опис змінної a;

{08} опис змінної x;

{09} опис змінних b,c,d,r;

{10} опис змінних i,j,n,k,m;

{11} — {22} Процедура вводу коефіцієнтів і вільних членів

{11} заголовок процедури, опис змінних;

{12} початок процедури;

{13} вивід повідомлення „введіть кількість рівнянь n=”;

{14} оператор вводу кількості рівнянь;

{15} вивід повідомлення „введіть коефіцієнти і вільні члени”;

{16} оператор циклу;

{17} оператор циклу;

{18} командна дужка „begin”;

{19} вивід повідомлення;

{20} оператор вводу коефіцієнтів і вільних членів;

{21} командна дужка „end”;

{22} кінець процедури;

{23} — {36} Процедура зміни рівнянь місцями

{23} назва процедури, опис змінних;

{24} початок процедури;

{25} перевірка умови;

{26} оператор циклу;

{27}командна дужка „begin”;

{28} оператор циклу;

{29} оператор циклу;

{30} командна дужка „begin”;

{31} — {33} зміна коефіцієнтів місцями між даним і наступним

рядком через третю змінну r;

{31}змінній r присвоюється значення дане значення коефіцієнта;

{32} даному значенню коефіцієнта присвоюється значеннянаступного рядка;

{33} значенню коефіцієнта наступного рядка присвоюєтьсязначення змінної r;

{34} командна дужка „end”;

{35} командна дужка „end”;

{36} кінець процедури;

{37} — {43} Процедура ділення рівняння на провідний коефіцієнт;

{37} назва процедури, опис змінних;

{38} початок процедури;

{39} змінній b присвоюється значення провідного коефіцієнта;

{40} оператор циклу;

{41} оператор циклу;

{42} коефіцієнти провідного рівняння діляться на змінну b;

{43} кінець процедури;

{44} — {51} Процедура обчислення нових коефіцієнтів

{44} назва процедури, опис змінних;

{45} початок процедури;

{46} оператор циклу, командна дужка „begin”;

{47} змінній c присвоюється коефіцієнт;

{48} оператор циклу;

{49} обчислення коефіцієнта за формулою;

{50} командна дужка „end”;

{51} кінець процедури;

{52} — {62} Процедура обчислення коренів рівняння

{52} назва процедури, опис змінних;

{53} початок процедури;

{54} обчислення останнього невідомого за формулою;

{55} оператор циклу з зменшенням параметра, команднадужка „begin”;

{56} присвоєння 0 змінній d;

{57} оператор циклу;

{58} оператор циклу;

{59} обчислення змінної d за формулою;

{60} обчислення невідомих за формулою;

{61} командна дужка „end”;

{62} кінець процедури;

{63} — {68} Процедура виводу результатів

{63} назва процедури;

{64} початок процедури;

{65} вивід повідомлення „Розв’язки рівняння”;

{66} оператор циклу;

{67} вивід невідомих;

{68} кінець процедури;

{69} — {69} Головна програма

{69} початок;

{70} очистка екрана;

{71} виклик процедури вводу коефіцієнтів і вільних членів;

{72} оператор циклу, командна дужка „begin”;

{73} виклик процедури зміни рівнянь місцями;

{74} виклик процедури ділення рівняння на провідний коефіцієнт;

{75} виклик процедури обчислення нових коефіцієнтів;

{76} командна дужка „end”;

{77} виклик процедури обчислення коренів рівняння;

{78} виклик процедури виводу результатів;

{79} оператор вводу без параметрів;

{80} кінець програми.
2
.3

Контрольний приклад

Схема єдиного ділення.

Продемонструємо алгоритм гауссових вилучень на прикладі:

2×1 + 4×2 + 6×3 + 8×4 = 2,

3×1 + 5×2 + 6×3 + 13×4 = 8,

5×1 + 10×2 + 16×3 + 19×4 = 3,

7×1 + 12×2 + 20×3 + 27×4 = 9.

Випишемо розширену матрицю системи, відокремивши стовпчик вільних членів від коефіцієнтів біля невідомих вертикальною рискою:

Коефіцієнт 2 біля x1 у першому рівнянні назвемо провідним.

Перший крок методу Гаусса полягає у вилучення змінної з другого, третього та четвертого рівнянь системи. Для цього поділимо коефіцієнти першого рівняння на провідний елемент:

    продолжение
–PAGE_BREAK–