Advertisement
svinoviteran

cholesky

May 23rd, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.93 KB | None | 0 0
  1. import numpy as np
  2. A = np.array([[0.1665, 0.6561, 1.1457, 1.6353],
  3.              [0.6561, 12.9283, 18.7171, 24.5059],
  4.              [1.1457, 18.7171, 63.6745, 79.5721],
  5.              [1.6353, 24.5059, 79.5721, 177.7939]])
  6.  
  7. def L(A):
  8.     L = np.zeros(A.shape)
  9.     n = A.shape[0]
  10.  
  11.     for i in range(n):
  12.         for j in range(i + 1):
  13.             tmp_sum = sum(L[i][k] * L[j][k] for k in range(j))
  14.  
  15.             if (i == j):
  16.                     L[i][j] = (A[i][i] - tmp_sum) ** 0.5
  17.             else:
  18.                     L[i][j] = (1.0 / L[j][j] * (A[i][j] - tmp_sum))
  19.     return L
  20.  
  21. def inverse_mat(A):
  22.     l = L(A)
  23.     P = np.zeros(A.shape)
  24.     n = A.shape[0]
  25.     for i in range(n):
  26.         P[i][i] = 1 / l[i, i]
  27.         for j in range(i+1, n):
  28.             tmp = 0
  29.             for k in range(j):
  30.                 tmp += l[j, k] * P[k][i]
  31.             P[i][j] = - tmp / l[j, j]
  32.     return P.T @ P
  33. ans = inverse_mat(A)
  34. print(ans)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement