2009-05-27

Solving a learning system (Ax=b) by iterative methods

Jacobi Method
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]

0 comments:

Post a Comment