ヤコビ法備忘録 [数値解析]

概要

ヤコビ法は、n元の連立一次方程式の連立一次方程式を反復法で解く手法の1。

反復法とは

適当な初期点から出発して反復式 によって点列を生成し最終的に最適解に収束させようとする手法.つまり初めに解を適当な値で初期化して漸化式を用いて解を収束させていく方法

手法

f:id:takaishi78:20191108162725j:plain
ヤコビ法-式

特徴

前の反復の解xを保存しつつ新しい解new_xを算出していく.

プログラム

coef_mat = np.array([[3,2,1],[1,4,1],[2,2,5]])
y = np.array([10, 12, 21])
convergence_value = 10 ** -16
dim = len(y)

x = np.zeros(dim)
new_x = np.zeros(dim)
loss_sum = 0
count = 0


while True:
  for i in range(dim):
    new_x[i] = (y[i] - coef_mat[i][(i+1)%dim]*x[(i+1)%dim] - coef_mat[i][(i+2)%dim]*x[(i+2)%dim]) / coef_mat[i][i]

  loss_sum = 0.0
  
  
  for i in range(dim):
    loss_sum += abs(new_x[i] - x[i])
  
  if loss_sum < convergence_value:
    break
  
  print("No."+str(count))
  count+=1
  for i in range(dim):
    print(new_x[i])
    x[i] = new_x[i]

参考

mmm-ssss.com

http://nkl.cc.u-tokyo.ac.jp/13n/SolverIterative.pdf