参考文献
- 福水 健次. カーネル法入門. 朝倉書店, 2010.
[1] の 59 ページのアルゴリズムをかこうとして R が下三角になっていってほしいが途中である。
import numpy as np def imcomplete_cholesky(A): R = np.diag(np.diag(A)) A_dash = A.copy() P = np.identity(A.shape[0]) i = 0 j_ast = np.argmax(np.diag(R)) P[i, i] = 0 P[j_ast, j_ast] = 0 P[i, j_ast] = 1 P[j_ast, i] = 1 A_dash = np.matmul(P, A_dash) A_dash = np.matmul(A_dash, P) r = R[i, i] R[i, i] = R[j_ast, i] R[j_ast, i] = r R[i, i] = np.sqrt(A_dash[i, i]) print(A_dash) print(R) A = np.array([ [ 4., 12., -16.], [ 12., 37., -43.], [-16., -43., 98.] ]) imcomplete_cholesky(A)
[[ 98. -43. -16.] [-43. 37. 12.] [-16. 12. 4.]] [[ 9.89949494 0. 0. ] [ 0. 37. 0. ] [ 4. 0. 98. ]]