Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Choliy.NumericaMethods.2011Dec01

.pdf
Скачиваний:
10
Добавлен:
19.03.2015
Размер:
913.46 Кб
Скачать
b(nn−1)

З формальної точки зору, метод Гауса полягає у зведеннi квадратної матрицi системи рiвнянь до верхньої трикутної. Отримана таким способом система еквiвалентна початковiй, однак її розв’язати значно простiше i проводиться це починаючи з останнього рiвняння:

xn = a(nnn−1) .

Пiдставивши знайдене значення у передостаннє рiвняння

x

n−1

= bn(n12) − an(n12),nxn

 

 

a(n−2)

 

 

 

n−1,n−1

маємо ще одну компоненту. Процес повторюється для всiх рiвнянь з яких крок за кроком знаходяться компоненти вектора розв’язку. Дещо пiзнiше вияснимо що робити, якщо у процесi роботи дiагональний елементи стане нульовим.

LU-розбиття. Будь-яку квадратну невироджену матрицю A можна розкласти у добуток нижньої трикутної L та верхньої трикутної U:

A = L · U, lij = 0, i < j, uij = 0, i > j.

Такий розклад неоднозначний, тому зазвичай кладуть uii = 1. Для знаходження елементiв матриць L, U запишемо

n

X

likukj = aij,

k=1

але оскiльки матрицi трикутнi, то n = min(i, j) i тодi:

i

.

kPj

=1

likukj = aij, i < j

 

kP

likukj = aij, i ≥ j

=1

 

Тепер у кожнiй сумi вiдокремимо останнiй доданок:

 

i−1

 

k=1 likukj + liiuij = aij, lii 6= 1

,

 

jP1

 

 

 

 

 

 

likukj + lijujj = aij, ujj = 1

 

 

=1

 

 

kP

 

 

 

 

31

i дещо переписавши, маємо формули для обчислень:

 

lij

j−1

 

 

 

 

 

 

 

 

 

k=1

,

(4.1)

 

i−1

uij = (aij

kP

likukj)/lii

 

=1

якими користуємося так: першою при j = 1, i ≥ 1, другою при i = 1, j ≥ 1, потiм знову першою при j = 2, i ≥ 2, тодi другою при i = 2, j ≥ 2 i так до n.

Щоб розв’язати систему рiвнянь з використанням LU-розбиття введемо замiну U~x = ~y:

A~x = ~b LU~x = ~b

L~y = ~b

,

 

U~x = ~y

 

тобто, одна система рiвнянь з заповненою матрицею A, замiнена на двi системи рiвнянь з трикутними матрицями. Розписавши цi двi системи покомпонентно i прийнявши до уваги трикутну структуру матриць, маємо:

i

n

XX

lijyj = bi,

uijxj = yi.

j=1

j=i

Вiдокремивши останнiй доданок у першому рiвняннi i перший доданок у другому, отримуємо формули для обчислень:

 

i−1

yi

 

 

i−1

 

j=1 lijyj + liiyi = bi

= (bi j=1 lijyj)/lii

. (4.2)

n

P

 

 

 

P

 

 

 

= yi

 

uijxj

 

 

uijxj + uiixi = yi

xi

 

 

 

 

 

n

 

j=Pi

 

 

 

P

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+1

 

 

 

j=i+1

 

У формулi (4.1) для uij в знаменнику стоїть lii. Чим бiльший модуль цього числа, тим точнiшими будуть результати обчислень. На цьому будується правило вибору головного елемента i робиться перестановка рядочкiв та стовбчикiв так, щоб на дiагоналi був найбiльший за модулем елемент. Це дає модифiкацiю методу: LU розбиття з вибором головного елемента.

Приклад:

A =

2

3

4

. L =

2

7

0

 

, U =

0

1

2/7 .

 

1

−2

3

 

 

 

1

0

0

 

 

 

 

 

1

−2

3

 

 

1

1

1

 

 

 

1

3

−8/7

 

 

0

0

1

 

 

~b = 20

,

~y =

8/7 ,

~x =

2 .

 

 

 

 

 

 

6

 

 

 

 

6

 

 

 

1

 

 

 

 

 

 

6

 

 

3

 

3

 

 

32

LU-розбиття можна отримати i на основi iншого пiдходу. Нехай d(i) - одинична матриця, у якої елемент dii замiнений не рiвним одиницi числом, а l(i) - нижня трикутна матриця з одиничною дiагоналлю, у якої лише i-й стовбчик пiд дiагоналлю ненульовий, а всi iншi елементи - нулi. Множення довiльної матрицi A (для прикладу вiзьмемо матрицю 3 × 3) на d(1) а тодi на l(1) дає такий результат:

A0 = l(1)d(1) A = −a21

1

0

 

0

 

1

0

a21

a22

a23

=

 

 

 

 

1

0

0

 

 

 

 

1/a11 0

0

 

 

a11

a12

a13

 

·

 

−a31 0

1 ·

0

 

0

1 · a31

a32

a33

 

=

 

0

a22

− a21a12/a11

a23

− a21a13

/a11

.

 

 

 

 

(1)

1

 

a12/a11

 

 

 

 

a13/a11

 

 

 

 

 

 

0

a

a

 

a

 

/a

 

a

 

a

 

a

 

/a

 

 

 

 

(1)32

 

31

 

12

 

11

 

33

 

31

 

13

11

 

 

 

Якщо матрицi d

та l

утворювати, беручи вiдповiднi елементи матрицi

A, то результат такого множення такий же, як пiсля першого кроку методу Гауса. Продовжуючи множення, готуючи кожен раз матрицi l(i), d(i) на основi елементiв матрицi A, пiсля послiдовностi крокiв, отримуємо:

d(3)l(2)d(2)l(1)d(1)

 

A =

0

1

u23

= U.

 

 

 

 

 

 

 

 

1

u12

u13

 

Ввiвши позначення

 

 

 

·

 

 

0

0

1

(3)

 

(2)

(2)

 

(1)

 

(1)

ˆ

 

 

d

l

l

d

 

 

 

 

 

d

 

 

= L,

 

 

маємо

ˆ

LA = U,

ˆ

де U - верхня трикутна матриця з одиничною дiагоналлю (за побудовою), а L - нижня трикутна, (оскiльки добуток нижнiх трикутних матриць є нижньою

ˆ−1

трикутною матрицею). Якщо покласти L = L,

L · U = A.

Таким чином, LU-розбиття можна виконати множенням на послiдовнiсть вiдповiдно пiдiбраних елементарних матриць. Знаходження матрицi L не складає труднощiв, оскiльки матрицi, оберненi до l(i) та d(i), знаходяться дуже просто, наприклад:

x

1

0

−x

1

0

= E,

 

0

11

1

0

·

0

1

0

= E.

1

0

0

1

0

0

 

 

1/a

0

0

 

a11

0

0

 

y

0

1 · −y

0

1

 

0

 

0

1 0

0

1

 

33

Обернена матриця знаходиться таким способом. Очевидно, що

A · A−1 = E.

Поклавши A−1 = X маємо

A · X = E.

Оскiльки стовбчики матрицi з ненульовим визначником незалежнi, то останнє рiвняння можна розбити на n лiнiйних систем:

A · ~x(i) = ~e(i), i = 1, . . . , n,

де ~e(i) - орт, нульовий вектор з одиницею у i-й позицiї. Матрицю досить розбити один раз, а тодi розв’язати n лiнiйних систем. Знайденi вектори ~x(i) є стовбчиками оберненої матрицi.

Знаходження визначника грунтується на тому, що

n

Y det A = det L · det U = lii.

i=1

Метод Холецького. Якщо матриця A симетрична. LU-розбиття можна за-

мiнити на

L · LT = A.

Тепер матриця L, а значить i LT - трикутна з неодиничною дiагоналлю. Мiркуючи зовсiм аналогiчно, запишемо

n

X

likukj = aij,

k=1

але U = LT , тому

n

X

likljk = aij.

k=1

Тут обов’язково i ≥ j, що дає

j

X

likljk = aij,

k=1

а пiсля вiдокремлення останнього доданка в сумi:

j−1

X

lik · ljk + lijljj = aij.

k=1

34

Це дає формули для обчислень:

ljj2

= ajj

j−1

lik · ljk

 

1

 

kP j−1

 

 

 

 

=1

lij

= lii aij k=1 lik · ljk .

 

 

 

 

P

Формули повиннi використовуватися у циклi по j = 1, . . . , n всерединi якого цикл по i = j +1, . . . , n. Iнша назва цього методу - метод квадратного кореня. QR-розбиття. Це ще одне розбиття матрицi на двi

A = QR,

але тепер матриця R - верхня трикутна, а матриця Q - ортогональна, для якої QQT = E, Q−1 = QT , тобто її транспонована спiвпадає з оберненою. Саме ця остання властивiсть вiдiграє головну роль у методi, що розглядається далi, а сам пiдхiд має дуже важливе значення також i при вiдшуканнi власних чисел та векторiв.

