Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.73 KB | None | 0 0
  1. import numpy as np
  2.  
  3. A = np.array([[1.12,0.13,0.14,0.15],
  4.               [0.16,1.17,0.18,0.19],
  5.               [0.20,0.21,1.22,0.23],
  6.               [0.24,0.25,0.26,1.27]])
  7.  
  8. b = np.array([0.05,-0.05,0.15,-0.15])
  9.  
  10. def cg(A, b, tol):
  11.     it=0; x = 0;
  12.     r = np.copy(b); r_prev = np.copy(b)
  13.     rho = np.dot(r,r)
  14.     p = np.copy(r)
  15.     while np.sqrt(rho) > tol * np.sqrt(np.dot(b,b)):
  16.         it += 1
  17.         if it == 1:
  18.             p = r
  19.         else:
  20.             beta = np.dot(r,r)/np.dot(r_prev,r_prev)
  21.             p = r + beta*p
  22.         w = np.dot(A, p)
  23.         alpha = np.dot(r,r)/np.dot(p, w)
  24.         x = x + alpha*p
  25.         r_prev = r
  26.         r = r - alpha*w
  27.         rho = np.dot(r,r)
  28.     return x, it
  29.  
  30. for i in range(2,8):
  31.     x, it = cg(A,b,10**-i)
  32.     print("eps = ", 10**-i, ", x = ", x, ", iteration = ", it)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement