for i = 1 : n
x[ i ]k+1 = ( b[ i ]
- SIGMA(j = 1 : i-1)( a[ i ][ j ] * x[ j ]k )
- SIGMA(j = i+1 : n)( a[ i ][ j ] * x[ j ]k ) )
/ a[ i ][ i ]
end
[Convergence]
M = diag( diag( A ) ) N = - ( A - M )
若M-1*N的eigenvalue皆在-1~1之間的話,則其會收斂。
Gauss-Seidal Method
for i = 1 : n
x[ i ]k+1 = ( b[ i ]
- SIGMA(j = 1 : i-1)( a[ i ][ j ] * x[ j ]k+1 )
- SIGMA(j = i+1 : n)( a[ i ][ j ] * x[ j ]k ) )
/ a[ i ][ i ]
end
Steepest Descent Method
x(0) = initial guess
r(0) = b - A * x(0)
k = 0
while rk != 0
k = k + 1
alpha(k) = ( (rk-1)' * rk-1 ) / ( (rk-1)' * A * rk-1 )
xk = xk-1 - alphak * rk-1
rk = b - A * xk
end
Conjugate Gradient Method
k = 0
r(0) = b - A * x(0)
while rk != 0
k = k + 1
if k = 1
p(1) = r(0)
else
betak = ( (rk-1)' * rk-1 ) / ( (rk-2)' * rk-2 )
pk = rk-1 + betak * pk-1
end
alphak = ( (rk-1)' * rk-1 ) / ( (pk)' * A * pk )
xk = xk-1 + alphak * pk
rk = rk-1 - alphak * A * pk
end
x = xk
[Reference]
- Gene H. Golub and Charles Van Loan, Matrix computation, 1996.
[Part 1] [Part 2]

0 comments:
Post a Comment