WikiDer > Метод Гаусса – Зейделя

Gauss–Seidel method

В числовая линейная алгебра, то Метод Гаусса – Зейделя, также известный как Метод Либмана или метод последовательного вытеснения, является итерационный метод используется для решения система линейных уравнений. Он назван в честь Немецкий математики Карл Фридрих Гаусс и Филипп Людвиг фон Зайдель, и аналогичен Метод Якоби. Хотя его можно применить к любой матрице с ненулевыми элементами на диагоналях, сходимость гарантируется только в том случае, если матрица либо строго по диагонали,[1] или же симметричный и положительно определенный. Об этом упоминалось только в частном письме Гаусса своему ученику. Герлинг в 1823 г.[2] До 1874 года Зайдель не выпустил ни одной публикации.

Описание

Метод Гаусса – Зейделя представляет собой итерационная техника для решения квадратной системы п линейные уравнения с неизвестными Икс:

.

Он определяется итерацией

куда это kое приближение или итерация следующий или k + 1 итерация , а матрица А раскладывается на нижний треугольный компонент , а строго верхнетреугольный компонент U: .[3]

Более подробно выпишите А, Икс и б в их составных частях:

Тогда разложение А в его нижнюю треугольную составляющую и строго верхнюю треугольную составляющую:

Систему линейных уравнений можно переписать как:

Теперь метод Гаусса – Зейделя решает левую часть этого выражения для Икс, используя предыдущее значение для Икс с правой стороны. Аналитически это можно записать как:

Однако, пользуясь преимуществом треугольной формы , элементы Икс(k+1) можно вычислить последовательно, используя прямая замена:

[4]

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

Обсуждение

Поэлементная формула метода Гаусса – Зейделя чрезвычайно похожа на формулу метода Метод Якоби.

Расчет Икс(k+1) использует элементы Икс(k+1) которые уже были вычислены, и только элементы Икс(k) которые не были вычислены в итерации k + 1. Это означает, что, в отличие от метода Якоби, требуется только один вектор хранения, поскольку элементы могут быть перезаписаны по мере их вычисления, что может быть выгодно для очень больших задач.

Однако, в отличие от метода Якоби, вычисления для каждого элемента не могут быть выполнены в параллельно. Кроме того, значения на каждой итерации зависят от порядка исходных уравнений.

Гаусс-Зайдель такой же, как SOR (последовательное чрезмерное расслабление) с .

Конвергенция

Свойства сходимости метода Гаусса – Зейделя зависят от матрицы А. А именно, известно, что процедура сходится, если:

Метод Гаусса – Зейделя иногда сходится, даже если эти условия не выполняются.

Алгоритм

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

Входы: А, бВыход: Выберите первоначальное предположение  к решениюповторение до схождения за я из 1 до того как п делать                за j из 1 до того как п делать            если jя тогда                            конец, если        конец (j-петля)     конец (я-loop) проверить, достигнута ли сходимостьконец (повторение)

Примеры

Пример для матричной версии

Линейная система, показанная как дан кем-то:

и

Мы хотим использовать уравнение

в виде

куда:

и

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

и

Обратное является:

.

Теперь мы можем найти:

Теперь у нас есть и и мы можем использовать их для получения векторов итеративно.

Прежде всего, мы должны выбрать : мы можем только догадываться. Чем точнее предположение, тем быстрее будет работать алгоритм.

Мы предполагаем:

Затем мы можем вычислить:

Как и ожидалось, алгоритм сходится к точному решению:

На самом деле матрица A строго диагонально доминирует (но не положительно определена).

Другой пример для матричной версии

Другая линейная система, обозначенная как дан кем-то:

и

Мы хотим использовать уравнение

в виде

куда:

и

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

и

Обратное является:

.

Теперь мы можем найти:

Теперь у нас есть и и мы можем использовать их для получения векторов итеративно.

Прежде всего, мы должны выбрать : мы можем только догадываться. Чем точнее предположение, тем быстрее будет выполнен алгоритм.

Мы предполагаем:

Затем мы можем вычислить:

Если мы проверим сходимость, мы обнаружим, что алгоритм расходится. На самом деле матрица A не является ни диагонально доминирующей, ни положительно определенной. Тогда сходимость к точному решению

не гарантируется и в этом случае не произойдет.

Пример для версии уравнения

Предположим, что k уравнения, где Иксп - векторы этих уравнений и отправная точка Икс0. Из первого уравнения решите для Икс1 с точки зрения Для следующих уравнений подставьте предыдущие значенияИксс.

