Metode Jacobi: Perbedaan antara revisi
Konten dihapus Konten ditambahkan
Tag: Suntingan perangkat seluler Suntingan peramban seluler Suntingan seluler lanjutan |
Tag: Suntingan perangkat seluler Suntingan peramban seluler Suntingan seluler lanjutan |
||
Baris 106:
:<math>\left | a_{ii} \right | > \sum_{i \ne j} {\left | a_{ij} \right |}.</math>
== Contoh ==
Sistem linear dari bentuk <math>Ax=b</math> dengan perkiraan awal <math>x^{(0)}</math> diberikan oleh
:<math> A=
\begin{bmatrix}
2 & 1 \\
5 & 7 \\
\end{bmatrix},
\ b=
\begin{bmatrix}
11 \\
13 \\
\end{bmatrix}
\quad \text{dan} \quad x^{(0)} =
\begin{bmatrix}
1 \\
1 \\
\end{bmatrix} .</math>
Kami menggunakan persamaan <math> x^{(k+1)}=D^{-1}(b - (L+U)x^{(k)})</math>, dijelaskan di atas, untuk memperkirakan <math>x</math>. Pertama, kami menulis ulang persamaan dalam bentuk yang lebih mudah <math>D^{-1}(b - (L+U)x^{(k)}) = Tx^{(k)} + C</math>, dimana <math>T=-D^{-1}(L+U)</math> dan <math>C = D^{-1}b</math>. Dari nilai-nilai yang diketahui
:<math> D^{-1}=
\begin{bmatrix}
1/2 & 0 \\
0 & 1/7 \\
\end{bmatrix},
\ L=
\begin{bmatrix}
0 & 0 \\
5 & 0 \\
\end{bmatrix}
\quad \text{dan} \quad U =
\begin{bmatrix}
0 & 1 \\
0 & 0 \\
\end{bmatrix} .</math>
we determine <math> T=-D^{-1}(L+U) </math> as
:<math> 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} .</math>
Further, <math>C</math> is found as
:<math> 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}. </math>
Dengan <math>T</math> dan <math>C</math> dihitung, kami perkirakan <math>x</math> sebagai <math> x^{(1)}= Tx^{(0)}+C </math>:
:<math> 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} .</math>
Hasil iterasi berikutnya
:<math> 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} .</math>
Proses ini diulangi sampai konvergensi (yaitu, sampai <math>\|Ax^{(n)} - b\|</math> kecil). Solusi setelah 25 iterasi adalah
:<math> x=\begin{bmatrix}
7.111\\
-3.222
\end{bmatrix}
.</math>
=== Contoh lain ===
Contohnya kita diberi sistem linier berikut:
:<math>
\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}
</math>
Bila kita memilih {{math|(0, 0, 0, 0)}} sebagai pendekatan awal, maka solusi perkiraan pertama diberikan oleh
:<math>
\begin{align}
x_1 & = (6 + 0 - (2 * 0)) / 10 = 0.6, \\
x_2 & = (25 + 0 + 0 - (3 * 0)) / 11 = 25/11 = 2.2727, \\
x_3 & = (-11 - (2 * 0) + 0 + 0) / 10 = -1.1,\\
x_4 & = (15 - (3 * 0) + 0) / 8 = 1.875.
\end{align}
</math>
Dengan menggunakan perkiraan yang diperoleh, prosedur iteratif diulangi sampai akurasi yang diinginkan tercapai. Berikut ini adalah solusi yang diperkirakan setelah lima iterasi.
{| class="wikitable" border="1"
|-
! <math>x_1</math>
! <math>x_2</math>
! <math>x_3</math>
! <math>x_4</math>
|-
| 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
|}
Solusi yang tepat dari sistem ini adalah {{math|(1, 2, −1, 1)}}.
=== Contoh menggunakan Python dan NumPy ===
Prosedur numerik berikut hanya melakukan iterasi untuk menghasilkan vektor solusi.
<syntaxhighlight lang="python">
def jacobi(A, b, x_init, epsilon=1e-10, max_iterations=500):
D = np.diag(np.diag(A))
LU = A - D
x = x_init
for i in range(max_iterations):
D_inv = np.diag(1 / np.diag(D))
x_new = np.dot(D_inv, b - np.dot(LU, x))
if np.linalg.norm(x_new - x) < epsilon:
return x_new
x = x_new
return x
# problem data
A = np.array([
[5, 2, 1, 1],
[2, 6, 2, 1],
[1, 2, 7, 1],
[1, 1, 2, 8]
])
b = np.array([29, 31, 26, 19])
# you can choose any starting vector
x_init = np.zeros(len(b))
x = jacobi(A, b, x_init)
print("x:", x)
print("computed b:", np.dot(A, x))
print("real b:", b)
</syntaxhighlight>
Menghasilkan keluaran:
<pre>
x: [3.99275362 2.95410628 2.16183575 0.96618357]
computed b: [29. 31. 26. 19.]
real b: [29 31 26 19]
</pre>
== Referensi ==
|