Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.83 KB | None | 0 0
  1. import numpy as np
  2.  
  3. A = np.array([[-2,3.01,0.12,-0.11],
  4. [2.92,-0.17,0.11,0.22],
  5. [0.66,0.52,3.17,2.11],
  6. [3.01,0.42,0.27,-0.15]])
  7.  
  8. b = np.array([0.2,0.1,0,-0.1])
  9.  
  10. def cg(A, b, tol):
  11. it=0
  12. x = 0
  13. r = np.copy(b); r_prev = np.copy(b)
  14. rho = np.dot(r,r)
  15. p = np.copy(r)
  16. while np.sqrt(rho) > tol * np.sqrt(np.dot(b,b)):
  17. it += 1
  18. if it == 1:
  19. p = r
  20. else:
  21. beta = np.dot(r,r)/np.dot(r_prev,r_prev)
  22. p = r + beta*p
  23. w = np.dot(A, p)
  24. alpha = np.dot(r,r)/np.dot(p, w)
  25. x = x + alpha*p
  26. r_prev = r
  27. r = r - alpha*w
  28. rho = np.dot(r,r)
  29. return x, it
  30.  
  31. for i in range(2,8):
  32. x, it = cg(A,b,10**-i)
  33. print("eps = ", 10**-i, ", x = ", x, ", iteration = ", it)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement