Jump to content

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

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

Описание

[ редактировать ]

Позволять — квадратная система n линейных уравнений, где:

Когда и известны, и неизвестно, мы можем использовать метод Гаусса – Зейделя для аппроксимации . Вектор обозначает наше первоначальное предположение для (часто для ). Обозначим через тот -е приближение или итерация и по приближение на следующем (или ) итерация.

Формула на основе матрицы

[ редактировать ]

Решение получается итерационно через где матрица разлагается на нижнюю треугольную составляющую и строго верхнетреугольная компонента такой, что . [ 4 ] Точнее, разложение в и дается:

Почему работает матричная формула

[ редактировать ]

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

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

Формула на основе элементов

[ редактировать ]

Однако, воспользовавшись треугольной формой , элементы можно вычислить последовательно для каждой строки используя прямую замену : [ 5 ]

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

Обсуждение

[ редактировать ]

Поэлементная формула метода Гаусса – Зейделя связана с формулой (итеративного) метода Якоби с важным отличием:

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

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

Гаусса-Зейделя — это то же самое, что и последовательное чрезмерное расслабление с .

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

[ редактировать ]

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

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

Голуб и Ван Лоан приводят теорему для алгоритма, который расщепляет на две части. Предполагать является неособым. Позволять быть радиусом спектральным . Затем повторяется определяется сходиться к для любого стартового вектора если является неособым и . [ 8 ]

Алгоритм

[ редактировать ]

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

algorithm Gauss–Seidel method is
    inputs: A, b
    output: φ

    Choose an initial guess φ to the solution
    repeat until convergence
        for i from 1 until n do
            σ ← 0
            for j from 1 until n do
                if ji then
                    σσ + aijφj
                end if
            end (j-loop)
            φi ← (biσ) / aii
        end (i-loop)
        check if convergence is reached
    end (repeat)

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

[ редактировать ]

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

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

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

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

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

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

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

Выбираем отправную точку:

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

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

Фактически, матрица A является строго диагонально-доминантной (но не положительно определенной).

Еще один пример для матричной версии

[ редактировать ]

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

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

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

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

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

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

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

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

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

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

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

[ редактировать ]

Предположим, что дано уравнения и отправная точка . На любом этапе итерации Гаусса-Зейделя решите первое уравнение для с точки зрения ; затем решите второе уравнение для с точки зрения только что нашел и остальное ; и продолжать . Затем повторяйте итерации до тех пор, пока (надеюсь) не сойдемся.

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

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

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

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

0.6 2.32727 −0.987273 0.878864
1.03018 2.03694 −1.01446 0.984341
1.00659 2.00356 −1.00253 0.998351
1.00086 2.0003 −1.00031 0.99985

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

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

[ редактировать ]

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

import numpy as np

ITERATION_LIMIT = 1000

# initialize the matrix
A = np.array(
    [
        [10.0, -1.0, 2.0, 0.0],
        [-1.0, 11.0, -1.0, 3.0],
        [2.0, -1.0, 10.0, -1.0],
        [0.0, 3.0, -1.0, 8.0],
    ]
)
# initialize the RHS vector
b = np.array([6.0, 25.0, -11.0, 15.0])

print("System of equations:")
for i in range(A.shape[0]):
    row = [f"{A[i,j]:3g}*x{j+1}" for j in range(A.shape[1])]
    print("[{0}] = [{1:3g}]".format(" + ".join(row), b[i]))

x = np.zeros_like(b, np.float_)
for it_count in range(1, ITERATION_LIMIT):
    x_new = np.zeros_like(x, dtype=np.float_)
    print(f"Iteration {it_count}: {x}")
    for i in range(A.shape[0]):
        s1 = np.dot(A[i, :i], x_new[:i])
        s2 = np.dot(A[i, i + 1 :], x[i + 1 :])
        x_new[i] = (b[i] - s1 - s2) / A[i, i]
    if np.allclose(x, x_new, rtol=1e-8):
        break
    x = x_new

print(f"Solution: {x}")
error = np.dot(A, x) - b
print(f"Error: {error}")

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

System of equations:
[ 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]
Iteration 1: [ 0.  0.  0.  0.]
Iteration 2: [ 0.6         2.32727273 -0.98727273  0.87886364]
Iteration 3: [ 1.03018182  2.03693802 -1.0144562   0.98434122]
Iteration 4: [ 1.00658504  2.00355502 -1.00252738  0.99835095]
Iteration 5: [ 1.00086098  2.00029825 -1.00030728  0.99984975]
Iteration 6: [ 1.00009128  2.00002134 -1.00003115  0.9999881 ]
Iteration 7: [ 1.00000836  2.00000117 -1.00000275  0.99999922]
Iteration 8: [ 1.00000067  2.00000002 -1.00000021  0.99999996]
Iteration 9: [ 1.00000004  1.99999999 -1.00000001  1.        ]
Iteration 10: [ 1.  2. -1.  1.]
Solution: [ 1.  2. -1.  1.]
Error: [  2.06480930e-08  -1.25551054e-08   3.61417563e-11   0.00000000e+00]

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

[ редактировать ]

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

function x = gauss_seidel(A, b, x, iters)
    for i = 1:iters
        for j = 1:size(A,1)
            x(j) = (b(j) - sum(A(j,:)'.*x) + A(j,j)*x(j)) / A(j,j);
        end
    end
end

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Зауэр, Тимоти (2006). Численный анализ (2-е изд.). Pearson Education, Inc. с. 109. ИСБН  978-0-321-78367-7 .
  2. ^ Гаусс 1903 , с. 279; прямая ссылка .
  3. ^ Зайдель, Людвиг (1874). «О процессе решения последовательным приближением уравнений, к которым приводит метод наименьших квадратов, а также линейных уравнений вообще». Трактаты математическо-физического класса Королевской Баварской академии наук (на немецком языке). 11 (3): 81–108.
  4. ^ Голуб и Ван Лоан 1996 , с. 511.
  5. ^ Голуб и Ван Лоан 1996 , уравнение (10.1.3)
  6. ^ Голуб и Ван Лоан 1996 , Thm 10.1.2.
  7. ^ Баньяра, Роберто (март 1995 г.). «Единое доказательство сходимости методов Якоби и Гаусса-Зейделя». Обзор СИАМ . 37 (1): 93–97. CiteSeerX   10.1.1.26.5207 . дои : 10.1137/1037008 . JSTOR   2132758 .
  8. ^ Голуб и Ван Лоан 1996 , Thm 10.1.2

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


[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2307def38d8cabd93b3bd8d045cd6110__1719956280
URL1:https://arc.ask3.ru/arc/aa/23/10/2307def38d8cabd93b3bd8d045cd6110.html
Заголовок, (Title) документа по адресу, URL1:
Gauss–Seidel method - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)