روش ژاکوبی

روش ژاکوبی یک روش تکراری در حل دستگاه معادلات خطی است که در جبر خطی مورد بحث قرار می‌گیرد.
معرفی کلی
در یک دستگاه مربعی با n معادله خطی:
که:
اگر ماتریس A را به دو ماتریس به شکل زیر تفکیک کنیم:
از روش تکرار جواب را می‌توان به شکل زیر یافت:
اگر این فرمول را بر اساس المانهایش مرتبط کنیم به این صورت در خواهد آمد:
الگوریتم
حدس اولیه:
تا وقتی که همگرا نشده:
for i := 1 step until n do
for j := 1 step until n do
if j ≠ i then
end if
پایان حلقه j
end (i-loop)
بررسی همگرایی
همگرایی
در روش ژاکوبی گاهی علی‌رغم اینکه شرایط همگرایی برقرار نباشد، جواب همگرا می‌شود.
چند مثال
مثال۱
در با داشتن مقدار اولیه (حدس اولیه)، جواب را بدست می‌آوریم.
A=
\begin{bmatrix
2 - 1 \\
5 - 7 \\
\end{bmatrix,
\ b=
\begin{bmatrix
11 \\
13 \\
\end{bmatrix
\quad \text{and \quad x^{(0) =
\begin{bmatrix
1 \\
1 \\
\end{bmatrix .
با استفاده از رابطه ، که در بالا توضیح داده شد، به تخمین می‌پردازیم تا جواب بدست آید.
با بازنویسی رابطه اخیر به فرم ساده‌تر ،که در آن و .
توجه کنید که که و به ترتیب قسمت پایینی و بالایی هستند.
با استفاده از مقادیر داده شده:
D^{-1=
\begin{bmatrix
1/2 - 0 \\
0 - 1/7 \\
\end{bmatrix,
\ L=
\begin{bmatrix
0 - 0 \\
5 - 0 \\
\end{bmatrix
\quad \text{and \quad U =
\begin{bmatrix
0 - 1 \\
0 - 0 \\
\end{bmatrix .
we determine as
T=
\begin{bmatrix
1/2 - 0 \\
0 - 1/7 \\
\end{bmatrix
\left\{
\begin{bmatrix
0 - 0 \\
-5 - 0 \\
\end{bmatrix
\begin{bmatrix
0 - -1 \\
0 - 0 \\
\end{bmatrix\right\
\begin{bmatrix
0 - -1/2 \\
-5/7 - 0 \\
\end{bmatrix .
Further, C is found as
C =
\begin{bmatrix
1/2 - 0 \\
0 - 1/7 \\
\end{bmatrix
\begin{bmatrix
11 \\
13 \\
\end{bmatrix
\begin{bmatrix
11/2 \\
13/7 \\
\end{bmatrix.
With T and C calculated, we estimate as :
x^{(1)=
\begin{bmatrix
0 - -1/2 \\
-5/7 - 0 \\
\end{bmatrix
\begin{bmatrix
1 \\
1 \\
\end{bmatrix
\begin{bmatrix
11/2 \\
13/7 \\
\end{bmatrix
\begin{bmatrix
5.0 \\
8/7 \\
\end{bmatrix
\approx
\begin{bmatrix
5 \\
1.143 \\
\end{bmatrix .
با تکرار بعدی داریم:
x^{(2)=
\begin{bmatrix
0 - -1/2 \\
-5/7 - 0 \\
\end{bmatrix
\begin{bmatrix
5.0 \\
8/7 \\
\end{bmatrix
\begin{bmatrix
11/2 \\
13/7 \\
\end{bmatrix
\begin{bmatrix
69/14 \\
-12/7 \\
\end{bmatrix
\approx
\begin{bmatrix
4.929 \\
-1.714 \\
\end{bmatrix .
این فرایند تا جایی که همگرایی مشهود باشد تکرار می‌شود. (به عبارت دقیق‌تر کوچک باشد).
جواب پس از ۲۵ بار تکرار خواهد بود:
x=\begin{bmatrix
7.111\\
-3.222
\end{bmatrix
مثال۲
فرض کنید معادلات زیر را بخواهیم حل کنیم:
\begin{align
10x_1 - x_2 + 2x_3 - = 6, \\
-x_1 + 11x_2 - x_3 + 3x_4 - = 25, \\
2x_1- x_2+ 10x_3 - x_4 - = -11, \\
3x_2 - x_3 + 8x_4 - = 15.
\end{align
با انتخاب (0, 0, 0, 0) به عنوان تقریب اولیه:
\begin{align
x_1 - = (6 - 0 - 0) / 10 = 0.6, \\
x_2 - = (25 - 0 - 0) / 11 = 25/11 = 2.2727 \\
x_3 - = (-11 - 0 - 0) / 10 = -1.1,\\
x_4 - = (15 - 0 - 0) / 8 = 1.875.
\end{align
پاسخ‌ها پس از ۵ بار تکرار در جدول زیر آورده شده است:
جواب دقیق (1, 2, −1, 1) است.
حل مثال در پایتون
import numpy as np
ITERATION_LIMIT = 1000
initialize the matrix
A = np.array( ,
initialize the RHS vector
b = np.array( )
prints the system
print("System:")
for i in range(A.shape0):
row =
print(" + ".join(row), "=", bi)
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.shape0):
s1 = np.dot(A , x )
s2 = np.dot(A , x )
x_newi = (bi - s1 - s2) / Ai, i
if np.allclose(x, x_new, rtol=1e-10):
break
x = x_new
print("Solution:")
print(x)
error = np.dot(A, x) - b
print("Error:")
print(error)
خروجی به این شکل خواهد بود:
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.0
2.0*x1 + -1.0*x2 + 10.0*x3 + -1.0*x4 = -11.0
0.0*x1 + 3.0*x2 + -1.0*x3 + 8.0*x4 = 15.0
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Current solution:
Solution:
Error:
روش گاوس سیدل