Чтобы было понятно, рассмотрим пример.

Решение для и дает:

Предположим, мы выбираем (0, 0, 0, 0) в качестве начального приближения первое приближенное решение дается выражением

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

Точное решение системы (1, 2, −1, 1).

Пример использования Python и NumPy

Следующая численная процедура просто выполняет итерацию для получения вектора решения.

импорт тупой в качестве нпITERATION_LIMIT = 1000# инициализируем матрицуА = нп.множество([[10., -1., 2., 0.],              [-1., 11., -1., 3.],              [2., -1., 10., -1.],              [0., 3., -1., 8.]])# инициализировать вектор RHSб = нп.множество([6.0, 25.0, -11.0, 15.0])Распечатать(«Система уравнений:»)за я в классифицировать(А.форма[0]):    ряд = ["{0: 3g}*Икс{1}".формат(А[я, j], j + 1) за j в классифицировать(А.форма[1])]    Распечатать("[{0}] = [{1: 3g}]".формат(" + ".присоединиться(ряд), б[я]))Икс = нп.zeros_like(б)за it_count в классифицировать(1, ITERATION_LIMIT):    x_new = нп.zeros_like(Икс)    Распечатать("Итерация {0}: {1}".формат(it_count, Икс))    за я в классифицировать(А.форма[0]):        s1 = нп.точка(А[я, :я], x_new[:я])        s2 = нп.точка(А[я, я + 1 :], Икс[я + 1 :])        x_new[я] = (б[я] - s1 - s2) / А[я, я]    если нп.всезакрыть(Икс, x_new, rtol=1e-8):        перемена    Икс = x_newРаспечатать("Решение: {0}".формат(Икс))ошибка = нп.точка(А, Икс) - бРаспечатать("Ошибка: {0}".формат(ошибка))

Производит вывод:

Система из уравнения:[ 10*x1 +  -1*x2 +   2*x3 +   0*x4] = [  6][ -1*x1 +  11*x2 +  -1*x3 +   3*x4] = [ 25][  2*x1 +  -1*x2 +  10*x3 +  -1*x4] = [-11][  0*x1 +   3*x2 +  -1*x3 +   8*x4] = [ 15]Итерация 1: [ 0.  0.  0.  0.]Итерация 2: [ 0.6         2.32727273 -0.98727273  0.87886364]Итерация 3: [ 1.03018182  2.03693802 -1.0144562   0.98434122]Итерация 4: [ 1.00658504  2.00355502 -1.00252738  0.99835095]Итерация 5: [ 1.00086098  2.00029825 -1.00030728  0.99984975]Итерация 6: [ 1.00009128  2.00002134 -1.00003115  0.9999881 ]Итерация 7: [ 1.00000836  2.00000117 -1.00000275  0.99999922]Итерация 8: [ 1.00000067  2.00000002 -1.00000021  0.99999996]Итерация 9: [ 1.00000004  1.99999999 -1.00000001  1.        ]Итерация 10: [ 1.  2. -1.  1.]Решение: [ 1.  2. -1.  1.]Ошибка: [  2.06480930e-08  -1.25551054e-08   3.61417563e-11   0,00000000e + 00]

Программы для решения произвольной нет. уравнений с помощью Matlab

В следующем коде используется формула

функцияИкс =gauss_seidel(А, б, х, итерс)за я = 1:iters        за j = 1:размер(А,1)            Икс(j) = (1/А(j,j)) * (б(j) - А(j,:)*Икс + А(j,j)*Икс(j));        конец    конецконец

Смотрите также

Примечания

  1. ^ Зауэр, Тимоти (2006). Числовой анализ (2-е изд.). Pearson Education, Inc. стр. 109. ISBN 978-0-321-78367-7.
  2. ^ Гаусс 1903, п. 279; Прямая ссылка.
  3. ^ Голуб и Ван Лоан 1996, п. 511.
  4. ^ Голуб и Ван Лоан 1996, уравнение (10.1.3).
  5. ^ Голуб и Ван Лоан 1996, Thm 10.1.2.
  6. ^ Багнара, Роберто (март 1995). «Единое доказательство сходимости методов Якоби и Гаусса-Зейделя». SIAM Обзор. 37 (1): 93–97. Дои:10.1137/1037008. JSTOR 2132758.

Рекомендации

Эта статья включает текст из статьи Gauss-Seidel_method на CFD-Wiki что находится под GFDL лицензия.


внешняя ссылка