Jacobi Metodu

Python 3 ve Numpy kullanılarak yapılmış bir örnek

Aşağıdaki sayısal işlem çözüm vektörü oluşturmak için yinelenir.
import numpy as npITERATION_LIMIT = 1000# initialize the matrixA = np.array([[10., -1., 2., 0.],
              [-1., 11., -1., 3.],
              [2., -1., 10., -1.],
              [0.0, 3., -1., 8.]])# initialize the RHS vectorb = np.array([6., 25., -11., 15.])# prints the systemprint("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):
    print("Current solution:", 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 np.allclose(x, x_new, rtol=1e-10):
        break

    x = x_newprint("Solution:")print(x)error = np.dot(A, x) - bprint("Error:")print(error)
Aşağıdaki çıktıyı üretir:
System:10.0*x1 + -1.0*x2 + 2.0*x3 + 0.0*x4 = 6.0-1.0*x1 + 11.0*x2 + -1.0*x3 + 3.0*x4 = 25.02.0*x1 + -1.0*x2 + 10.0*x3 + -1.0*x4 = -11.00.0*x1 + 3.0*x2 + -1.0*x3 + 8.0*x4 = 15.0Current solution: [ 0.  0.  0.  0.]Current solution: [ 0.6         2.27272727 -1.1         1.875     ]Current solution: [ 1.04727273  1.71590909 -0.80522727  0.88522727]Current solution: [ 0.93263636  2.05330579 -1.04934091  1.13088068]Current solution: [ 1.01519876  1.95369576 -0.96810863  0.97384272]Current solution: [ 0.9889913   2.01141473 -1.0102859   1.02135051]Current solution: [ 1.00319865  1.99224126 -0.99452174  0.99443374]Current solution: [ 0.99812847  2.00230688 -1.00197223  1.00359431]Current solution: [ 1.00062513  1.9986703  -0.99903558  0.99888839]Current solution: [ 0.99967415  2.00044767 -1.00036916  1.00061919]Current solution: [ 1.0001186   1.99976795 -0.99982814  0.99978598]Current solution: [ 0.99994242  2.00008477 -1.00006833  1.0001085 ]Current solution: [ 1.00002214  1.99995896 -0.99996916  0.99995967]Current solution: [ 0.99998973  2.00001582 -1.00001257  1.00001924]Current solution: [ 1.00000409  1.99999268 -0.99999444  0.9999925 ]Current solution: [ 0.99999816  2.00000292 -1.0000023   1.00000344]Current solution: [ 1.00000075  1.99999868 -0.99999899  0.99999862]Current solution: [ 0.99999967  2.00000054 -1.00000042  1.00000062]Current solution: [ 1.00000014  1.99999976 -0.99999982  0.99999975]Current solution: [ 0.99999994  2.0000001  -1.00000008  1.00000011]Current solution: [ 1.00000003  1.99999996 -0.99999997  0.99999995]Current solution: [ 0.99999999  2.00000002 -1.00000001  1.00000002]Current solution: [ 1.          1.99999999 -0.99999999  0.99999999]Current solution: [ 1.  2. -1.  1.]Solution:[ 1.  2. -1.  1.]Error:[ -2.81440107e-08   5.15706873e-08  -3.63466359e-08   4.17092547e-08]

Ağırlıklı Jacobi yöntemi

Ağırlıklı Jacobi yinelemesi : yinelemesini olağan seçenek olan  ile hesaplarkenw parametresini kullanır.

Son gelişmeler

2014 yılında planlanmış relaksasyon Jacobi yöntemi adıyla anılan bir algoritma düzeltmesi yayımlandı. Bu yeni yöntem bir üst ve alt relaksasyon programı kullanır ve büyük iki ve üç boyutlu Kartezyen örgülerle ayrıştırılmış eliptik denklemlerin çözümünde iki yüz kat performans artışı sağlar.