
- •Числові методи лінійної алгебри
- •1 Розв’язування слар методом Гауcса
- •2. Обчислення визначника квадратної матриці методом Гаусса за схемою з частковим вибором головного елемента
- •3. Розв’язування слар методом Гаусса– Жордано
- •4. Знаходження оберненої матриці методом Гаусса–Жордано
- •5. Порядок виконання лабораторної роботи
- •6. Варіанти завдань
Лабораторна робота №8
Числові методи лінійної алгебри
Завдання: Розв’язати систему лінійних алгебраїчних рівнянь(СЛАР)
:
методом Гауcса;
методом Гаусса -Жордано;
за правилом Крамера. Визначники обчислити методом Гауcса;
методом оберненої матриці
(одним з них згідно варіанту).
1 Розв’язування слар методом Гауcса
СЛАР (n рівнянь, n невідомих) в загальному випадку записується у вигляді
(1.1)
Коефіцієнти
при невідомих
,
вільні члени
та невідомі
утворюють матрицю
,
вектор
та вектор
,
що дає змогу СЛАР (1) записати у матричному вигляді
.
(1а)
Розв’язати
СЛАР означає знайти значення невідомих
при яких система рівнянь перетворюється
в систему числових тотожностей. Ці
значення невідомих називаються коренями
системи,
а їх сукупність розв’язком
системи.
В залежності від матриці
з
коефецієнтів при невідомих СЛАР може
мати:
1)
один розв’язок, якщо
(матриця
з коефіцієнтів при невідомих невироджена);
2)
безліч розв’язків, якщо
і ранг матриці
дорівнює
рангу розширеної матриці
;
3) жодного розв’язку,
якщо
і ранг матриці
не
дорівнює рангу розширеної матриці
.
Розв’язування СЛАР є найбільш важливою математичною задачею і тому розроблено чимало методів її розв’язування. Серед них вирізняється метод Гаусса.
Стратегія методу Гаусса полягає в тому, що рівняння (8.1.1) шляхом елементарних перетворень приводиться до рівносильної системи рівнянь
,
(1.2)
де
-
трикутна матриця з відмінними від нуля
елементами вище головної діагоналі і
рівними одиниці на головній діагоналі:
,
х – позначає
відмінний від нуля елемент.
Матриця
та вектори
,
,
еквівалентні
,
,
відповідно. Дві матриці еквівалентні,
якщо одну з них можна одержати з іншої
послідовністю елементарних перетворень:
перестановка рядків і/або для стовпчиків;
множення або ділення рядка на число, яке не дорівнює нулю, аналогічно для стовпчиків;
заміна рядка сумою цього рядка з іншим рядком, аналогічно для стовпчиків.
Аналогічно визначаються еквівалентні вектори.
Процес перетворення СЛАР (1.1а) до рівносильної (1.2) називається прямим ходом методу Гаусса , а розв’язування СЛАР (1.2) – зворотнім ходом. Прямий хід здійснюється за різними обчислювальними схемами і складається з n кроків. Основною серед цих обчислювальних схем є схема єдиного ділення, яка на практиці не використовується, але є основою для решти обчислювальних схем.
Схему єдиного ділення зручно розглядати на прикладі СЛАР 4-го порядку
Верхній індекс (k) позначає номер кроку, на якому обчислені значення коефіцієнтів при невідомих та вільних членів. Індекс (0) означає, що значення коефіцієнтів при невідомих та вільних членів задані в постановці задачі.
1
крок.
Нехай
(цей
елемент називають головним
елементом на
першому кроці).
Тоді:
(перше
рівняння розділити на головний елемент),
(друге рівняння замінити на друге
рівняння від якого відняти перше рівняння
помножити на
),
,
.
В результаті система рівнянь набуде
вигляду:
, (*)
,
,
,
,
,
.
2
крок. Нехай
(цей
елемент називають головним
елементом на
другому кроці).
Тоді:
,
,
.
В результаті система рівнянь набуде
вигляду:
, (**)
,
,
,
,
,
.
3
крок.
Нехай
(цей
елемент називають головним
елементом на
третьому кроці).
Тоді:
,
.
В результаті система рівнянь набуде
вигляду:
, (***)
,
,
,
,
,
.
4
крок. Нехай
(цей
елемент називають головним
елементом на четвертому кроці).
Тоді:
.
В результаті система рівнянь набуде
вигляду:
, (****)
.
Зворотній хід.
З
четвертого рівняння системи (****)
;
з
третього рівняння
;
з
другого рівняння
;
з першого рівняння
.
Для
СЛАР довільної кількості рівнянь прямий
хід має n
кроків. Нехай на k – кроці
головний елемент
.
Тоді:
,
,
. . .
.
В результаті СЛАР набуде вигляду:
в
якій
,
,
, (1.3)
,
,
(1.4)
На зворотньому ході корені СЛАР обчислюються за формулами:
,
. (1.5)
Методом
Гаусcа
за схемою єдиного ділення не можна
знайти розв’язок СЛАР, якщо на якомусь
кроці головний елемент дорівнює нулю
або набагато менший за абсолютною
величиною ніж недіагональні коефіцієнти
при невідомих k –
рівняння. В першому випадку на нуль
ділити не можна, а в другому ділення на
мале число спричиняє велику похибку
результату ділення. Щоб уникнути цих
недоліків розроблено на основі схеми
єдиного ділення багато різних
обчислювальних схем методу Гаусса .
Однією з таких схем є схема з частковим
вибором головного елемента.
На прямому ході схеми з частковим вибором
головного елемента на k – кроці
спочатку знаходять елемент
такий, що
,
після чого
(l –
рівняння
міняється місцями з k –
рівнянням), і далі за схемою єдиного
ділення. Якщо і після перестановки
головний елемент дорівнює нулю, то
матриця з коефіцієнтів при невідомих
СЛАР вироджена (її визначник дорівнює
нулю), в цьому випадку система має або
нескінченну кількість розв’язків, які
методом, що розглядається не можуть
бути знайдені, або жодного.
Алгоритм розв’язування СЛАР методом Гаусса за схемою з частковим вибором головного елемента реалізований в такій процедурі.
procedure SLAR_gauss(a:matrix;b:vector;n:size; var x:vector; var error:byte);
{Процедура розв'язує систему лiнiйних алгебраїчних рiвнянь методом Гаусcа за схемою з частковим вибором головного елемента.
Нестандартні типи даних визначені в модулі matr_alg.
Вхiднi данi
a - масив з коефiцiєнтами при невiдомих;
b - масив з вiльними членами системи;
n - кiлькiсть рiвнянь системи;
Вихiднi данi
x - масив з роз'язком системи;
error - код помилки;
0 – розв'язок системи знайдено,
1 - матриця з коефiцiєнтiв при невiдомих вироджена, система може мати безлiч розв'язкiв або жодного.}
var
am,t:real;
i,j,k,l:size;
begin
{прямий хiд, k-номер кроку}
error:=0;
for k:=1 to n do
begin
{шукається головний елемент на k – кроцi, am, номер його l}
am:=a[k,k]; l:=k;
for i:=k to n do
if abs(a[i,k])>abs(am) then begin am:=a[i,k]; l:=i; end;
{якщо головний елемент за абсолютною величиною менший за програмний нуль zero, то вихід з процедури}
if abs(am)<zero then begin error:=1; exit;end;
{перестановка мiсцями к – рiвняння i l – рівняння (якщо потрiбно)}
if l<>k then
begin
for j:=1 to n do begin t:=a[l,j]; a[l,j]:=a[k,j]; a[k,j]:=t;end;
t:=b[l]; b[l]:=b[k]; b[k]:=t;
end;
{к – рiвняння ділиться на головний елемент am, формули (1.3)}
for j:=k+1 to n do a[k,j]:=a[k,j]/am;
b[k]:=b[k]/am;
{обчислення коефiцiєнтів при невідомих та вiльних членів наступних рівнянь, формули (1.4)}
for i:=k+1 to n do
begin
t:=a[i,k]; b[i]:=b[i]-t*b[k];
for j:=1 to n do a[i,j]:=a[i,j]-t*a[k,j];
end;
end;
{зворотнiй хiд, формули (1.5)}
for k:=n downto 1 do
begin
t:=0; for l:=k+1 to n do t:=t+a[i,l]*x[l];
x[k]:=b[k]- t;
end;
end;