Метод Якоби - Jacobi method

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

Описание

Позволять

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

Тогда A можно разложить на диагональный компонент D , нижнюю треугольную часть L и верхнюю треугольную часть U :

Затем решение итеративно получается через

где - k- е приближение или итерация, а - следующая или k + 1 итерация . Таким образом, формула на основе элементов:

Для вычисления требуется каждый элемент в x ( k ), кроме самого себя. В отличие от метода Гаусса-Зейделя , мы не можем переписать с , так как это значение будет необходимо в остальной части вычисления. Минимальный объем памяти - два вектора размера n .

Алгоритм

Input: initial guess  to the solution, (diagonal dominant) matrix , right-hand side vector , convergence criterion
Output: solution when convergence is reached
Comments: pseudocode based on the element-based formula above


while convergence not reached do
    for i := 1 step until n do
        
        for j := 1 step until n do
            if j ≠ i then
                
            end
        end
        
    end
    
end

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

Стандартное условие сходимости (для любого итерационного метода) - это когда спектральный радиус итерационной матрицы меньше 1:

Достаточным (но не необходимым) условием сходимости метода является то, что матрица A строго или неприводимо диагонально доминантна . Строгое диагональное преобладание строки означает, что для каждой строки абсолютное значение диагонального члена больше, чем сумма абсолютных значений других членов:

Метод Якоби иногда сходится, даже если эти условия не выполняются.

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

Примеры

Пример 1

Линейная система вида с начальной оценкой дается формулой

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

мы определяем как

Далее находится как

Имея и рассчитав, мы оцениваем как :

Следующая итерация дает

Этот процесс повторяется до схождения (т. Е. До тех пор, пока не станет маленьким). Решение после 25 итераций:

Пример 2

Предположим, нам дана следующая линейная система:

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

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

0,6 2,27272 -1,1 1,875
1,04727 1,7159 -0,80522 0,88522
0,93263 2,05330 -1,0493 1,13088
1.01519 1,95369 -0,9681 0,97384
0,98899 2,0114 -1,0102 1,02135

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

Пример Python

import numpy as np

ITERATION_LIMIT = 1000

# initialize the matrix
A = np.array([[10., -1., 2., 0.],
              [-1., 11., -1., 3.],
              [2., -1., 10., -1.],
              [0.0, 3., -1., 8.]])
# initialize the RHS vector
b = np.array([6., 25., -11., 15.])

# prints the system
print("System:")
for i in range(A.shape[0]):
    row = ["{}*x{}".format(A[i, j], j + 1) for j in range(A.shape[1])]
    print(" + ".join(row), "=", b[i])
print()

x = np.zeros_like(b)
for it_count in range(ITERATION_LIMIT):
    if it_count != 0:
        print("Iteration {0}: {1}".format(it_count, x))
    x_new = np.zeros_like(x)

    for i in range(A.shape[0]):
        s1 = np.dot(A[i, :i], x[:i])
        s2 = np.dot(A[i, i + 1:], x[i + 1:])
        x_new[i] = (b[i] - s1 - s2) / A[i, i]
        if x_new[i] == x_new[i-1]:
          break

    if np.allclose(x, x_new, atol=1e-10, rtol=0.):
        break

    x = x_new

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

Весовой метод Якоби

Взвешенная итерация Якоби использует параметр для вычисления итерации как

с обычным выбором. Из отношения это также может быть выражено как

.

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

В случае, если матрица системы имеет симметричный положительно определенный тип, можно показать сходимость.

Позвольте быть итерационной матрицей. Тогда сходимость гарантирована для

где - максимальное собственное значение.

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

где - номер обусловленности матрицы .

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

использованная литература

внешние ссылки

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