בעיות לינאריות בדרך כלל קלות יותר לפתרון מאשר בעיות לא לינאריות. ניתן לגשת לבעיות אלו בצורה אנליטית, ואז הפתרון תלוי בדיוק המחשב, או בצורה נומרית, ואז הפתרון תלוי במידת התכנסות השיטה וגם בדיוק המחשב. השיטות הנומריות בדרך כלל מהירות יותר מהשיטות האנליטיות (אחרת לא היו משתמשים בהן).
מאחר ואנו מתעניינים בבעיות בעלות פתרון (יחיד), נתקל במטריצות ריבועיות בלבד, אשר מקיימות
|
A
|
=
det
(
A
)
≠
0
{\displaystyle |A|=\det(A)\neq 0}
. לשם נוחות, נציג את אופני הכתיבה השונים של מערכת משוואות לינאריות:
{
a
11
x
1
+
a
12
x
2
+
⋯
+
a
1
n
x
n
=
b
1
a
21
x
1
+
a
22
x
2
+
⋯
+
a
2
n
x
n
=
b
2
⋮
⋮
a
n
1
x
1
+
a
n
2
x
2
+
⋯
+
a
n
n
x
n
=
b
n
⇒
[
a
11
a
12
⋯
a
1
n
a
21
a
22
⋯
a
2
n
⋮
⋮
⋱
⋮
a
n
1
a
n
2
⋯
a
n
n
]
⏞
A
_
{
x
1
x
2
⋮
x
n
}
⏞
x
_
=
{
b
1
b
2
⋮
b
n
}
⏞
b
_
{\displaystyle \left\{{\begin{array}{rcrcccrcl}a_{11}x_{1}&+&a_{12}x_{2}&+&\cdots &+&a_{1n}x_{n}&=&b_{1}\\a_{21}x_{1}&+&a_{22}x_{2}&+&\cdots &+&a_{2n}x_{n}&=&b_{2}\\&&&\vdots &&&&&\vdots \\a_{n1}x_{1}&+&a_{n2}x_{2}&+&\cdots &+&a_{nn}x_{n}&=&b_{n}\end{array}}\right.\quad \Rightarrow \quad \overbrace {\begin{bmatrix}a_{11}&a_{12}&\cdots &a_{1n}\\a_{21}&a_{22}&\cdots &a_{2n}\\\vdots &\vdots &\ddots &\vdots \\a_{n1}&a_{n2}&\cdots &a_{nn}\end{bmatrix}} ^{\underline {A}}\overbrace {\begin{Bmatrix}x_{1}\\x_{2}\\\vdots \\x_{n}\end{Bmatrix}} ^{\underline {x}}=\overbrace {\begin{Bmatrix}b_{1}\\b_{2}\\\vdots \\b_{n}\end{Bmatrix}} ^{\underline {b}}}
(
A
_
)
i
j
=
a
i
j
;
A
_
⋅
x
_
=
b
_
;
∑
j
=
1
n
a
i
j
x
j
=
b
i
{\displaystyle \ ({\underline {A}})_{ij}=a_{ij}\quad ;\quad {\underline {A}}\cdot {\underline {x}}={\underline {b}}\quad ;\quad \sum _{j=1}^{n}a_{ij}x_{j}=b_{i}}
בשיטות האנליטיות מבצעים פעולות שורה אלמנטריות על המטריצה לקבל הפתרון הרצוי, אשר תלוי בדיוק המחשב עליו מתבצע החישוב. נקודת התורפה המרכזית של השיטות האנליטיות היא גודל המערכת המירבי בו ניתן לטפל.
בשיטת גאוס (הנקראת גם "שיטת הדרוג" או "שיטת החילוץ") מדרגים את המטריצה המורחבת [A|b] ובסוף מציבים לאחור. עבור מטריצה מסדר n יידרשו
n
3
3
+
n
2
−
n
3
{\displaystyle \ {n^{3} \over 3}+n^{2}-{n \over 3}}
פעולות.
עבור מטריצה מסדר n יידרשו
n
3
2
+
n
2
−
n
2
{\displaystyle \ {n^{3} \over 2}+n^{2}-{n \over 2}}
פעולות.
מאלגברה לינארית ידוע, כי כל מטרציה שניתן להביא אותה לצורה משולשת-עליונה על ידי פעולות שורה אלמנטריות, ניתן ליצג באמצעות מכפלת מטריצה תחתונה (L) במטריצה עליונה (U). נדגים זאת באמצעות מטריצה מסדר 3:
[
a
11
a
12
a
13
a
21
a
22
a
23
a
31
a
32
a
33
]
⏞
A
_
=
[
l
11
0
0
l
12
l
22
0
l
13
l
23
l
33
]
⏞
L
_
[
1
u
12
u
13
0
1
u
23
0
0
1
]
⏞
U
_
{\displaystyle \overbrace {\begin{bmatrix}a_{11}&a_{12}&a_{13}\\a_{21}&a_{22}&a_{23}\\a_{31}&a_{32}&a_{33}\\\end{bmatrix}} ^{\underline {A}}=\overbrace {\begin{bmatrix}l_{11}&0&0\\l_{12}&l_{22}&0\\l_{13}&l_{23}&l_{33}\\\end{bmatrix}} ^{\underline {L}}\overbrace {\begin{bmatrix}1&u_{12}&u_{13}\\0&1&u_{23}\\0&0&1\\\end{bmatrix}} ^{\underline {U}}}
כעת ניתן למצוא את המקדמים lij , uij כתלות ב-aij . אחרי שמצויות בידינו שתי המטריצות L,U ניתן לפתור בקלות יחסית מערכת משוואות מהצורה Ax=B:
A
x
=
L
U
x
=
⏞
U
x
=
y
L
y
=
B
{\displaystyle \ Ax=LUx\overbrace {=} ^{Ux=y}Ly=B}
מאחר ו-L משושלת תחתונה, ניתן למצוא את y ללא קושי, ואז נשאר לפתור Ux=y, מה שגם מתאפשר בקלות מכיוון ש-U משולשת עליונה.
על מנת לפתור מערכת משוואות מהצורה Ax=B נוכל למצוא את המטריצה ההופכית של A ולבצע מכפלת מטריצות: x=A-1 B. בדרך כלל לא נשתמש בשיטה זו כי הביטוי האנליטי למטריצה הופכית מערב מציאת קופקטורים (זהו למעשה ה-Adjoint). נציג את הביטוי בכל זאת:
A
−
1
=
1
|
A
|
(
C
i
j
)
T
=
1
|
A
|
(
C
11
C
21
⋯
C
j
1
C
12
⋱
C
j
2
⋮
⋱
⋮
C
1
i
⋯
⋯
C
j
i
)
{\displaystyle A^{-1}={1 \over {\begin{vmatrix}A\end{vmatrix}}}\left(C_{ij}\right)^{T}={1 \over {\begin{vmatrix}A\end{vmatrix}}}{\begin{pmatrix}C_{11}&C_{21}&\cdots &C_{j1}\\C_{12}&\ddots &&C_{j2}\\\vdots &&\ddots &\vdots \\C_{1i}&\cdots &\cdots &C_{ji}\\\end{pmatrix}}}
כאשר Cij הם הקופקטורים של המטריצה A, אשר מתקבלים כזכור, על ידי חישוב מינורי המטריצה A.
שיטה אחרת:
בהינתן מערכת מסדר n, נפתור את n הבעיות
A
_
⋅
x
_
i
=
e
_
i
{\displaystyle \ {\underline {A}}\cdot {\underline {x}}_{i}={\underline {e}}_{i}}
, כאשר
e
_
i
{\displaystyle \ {\underline {e}}_{i}}
הם וקטורי הבסיס הסטנדרטי. לשם פתרון n הבעיות הללו ניתן להעזר בשיטות המופיעות בדף זה.
פתרון מערכת תלת-אלכסונית
עריכה
פתרון מערכת תלת-אלכסונית מתבצע באמצעות אלגוריתם הנקרא TDMA (Tridiagonal matrix algorithm), או אלגוריתם תומס.
[
b
1
c
1
0
a
2
b
2
c
2
a
3
b
3
⋱
⋱
⋱
c
N
−
1
0
a
N
b
N
]
{
x
1
x
2
⋅
⋅
x
N
}
=
{
d
1
d
2
⋅
⋅
d
N
}
⇒
b
1
x
1
+
c
1
x
2
=
d
1
a
2
x
1
+
b
2
x
2
+
c
2
x
3
=
d
2
⋮
a
i
x
i
−
1
+
b
i
x
i
+
c
i
x
i
+
1
=
d
i
⋮
a
N
x
N
−
1
+
b
N
x
N
=
d
N
{\displaystyle \left[{\begin{matrix}{b_{1}}&{c_{1}}&{}&{}&{0}\\{a_{2}}&{b_{2}}&{c_{2}}&{}&{}\\{}&{a_{3}}&{b_{3}}&\ddots &{}\\{}&{}&\ddots &\ddots &{c_{N-1}}\\{0}&{}&{}&{a_{N}}&{b_{N}}\\\end{matrix}}\right]\left\{{\begin{matrix}{x_{1}}\\{x_{2}}\\\cdot \\\cdot \\{x_{N}}\\\end{matrix}}\right\}=\left\{{\begin{matrix}{d_{1}}\\{d_{2}}\\\cdot \\\cdot \\{d_{N}}\\\end{matrix}}\right\}\quad \Rightarrow \quad {\begin{array}{lcl}b_{1}x_{1}+c_{1}x_{2}&=&d_{1}\\a_{2}x_{1}+b_{2}x_{2}+c_{2}x_{3}&=&d_{2}\\\vdots &{}&{}\\a_{i}x_{i-1}+b_{i}x_{i}+c_{i}x_{i+1}&=&d_{i}\\\vdots &{}&{}\\a_{N}x_{N-1}+b_{N}x_{N}&=&d_{N}\\\end{array}}}
יש לנו אם כן, 3N-2 איברים, אשר חלקם יכולים להיות 0.
על מנת להגיע לפתרון, נבצע דירוג של שורה אחר שורה: נכפיל את השורה הראשונה ב-
−
a
2
b
1
{\displaystyle \ -{a_{2} \over b_{1}}}
ונוסיף אותה לשורה השנייה, כך שנקבל:
(
b
2
−
a
2
c
1
b
1
)
⏞
β
2
x
2
+
c
2
x
3
=
d
2
−
a
2
d
2
b
1
⏞
δ
2
⇒
β
2
x
2
+
c
2
x
3
=
δ
2
{\displaystyle \ \overbrace {\left(b_{2}-{a_{2}c_{1} \over b_{1}}\right)} ^{\beta _{2}}x_{2}+c_{2}x_{3}=\overbrace {d_{2}-{a_{2}d_{2} \over b_{1}}} ^{\delta _{2}}\quad \Rightarrow \quad \beta _{2}x_{2}+c_{2}x_{3}=\delta _{2}}
כעת נכפיל את את המשוואה ב-
−
a
3
β
2
{\displaystyle \ -{a_{3} \over \beta _{2}}}
ונוסיף אותה לשורה השלישית, כך שנקבל:
(
b
3
−
a
3
c
2
β
2
)
⏞
β
3
x
3
+
c
3
x
4
=
d
3
−
a
3
δ
2
β
2
⏞
δ
3
⇒
β
3
x
3
+
c
3
x
4
=
δ
3
{\displaystyle \ \overbrace {\left(b_{3}-{a_{3}c_{2} \over \beta _{2}}\right)} ^{\beta _{3}}x_{3}+c_{3}x_{4}=\overbrace {d_{3}-{a_{3}\delta _{2} \over \beta _{2}}} ^{\delta _{3}}\quad \Rightarrow \quad \beta _{3}x_{3}+c_{3}x_{4}=\delta _{3}}
כעת, אחרי שעברנו לכתיב β,δ ניתן להכליל ולומר שהמשוואות ה-(i-1)-ית וה-i-ית הן מן הצורה:
β
i
−
1
x
i
−
1
+
c
i
−
1
x
i
=
δ
i
−
1
{\displaystyle \ \beta _{i-1}x_{i-1}+c_{i-1}x_{i}=\delta _{i-1}}
a
i
x
i
−
1
+
b
i
x
i
+
c
i
x
i
+
1
=
d
i
{\displaystyle \ a_{i}x_{i-1}+b_{i}x_{i}+c_{i}x_{i+1}=d_{i}}
בהתאמה, כך שכאשר נכפיל את המשוואה ה-(i-1)-ית ב-
−
a
i
β
i
−
1
{\displaystyle \ -{a_{i} \over \beta _{i-1}}}
, ונוסיף למשוואה ה-i-ית, נקבל:
(
b
i
−
a
i
c
i
−
1
β
i
−
1
)
⏞
β
i
x
i
+
c
i
x
i
+
1
=
d
i
−
a
i
δ
i
−
1
β
i
−
1
⏞
δ
i
⇒
β
i
x
i
+
c
i
x
i
+
1
=
δ
i
{\displaystyle \ \overbrace {\left(b_{i}-{a_{i}c_{i-1} \over \beta _{i-1}}\right)} ^{\beta _{i}}x_{i}+c_{i}x_{i+1}=\overbrace {d_{i}-{a_{i}\delta _{i-1} \over \beta _{i-1}}} ^{\delta _{i}}\quad \Rightarrow \quad \beta _{i}x_{i}+c_{i}x_{i+1}=\delta _{i}}
לשם השלמת התמונה, נביט בשתי המשוואות האחרונות:
β
N
−
1
x
N
−
1
+
c
N
−
1
x
N
=
δ
N
−
1
{\displaystyle \ \beta _{N-1}x_{N-1}+c_{N-1}x_{N}=\delta _{N-1}}
a
N
x
N
−
1
+
b
N
x
N
=
d
N
{\displaystyle \ a_{N}x_{N-1}+b_{N}x_{N}=d_{N}}
נכפיל את המשוואה ה-(N-1)-ית ב-
−
a
N
β
N
−
1
{\displaystyle \ -{a_{N} \over \beta _{N-1}}}
, ונוסיף למשוואה ה-N-ית, כך שנקבל:
(
b
N
−
a
N
c
N
−
1
β
N
−
1
)
⏞
β
N
x
N
=
d
N
−
a
N
δ
N
−
1
β
N
−
1
⏞
δ
N
⇒
β
N
x
N
=
δ
N
{\displaystyle \ \overbrace {\left(b_{N}-{a_{N}c_{N-1} \over \beta _{N-1}}\right)} ^{\beta _{N}}x_{N}=\overbrace {d_{N}-{a_{N}\delta _{N-1} \over \beta _{N-1}}} ^{\delta _{N}}\quad \Rightarrow \quad \beta _{N}x_{N}=\delta _{N}}
מכאן מחלצים את xN ומקבלים את שאר הנעלמים על ידי הצבה לאחור.
כאשר נצטרך לכתוב תכנית מחשב, נרצה להכליל את כתיב β,δ גם על השורה הראשונה. לשם כך נוכל להגדיר:
δ
1
=
d
1
,
β
1
=
b
1
{\displaystyle \ \delta _{1}=d_{1},\ \beta _{1}=b_{1}}
, ואז האלגוריתם ימשיך:
β
i
=
(
b
i
−
a
i
c
i
−
1
β
i
−
1
)
,
δ
i
=
d
i
−
a
i
δ
i
−
1
β
i
−
1
{\displaystyle \ \beta _{i}=\left(b_{i}-{a_{i}c_{i-1} \over \beta _{i-1}}\right)\quad ,\quad \delta _{i}=d_{i}-{a_{i}\delta _{i-1} \over \beta _{i-1}}}
עבור
i
=
2
,
3
,
.
.
.
,
N
{\displaystyle \ i=2,3,...,N}
.
x
N
=
δ
N
β
N
{\displaystyle \ x_{N}={\delta _{N} \over \beta _{N}}}
x
i
=
δ
i
−
c
i
x
i
+
1
β
i
{\displaystyle \ x_{i}={\delta _{i}-c_{i}x_{i+1} \over \beta _{i}}}
עבור
i
=
N
−
1
,
N
−
2
,
.
.
.
,
2
,
1
{\displaystyle \ i=N-1,N-2,...,2,1}
.
בהערכה פשוטה מתקבל כי מספר הפעולות המקסימלי לשיטה זו הינו 5N-4.
שימושים:
בהינתן מד"ר, אם נכתוב את משוואת הפרשים עבורה, נקבל מטריצה תלת-אלכסונית.
מאחר והתרגלנו לסמן את מספר האיטרציה ב"n", נסמן את סדר המערכת ב-N.
שיטה זו משתמשת באיברי המטריצה A על מנת להתכנס לפתרון בדרך המהירה ביותר יש לבחור ניחוש התחלתי השווה לממוצע של הערכים העצמיים. מבצעים איטרציות עד להתכנסות של כל וקטור הנעלמים. כלומר: לא מתבצעות איטרציות עבור כל אחד ואחד מהנעלמים בנפרד.
מתוך הסכום :
∑
j
=
1
N
a
i
j
x
j
=
b
i
,
i
=
1
,
.
.
,
N
{\displaystyle \ \sum _{j=1}^{N}a_{ij}x_{j}=b_{i},\ i=1,..,N}
נבודד את הנעלם xi :
a
i
i
x
i
+
∑
j
=
1
,
j
≠
i
N
a
i
j
x
j
=
b
i
⇒
x
i
=
−
∑
j
=
1
,
j
≠
i
N
a
i
j
a
i
i
x
j
+
b
i
a
i
i
{\displaystyle \ a_{ii}x_{i}+\sum _{j=1,j\neq i}^{N}a_{ij}x_{j}=b_{i}\quad \Rightarrow \ x_{i}=-\sum _{j=1,j\neq i}^{N}{a_{ij} \over a_{ii}}x_{j}+{b_{i} \over a_{ii}}}
ואז השיטה האיטרטיבית היא:
x
i
(
n
+
1
)
=
−
∑
j
=
1
,
j
≠
i
N
a
i
j
a
i
i
x
j
(
n
)
+
b
i
a
i
i
,
i
=
1
,
.
.
,
N
;
n
=
0
,
1
,
2
,
.
.
.
{\displaystyle \ x_{i}^{(n+1)}=-\sum _{j=1,j\neq i}^{N}{a_{ij} \over a_{ii}}x_{j}^{(n)}+{b_{i} \over a_{ii}}\ ,\quad i=1,..,N;\ n=0,1,2,...}
מה שמתרחש בפועל הוא 3 לולאות מקוננות אשר משתמשות בוקטור
x
_
(
n
)
{\displaystyle \ {\underline {x}}^{(n)}}
על מנת לייצר את הוקטור
x
_
(
n
+
1
)
{\displaystyle \ {\underline {x}}^{(n+1)}}
(ראו "קישורים חיצוניים" עבור האלגוריתם).
קריטריוני התכנסות
ניתן להשתמש באחד מן הקריטריונים הבאים:
|
x
i
(
n
+
1
)
−
x
i
(
n
)
|
<
ϵ
,
1
≤
i
≤
N
{\displaystyle \ \left|x_{i}^{(n+1)}-x_{i}^{(n)}\right|<\epsilon \ ,\quad 1\leq i\leq N}
|
1
−
x
i
(
n
)
x
i
(
n
+
1
)
|
<
ϵ
,
1
≤
i
≤
N
{\displaystyle \ \left|1-{\frac {x_{i}^{(n)}}{x_{i}^{(n+1)}}}\right|<\epsilon \ ,\quad 1\leq i\leq N}
∑
i
=
1
n
(
x
i
(
n
+
1
)
−
x
i
(
n
)
)
2
<
ϵ
{\displaystyle \ {\sqrt {\sum _{i=1}^{n}\left(x_{i}^{(n+1)}-x_{i}^{(n)}\right)^{2}}}<\epsilon }
בדרך כלל התכנסות השיטה היא איטית ולכן יש לבצע מספר רב של איטרציות. את בדיקת ההתכנסות נהוג לבצע בתום הלולאה עבור כל נעלם בנפרד, ולא עבור כל איטרציה בנפרד.
התנאי להתכנסות
אם
α
_
=
(
α
1
,
α
2
.
.
.
,
α
N
)
{\displaystyle \ {\underline {\alpha }}=(\alpha _{1},\alpha _{2}...,\alpha _{N})}
הוא הפתרון, אז
∑
j
=
1
N
a
i
j
α
j
≡
b
i
{\displaystyle \ \sum _{j=1}^{N}a_{ij}\alpha _{j}\equiv b_{i}}
. נציב את וקטור השגיאה
ϵ
i
(
n
)
=
x
i
(
n
)
−
α
i
{\displaystyle \ \epsilon _{i}^{(n)}=x_{i}^{(n)}-\alpha _{i}}
לתוך שיטת Jacobi:
x
i
(
n
+
1
)
=
−
∑
j
=
1
,
j
≠
i
N
a
i
j
a
i
i
x
j
(
n
)
+
b
i
a
i
i
⇒
α
i
+
ϵ
i
(
n
+
1
)
=
−
∑
j
=
1
,
j
≠
i
N
a
i
j
a
i
i
(
α
j
+
ϵ
j
(
n
)
)
+
b
i
a
i
i
{\displaystyle \ x_{i}^{(n+1)}=-\sum _{j=1,j\neq i}^{N}{a_{ij} \over a_{ii}}x_{j}^{(n)}+{b_{i} \over a_{ii}}\quad \Rightarrow \quad \alpha _{i}+\epsilon _{i}^{(n+1)}=-\sum _{j=1,j\neq i}^{N}{a_{ij} \over a_{ii}}\left(\alpha _{j}+\epsilon _{j}^{(n)}\right)+{b_{i} \over a_{ii}}}
⇒
ϵ
i
(
n
+
1
)
=
−
∑
j
=
1
,
j
≠
i
N
a
i
j
a
i
i
ϵ
j
(
n
)
{\displaystyle \ \Rightarrow \quad \epsilon _{i}^{(n+1)}=-\sum _{j=1,j\neq i}^{N}{a_{ij} \over a_{ii}}\epsilon _{j}^{(n)}}
לשם נוחות, נגדיר את השגיאה המקסימלית באיטרציה:
E
(
n
)
=
max
1
≤
j
≤
N
,
j
≠
i
{
|
ϵ
j
(
n
)
|
}
{\displaystyle \ \mathrm {E} ^{(n)}=\max _{1\leq j\leq N,j\neq i}\left\{\left|\epsilon _{j}^{(n)}\right|\right\}}
ואז:
|
ϵ
i
(
n
+
1
)
|
≤
∑
j
=
1
,
j
≠
i
N
|
a
i
j
a
i
i
|
|
ϵ
j
(
n
)
|
≤
∑
j
=
1
,
j
≠
i
N
|
a
i
j
a
i
i
|
E
(
n
)
⇒
ϵ
i
(
n
+
1
)
E
(
n
)
≤
∑
j
=
1
,
j
≠
i
N
|
a
i
j
a
i
i
|
{\displaystyle \ \left|\epsilon _{i}^{(n+1)}\right|\leq \sum _{j=1,j\neq i}^{N}\left|{a_{ij} \over a_{ii}}\right|\left|\epsilon _{j}^{(n)}\right|\leq \sum _{j=1,j\neq i}^{N}\left|{a_{ij} \over a_{ii}}\right|\mathrm {E} ^{(n)}\quad \Rightarrow \quad {\epsilon _{i}^{(n+1)} \over \mathrm {E} ^{(n)}}\leq \sum _{j=1,j\neq i}^{N}\left|{a_{ij} \over a_{ii}}\right|}
ואז התנאי להתכנסות הוא:
ϵ
i
(
n
+
1
)
E
(
n
)
≤
1
⇒
∑
j
=
1
,
j
≠
i
N
|
a
i
j
a
i
i
|
≤
1
⇒
∑
j
=
1
,
j
≠
i
N
|
a
i
j
|
≤
|
a
i
i
|
{\displaystyle \ {\epsilon _{i}^{(n+1)} \over \mathrm {E} ^{(n)}}\leq 1\quad \Rightarrow \quad \sum _{j=1,j\neq i}^{N}\left|{a_{ij} \over a_{ii}}\right|\leq 1\quad \Rightarrow \quad \sum _{j=1,j\neq i}^{N}|a_{ij}|\leq |a_{ii}|}
כלומר איברי האלכסון בכל שורה במטריצה A צריכים להיות גדולים מסכום כל שאר האיברים באותה השורה, ואז ההתכנסות מובטחת. ניתן להוכיח שנתאי זה מספיק אך לא הכרחי. לתנאי זה קוראים גם בשם "שליטה אלכסונית".
כעת כשאנו מודעים לתנאי ההתכנסות, ננסה לסדר את שורות המטריצה כך שהתנאי יתקיים, לפני הפעלת השיטה.
שיטת GS מפצלת את הסכימה לנעלמים לפני הנעלם הנוכחי ולנעלמים אחרי הנעלם הנוכחי:
x
i
(
n
+
1
)
=
−
∑
j
=
1
i
−
1
a
i
j
a
i
i
x
j
(
n
+
1
)
−
∑
j
=
i
+
1
N
a
i
j
a
i
i
x
j
(
n
)
+
b
i
a
i
i
,
i
=
1
,
.
.
,
N
;
n
=
0
,
1
,
2
,
.
.
.
{\displaystyle \ x_{i}^{(n+1)}=-\sum _{j=1}^{i-1}{a_{ij} \over a_{ii}}x_{j}^{(n+1)}-\sum _{j=i+1}^{N}{a_{ij} \over a_{ii}}x_{j}^{(n)}+{b_{i} \over a_{ii}}\ ,\quad i=1,..,N;\ n=0,1,2,...}
בשיטה זו, בכל איטרציה משתמשים בערכים האחרונים שהתקבלו. כלומר כאן i-1 הנעלמים בוקטור הנעלמים מתעדכנים לפי הסדר יחד עם הנעלם ה-i, עם התקדמות הלולאה. מסיבה זו ההתכנסות מהירה פי 2 משיטת Jacobi. בדיקת ההתכנסות תתבצע כמו בשיטה הקודמת.
השוואה בין שיטת יעקובי לשיטת גאוס-זיידל
עריכה
ננתח את השיטות במקרה של מערכת מסדר 2:
[
a
b
c
d
]
{
x
1
x
2
}
=
{
e
1
e
2
}
{\displaystyle \ \left[{\begin{matrix}a&b\\c&d\end{matrix}}\right]\left\{{\begin{matrix}x_{1}\\x_{2}\end{matrix}}\right\}=\left\{{\begin{matrix}e_{1}\\e_{2}\end{matrix}}\right\}}
במקרה זה, התהליך האיטרטיבי הוא מהצורה:
Jacobi
_
G-S
_
a
x
1
(
n
+
1
)
=
e
1
−
b
x
2
(
n
)
a
x
1
(
n
+
1
)
=
e
1
−
b
x
2
(
n
)
d
x
2
(
n
+
1
)
=
e
2
−
c
x
1
(
n
)
d
x
2
(
n
+
1
)
=
e
2
−
c
x
1
(
n
+
1
)
{\displaystyle \ {\begin{matrix}{\underline {\mbox{Jacobi}}}&\qquad {\underline {\mbox{G-S}}}\\ax_{1}^{(n+1)}=e_{1}-bx_{2}^{(n)}&\qquad ax_{1}^{(n+1)}=e_{1}-bx_{2}^{(n)}\\dx_{2}^{(n+1)}=e_{2}-cx_{1}^{(n)}&\qquad dx_{2}^{(n+1)}=e_{2}-cx_{1}^{(n+1)}\end{matrix}}}
כלומר ההבדל היחיד הוא ששיטת גאוס-זיידל משתמשת בערך המעודכן של x1 .
נציב את הביטוי לשגיאה
x
i
=
ϵ
i
+
α
i
{\displaystyle \ x_{i}=\epsilon _{i}+\alpha _{i}}
ונקבל:
Jacobi
_
G-S
_
a
(
ϵ
1
(
n
+
1
)
+
α
1
)
=
e
1
−
b
(
ϵ
2
(
n
)
+
α
2
)
a
(
ϵ
1
(
n
+
1
)
+
α
1
)
=
e
1
−
b
(
ϵ
2
(
n
)
+
α
2
)
d
(
ϵ
2
(
n
+
1
)
+
α
2
)
=
e
2
−
c
(
ϵ
1
(
n
)
+
α
1
)
d
(
ϵ
2
(
n
+
1
)
+
α
2
)
=
e
2
−
c
(
ϵ
1
(
n
+
1
)
+
α
1
)
{\displaystyle \ {\begin{matrix}{\underline {\mbox{Jacobi}}}&\qquad {\underline {\mbox{G-S}}}\\a\left(\epsilon _{1}^{(n+1)}+\alpha _{1}\right)=e_{1}-b\left(\epsilon _{2}^{(n)}+\alpha _{2}\right)&\qquad a\left(\epsilon _{1}^{(n+1)}+\alpha _{1}\right)=e_{1}-b\left(\epsilon _{2}^{(n)}+\alpha _{2}\right)\\d\left(\epsilon _{2}^{(n+1)}+\alpha _{2}\right)=e_{2}-c\left(\epsilon _{1}^{(n)}+\alpha _{1}\right)&\qquad d\left(\epsilon _{2}^{(n+1)}+\alpha _{2}\right)=e_{2}-c\left(\epsilon _{1}^{(n+1)}+\alpha _{1}\right)\end{matrix}}}
נזכור כי הוקטור
(
α
1
,
α
2
)
T
{\displaystyle \ (\alpha _{1},\alpha _{2})^{T}}
פותר את המערכת, ואז באמצעות המשוואות הנ"ל נוכל למצוא קשר בין שתי שגיאות עוקבות:
Jacobi
_
G-S
_
ϵ
1
(
n
+
1
)
=
−
b
a
ϵ
2
(
n
)
ϵ
1
(
n
+
1
)
=
−
b
a
ϵ
2
(
n
)
ϵ
2
(
n
+
1
)
=
−
c
d
ϵ
1
(
n
)
ϵ
2
(
n
+
1
)
=
−
c
d
ϵ
1
(
n
+
1
)
{\displaystyle \ {\begin{matrix}{\underline {\mbox{Jacobi}}}&\qquad {\underline {\mbox{G-S}}}\\\epsilon _{1}^{(n+1)}=-{b \over a}\epsilon _{2}^{(n)}&\qquad \epsilon _{1}^{(n+1)}=-{b \over a}\epsilon _{2}^{(n)}\\\epsilon _{2}^{(n+1)}=-{c \over d}\epsilon _{1}^{(n)}&\qquad \epsilon _{2}^{(n+1)}=-{c \over d}\epsilon _{1}^{(n+1)}\\\end{matrix}}}
כך שעבור שיטת יעקובי מתקיים:
{
ϵ
1
(
n
+
1
)
ϵ
2
(
n
+
1
)
}
=
b
a
c
d
⏞
σ
{
ϵ
1
(
n
−
1
)
ϵ
2
(
n
−
1
)
}
⇒
ϵ
_
(
2
n
)
=
σ
n
ϵ
_
(
0
)
{\displaystyle \ \left\{{\begin{matrix}\epsilon _{1}^{(n+1)}\\\epsilon _{2}^{(n+1)}\end{matrix}}\right\}=\overbrace {{b \over a}{c \over d}} ^{\sigma }\left\{{\begin{matrix}\epsilon _{1}^{(n-1)}\\\epsilon _{2}^{(n-1)}\end{matrix}}\right\}\qquad \Rightarrow {\underline {\epsilon }}^{(2n)}=\sigma ^{n}{\underline {\epsilon }}^{(0)}}
ואילו עבור שיטת גאוס-זיידל מתקיים:
{
ϵ
1
(
n
+
1
)
ϵ
2
(
n
+
1
)
}
=
b
a
c
d
⏞
σ
{
ϵ
1
(
n
)
ϵ
2
(
n
)
}
⇒
ϵ
_
(
n
)
=
σ
n
ϵ
_
(
0
)
{\displaystyle \ \left\{{\begin{matrix}\epsilon _{1}^{(n+1)}\\\epsilon _{2}^{(n+1)}\end{matrix}}\right\}=\overbrace {{b \over a}{c \over d}} ^{\sigma }\left\{{\begin{matrix}\epsilon _{1}^{(n)}\\\epsilon _{2}^{(n)}\end{matrix}}\right\}\qquad \Rightarrow {\underline {\epsilon }}^{(n)}=\sigma ^{n}{\underline {\epsilon }}^{(0)}}
כלומר בעוד שבשיטת יעקובי σ היא השגיאה כעבור כל שתי איטרציות, בשיטת גאוס-זיידל σ היא השגיאה בכל איטרציה בודדת. לכן בשיטת גאוס-זיידל ההתכנסות מהירה פי 2.
שיטת Successive Over-Relaxation
עריכה
שיטת SOR נועדה על מנת לזרז את התכנסותה של שיטת Gauss-Seidel.
x
i
(
n
+
1
)
=
x
i
(
n
)
+
ω
[
x
i
G
S
(
n
+
1
)
−
x
i
(
n
)
]
{\displaystyle \ x_{i}^{(n+1)}=x_{i}^{(n)}+\omega \left[x_{i_{GS}}^{(n+1)}-x_{i}^{(n)}\right]}
ω הוא פרמטר הרלקסציה אשר מקיים
0
<
ω
<
2
{\displaystyle \ 0<\omega <2}
. על מנת להאיץ תהליך התכנסות איטי לוקחים ω>1 ואילו על מנת להבטיח התכנסות עבור שיטות מתבדרות, לוקחים ω<1. שימו לב כי עבור ω=1 מקבלים חזרה את שיטת GS.
כמו כן, עבור מטריצה A נתונה, קיים ערך אופטימלי של ω אשר מביא להתכנסות המהירה ביותר.
ניתן להוכיח שאם שיטת GS מתכנסת, אז שיטת SOR תתכנס מהר יותר.
דרך אחרת לפיתוח השיטה הוא באמצעות שימוש ייצוג המטריצה A באמצעות המכפלה DLU, כאשר D היא מטריצה אלכסונית (למידע נוסף ראו "קישורים חיצוניים").