Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab8.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
496.64 Кб
Скачать

Лабораторна робота №8

Числові методи лінійної алгебри

Завдання: Розв’язати систему лінійних алгебраїчних рівнянь(СЛАР)

:

  1. методом Гауcса;

  2. методом Гаусса -Жордано;

  3. за правилом Крамера. Визначники обчислити методом Гауcса;

  4. методом оберненої матриці

(одним з них згідно варіанту).

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;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]