Перетворення Хаусхолдера. Знайдемо послiдовнiсть ортогональних матриць, якi утворять Q. Нехай w~ - довiльний вектор, для якого |w~| = 1. Розглянемо

матрицю

P = E − 2w~w~T .

Перевiримо її ортогональнiсть:

P 2 = (E − 2w~w~T )2 = E2 − 2 · E · 2w~w~T + 2w~w~T · 2w~w~T = = E2 − 4w~w~T + 4w~(w~T w~)w~T = E − 4w~w~T + 4w~w~T = P.

Отже P · P = E, або P = P −1. Далi розглянемо

P T = ET − (2w~w~T )T = E − 2w~w~T = E.

Отже P = P T , а разом з P = P −1 це означає, що матриця P ортогональна. З довiльного вектора ~u матрицю P утворюємо так:

P = E −

u~T

1

|u|2.

 

, H =

 

H

2

Тепер вiзьмемо ~x - перший стовбчик матрицi A i побудуємо вектор:

~u = ~x |x| · ~e1,

де ~e1 - орт з одиницею в першому елементi i нулями у всiх iнших.

35

Запишемо чому рiвне H:

H = 12 (~x |x|~e1) (~x |x|~e1) = 12 |x|2 2|x|x1 + |x|2 = |x|2 |x|x1.

Знайдемо добуток:

P~x = (E − H )~x = E − H (~x |x|~e1)T

~x = ~x −

 

H ~xT ~x |x|x1 =

 

 

 

 

 

u~T

 

 

 

~u

 

 

 

~u

 

 

 

 

= ~x

~u

( x 2

x x

) = ~x

~u(|x|2 |x|x1)

= ~x

~u = ~x

(~x

x ~e

) = x ~e

.

 

 

 

H

| | | | 1

 

|x|2 |x|x1

 

 

 

| | 1

±| | 1

 

Тобто, множення на матрицю P прибирає у векторi ~x всi елементи, окрiм першого. Максимiзацiя модуля вектора H покращує точнiсть результату (H в знаменнику), тому при побудовi вектора ~u знак перед |x| слiд вибирати так, щоб вiн спiвпадав зi знаком x1.

Приклад. Знайти QR-розбиття для матрицi

 

 

 

 

A =

1

1

2

2

.

 

 

 

 

 

 

 

1

1

1

1

 

 

 

 

 

 

 

 

1

2

1

1

 

 

 

 

 

 

 

 

1

2

1

2

 

 

 

 

Перший крок.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 ,

 

~x = 1 ,

x = 2, ~u = ~x + x ~e1

=

H = u 2/2 = 6.

 

1

 

 

 

 

 

 

 

 

3

 

 

1

| |

 

 

| |

 

 

1

| |

 

1

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вибираємо додатнiй знак, бо x1 = 1 > 0.

= −1/2 5/6

−1/6

−1/6 .

u~T = 3

1

1

1 , P1 = E

u~T

 

9

3

3

3

 

 

 

 

 

−1/2

−1/2

−1/2

−1/2

 

3

1

1

1

 

 

−1/2

−1/6 5/6

−1/6

H

 

3

1

1

1

 

 

 

 

 

1/2

1/6

1/6 5/6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P1 A =

0

−1/3 5/6 2/3

= A0.

 

 

−2

−3

−5/2

−3

 

·

0

2/3

−1/6

−1/3

 

 

0

2/3

1/6

2/3

 

 

 

 

 

 

 

 

36

Другий крок. Працюємо з субматрицею 3 ×3, що утвориться, якщо з резуль-

туючого добутку видалити перший рядок та перший стовпчик.

 

~x = 2/3

, x = 1, ~u = ~x x ~e1 =

2/3

 

, H = u 2/2 = 4/3.

−1/3

| |

 

 

 

−4/3

 

 

 

2/3

 

− | |

2/3

 

| |

Вибираємо вiд’ємний знак, бо x1 = −1/3 < 0.

.

 

 

 

 

u~T =

−8/9

4/9

4/9

 

 

 

 

 

16/9

−8/9

−8/9

 

 

 

 

 

 

−8/9

4/9

4/9

 

 

Допишемо до отриманої матрицi зверху та злiва по додатковому стовбчику:

Z(u~T ) = 0 16/9 −8/9 −8/9 .

 

1

0

0

0

 

0

−8/9

4/9

4/9

 

0

8/9

4/9

4/9

 

 

 

 

 

 

Тепер

 

Z(u~T ) =

0 −1/3 2/3 2/3

.

P2 = E

 

 

 

 

 

 

 

1

0

 

0

0

 

 

 

 

 

 

0 2/3

2/3 −1/3

 

 

H

 

 

 

 

 

 

 

 

0 2/3

1/3 2/3

 

I тому:

 

 

 

 

 

 

 

 

 

 

P2 A0 = 0 1

 

−1/2 0

= A00.

 

 

 

 

−2

−3

−5/2

−3

 

 

 

·

0

0

 

1/2

0

 

 

 

 

 

 

0

0

 

1/2

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Третiй крок. Працюємо з субматрицею 2 × 2, вiдкинувши два першi рядочки

та два першi стовбчики матрицi A00.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

~x = 1/2

, |x| = 2/2, ~u = ~x−|x|~e1 =

 

 

 

, H =

 

 

 

 

 

 

 

 

(1 +1/22)/2

4 .

1/2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 +

2

Вибираємо додатнiй знак.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

, P3 = E u~T

=

1 0

 

0

 

0

 

 

.

 

 

 

 

 

 

u~T = 3 +4

 

 

0 1

 

0

0

 

 

 

2 2

1 + 2

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 + 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

1

 

 

 

H

0 0

2/2 −2/2

 

4

 

4

 

 

 

 

 

 

0 0

 

2/2

2/2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

37

Щоб обчислити P3 до знайденої субматрицi 2 × 2 дописано два рядки зверху та два стовбчики злiва, як i в попередньому кроцi:

 

 

A00

=

−2

−3

−5/2

−3

= A000 = R.

 

 

P3

0

1

−1/2

 

0

 

 

 

·

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

− 2/2 −2/2

 

 

 

 

 

 

0

0

0

 

 

2/2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Матрицю R знайдено. Матрицю QT знайдемо як добуток QT = P3 · P2 · P1:

QT =

0

1

0

 

0

0

 

−1/3 2/3 2/3

 

 

1

0

0

 

0

 

 

 

1

0

0

0

 

 

 

 

 

 

 

 

 

 

 

 

×

 

 

0 2/3 2/3 −1/3

×

 

 

 

0 0 −2/2 −2/2

 

 

 

 

 

0 0

 

 

 

 

 

 

 

0 2/3

 

 

1/3 2/3

 

 

 

 

 

2/2

2/2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

−1/2

 

5/6

−1/6 −1/6

=

−1/2

−1/2

 

1/2

 

1/2

 

 

−1/2

−1/2

−1/2

−1/2

 

 

−1/2

−1/2

−1/2

−1/2

 

×

−1/2

−1/6 5/6 −1/6

 

 

/2

 

/2

 

0

0

 

2

2

 

 

 

1/2

 

 

1/6

 

1/6 5/6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

 

 

 

2/2

 

2/2

 

 

 

 

 

 

 

~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Система рiвнянь A · ~x = b тепер розв’язується так:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

~

R ·

 

 

T~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

QR · ~x = b

~x = Q b,

 

 

 

 

 

 

 

 

 

 

матриця R - трикутна. Визначник знаходиться аналогiчно:

n

Y det A = det Q · det R = (−1)n−1 rii.

i=1

Тут використано той факт, що i det Pi = −1.

Уточнення розв’язку. Розв’язок системи лiнiйних рiвнянь можна уточнити. Позначимо через ~x(0) отриманий розв’язок. Пiдставимо його в систему, маємо:

 

A~x

(0)

 

~(1)

.

 

 

 

= b

 

~(1)

, через похибки рiзного роду, не обов’язково буде спiвпадати

Це значення b

 

 

 

 

 

 

 

 

~

з правими частинами оригiнальної системи b. Розглянемо тепер систему

 

A ~x

(0)

 

 

~(1)

 

~

 

 

 

= b

− b,

з якої отримаємо ~x(0) i знайдемо ~x(1)

= ~x(0) + ~x(0), що буде бiльш точним

розв’язком. Процес можна продовжити до збiжностi, доки | ~x(i)| не зменшиться до бажаної точностi.

38

P
|aij|2
i,j

Оцiнка якостi розв’язку. Розглянемо двi системи рiвнянь

~

~ ~

A~x = b,

A(~x + δ~x) = b + δb.

Дiючи згiдно з означенням норми, i вiднявши вiд другої системи першу,

 

 

 

 

kδ~xk = kA−1k · kδb~k,

kAk · k~xk = k~bk.

 

 

Тому:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

kδ~xk

=

kA−1kkδb~k

 

=

kA−1kkδb~k

·

 

k~bk

 

=

kA−1kk~bk

 

 

kδb~k

.

~x

 

 

 

 

 

 

 

 

 

~

 

 

~

 

 

 

 

~x

 

 

 

 

~x

 

 

 

 

 

 

~x

·

 

 

k k

 

 

 

k k

 

 

 

 

k k

 

 

 

kbk

 

 

 

k k

kbk

Але

 

 

 

 

 

 

1

 

 

 

kAk

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

~

 

 

 

 

 

 

 

 

 

тому

 

 

 

 

 

 

 

 

k~xk

kbk

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

kA−1kk~bk

 

kδb~k

 

 

 

 

 

 

 

 

 

 

kδb~k

 

 

 

 

 

 

kδ~xk

=

 

 

=

k

A−1

k · k

A

k ·

.

 

 

 

 

 

~x

 

~

 

 

 

 

 

 

 

~x

·

 

 

 

 

 

~

 

 

 

 

 

 

 

k k

 

k

k

kbk

 

 

 

 

 

 

 

 

 

kbk

 

 

Величина kA−1k·kAk називається числом зумовленостi, цей множник показує як вiдносна похибка правих частин переходить у вiдносну похибку результату. Теоретичний мiнiмум для нього - одиниця. Чим ближче значення числа зумовленостi до одиницi, тим ”кращий“ розв’язок.

Зазвичай використовують такi норми:

 

 

 

 

векторнi

x|

 

i|

 

матричнi

Pj

|aij| .

k~xk1

=

i

x

 

kAk1

 

maxi

~x

 

max

 

 

A

= max

 

a

k k2 = Pi

 

| i|

 

 

k k2 =

j

Pi

| ij|

 

 

|xi|

2

kAk3 = r

 

k~xk3

= r i

 

 

 

 

 

 

P

 

 

 

 

 

 

 

 

Тридiагональнi матрицi. Загальний вигляд системи з такою матрицею:

a2

b2

c2

0

. . .

0

0

0

 

 

 

 

b1

c1

0 0

. . .

0

0

0

 

 

 

0

a3 b3

c3

.. .. ..

0

0

0

·

~x = ~y.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. . . an−1

bn−1

cn−1

 

 

 

 

0

0

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

0

. . .

0

an

bn

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

39

ai−1
1
an
yn
bn
xn

Для розв’язання такої системи, комбiнуючи рядочки, прибираємо елементи ai, при цьому будуть змiнюватися також елементи bi та елементи вектора yi:

binew = bi − ci−1

ai

 

yinew = yi − yi−1

ai

 

,

 

.

bi−1

bi−1

Новi значення записано злiва вiд знака рiвностi, попереднi - справа. Якщо зупинитися за два рядочки до кiнця, то залишкову систему, яка матиме вигляд

b0 c0 x y0

n−1 n−1 · n1 = n−1 ,

можна розв’язати навiть методом Крамера. Маючи два значення xi−1 та xi можна знайти xi−2:

xi−2 = (yi0−1 − b0i−1xi−1 − c0i−1xi) .

Скориставшись цим рiвнянням для i −2, i −3, . . . , 1 знайдемо усi невiдомi xi. Цей спосiб називається методом прогонки.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

~

 

 

 

Блочнi матрицi. Деколи систему рiвнянь A~x = b можна розбити на блоки,

чи клiтинки:

 

A21

A22

· X2

= B2

.

 

 

 

 

 

 

A11

A12

 

 

 

 

X1

 

 

 

B1

 

 

У виглядi системи матричних рiвнянь:

 

= B2 .

 

 

 

 

A21X1

+ A22X2

 

 

 

 

 

 

A11X1

+ A12X2

= B1

 

 

 

Домножимо друге рiвняння на A12A22−1:

 

 

 

 

 

 

 

 

 

A12A22−1A21X1 + A12X2 = A12A22−1B2,

 

i вiднiмемо його вiд першого:

 

 

 

 

 

 

 

 

 

 

 

 

 

(

A

11

A

12

A−1A

21)

X

1 =

 

B

1

A

12

A−1B

.

 

 

22

 

 

 

 

 

 

 

22 2

 

Звiдси формула для знаходження X1:

X1 = (B1 − A12A221B2) · (A11 − A12A221A21)−1.

Аналогiчно поступивши з першим рiвнянням: (використавши A111 та A21)

отримаємо:

X2 = (B2 − A21A111B1) · (A22 − A21A111A12)−1.

Єдиною складною задачею є знаходження A12A221, але, оскiльки розмiр цiєї матрицi менший, нiж матрицi A, це може зменшити загальну кiлькiсть обчислювальної роботи.

40

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