Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория / 2 / 06-SLAY.DOC
Скачиваний:
81
Добавлен:
30.04.2013
Размер:
440.32 Кб
Скачать

Метод Гаусса-Зейделя

Этот метод является модификацией метода простой итерации. Стратегия этого метода отличается тем, что при расчете элементов вектора наряду с элементами предыдущего приближенияучитываются также и элементы, которые уже определены на данной итерации. Расчетная формула метода

Пример. Решить ту же СЛАУ методом Гаусса-Зейделя.

x1 = -0.1111*x2 - 0.3333*x3 +2.2222 = -0.1111*3.0000 - 0.3333*4.2000+2.2222 = 0.4889

x2 = -0.1428*x1 - 0.2857*x3 + 3.000 = -0.1428*0.4889 - 0.2857*4.2000 + 3.0000 = 1.7302

x3 = -0.4000*x1 - 0.4000*x2 + 4.200 = -0.4000*0.4889 - 0.4000*1.7302 + 4.2000 = 3.3124

Остальные итерации выполняются аналогично:

Итерация

х1

х2

х3

Норма

2

0.9258

1.9213

3.0611

0.5391

3

0.9884

1.9842

3.0110

0.1018

Обычно метод Зейделя дает лучшую сходимость, чем метод простой итерации, но он приводит к более громоздким вычислениям. Процесс Зейделя может сходиться даже в том случае, если расходится процесс итерации. Однако это бывает не всегда. Возможны случаи, когда процесс Зейделя сходится медленнее процесса итерации. Более того, могут быть случаи, когда процесс итерации сходится, а процесс Зейделя расходится.

Уточнение решения

Полученные решения могут содержать погрешности, вызванные округлениями при выполнении операций над числами с плавающей точкой на ЭВМ с ограниченным числом разрядов. В ряде случаев эти погрешности могут быть значительными, и необходимо найти способ их уменьшения.

Пусть имеется система уравнений

a11x1 + a12x2 + … + a1nxn = b1

a21x1 + a22x2 + … + a2nxn = b2

… … … … …

an1x1 + an2x2 + … + annxn = bn

и с помощью некоторого метода вычислены приближенные значения неизвестных:

x1(0) , x2(0) , … , xn(0) .

Подставляя эти решения в левые части исходной системы получаем некоторые значения bi(0), отличные от bi (i=1, 2, … , n):

a11x1(0) + a12x2(0) + … + a1nxn(0) = b1(0)

a21x1(0) + a22x2(0) + … + a2nxn(0) = b2(0)

… … … … …

an1x1(0) + an2x2(0) + … + annxn(0) = bn(0)

Введем обозначения:

Dxi(0) - погрешности значений неизвестных, т.е. Dx i(0) = xi - xi(0) и

Dbi(0) - невязки, т.е. Db i(0) = bi - bi(0) .

Тогда, вычитая из исходной системы уравнений вторую, с учетом введенных обозначений легко получить:

a11Dx 1(0) + a12Dx 2(0) + … + a1nDx n(0) = Db 1(0)

a21Dx 1(0) + a22Dx 2(0) + … + a2nDx n(0) = Db 2(0)

… … … … …

an1Dx 1(0) + an2Dx 2(0) + … + annDx n(0) = Db n(0)

Решая эту систему, находим значения погрешностей Dx i(0), которые можно использовать в качестве поправок к решению. Следующие приближения неизвестных имеют вид:

x1(1) = x1(0) + Dx 1(0)

x2(1) = x2(0) + Dx 2(0)

… … …

xn(1) = xn(0) + Dx n(0)

Таким же способом можно найти новые поправки к решению Dx i(1) и следующие приближения неизвестных xi(2) = xi(1) + Dx i(1) и т.д. Процесс продолжается до тех пор, пока все очередные значения погрешностей (поправок) Dx i не станут достаточно малыми.

Можно заметить, что этот процесс фактически представляет собой итерационный метод решения системы линейных уравнений. При этом на каждой итерации решается система уравнений с одной и той же матрицей, являющейся матрицей исходной системы, но при разных правых частях.

Пример. Пусть при решении СЛАУ

10х1 - 7х2 = 7

-3х1 + 2.099х2 + 6х3 = 3.901

1 - х2 + 5х3 = 6

были найдены решения х1 = -1, х2 = 2, х3 = 0. Уточнить найденное решение.

Подставляем найденные значения в левые части системы:

10*(-1) - 7*2 = -24

-3*(-1) + 2.099*2 + 6*0 = 7.198

5*(-1) - 2 + 5*0 = -7

Тогда вектор невязок равен

Db1(0) = b1 - b1(0) .= 7 - (-24) = 31

Db 2(0) = b2 - b2(0) .= 3.901 - 7.198 = - 3.297

Db 3(0) = b3 - b3(0) .= 6 - (-7) = 13 .

Значит необходимо решить систему:

10Dх1 - 7Dх2 = 31

-3Dх1 + 2.099Dх2 + 6Dх3 = -3.297

5Dх1 - Dх2 + 5Dх3 = 13

После ее решения (используя выбор главного элемента), получаем

3 = 1

2 =-3

1 = 1

Тогда

x1(1) = x1(0) + Dx 1(0) = -1 + 1 = 0

x2(1) = x2(0) + Dx 2(0) = 2 + (-3) = -1

x3(1) = x3(0) + Dx 3(0) = 0 + 1 = 1

Таким образом, после первой же итерации уточнения, было найдено точное решение.

Соседние файлы в папке 2