Advertisement
Guest User

Untitled

a guest
Mar 31st, 2015
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.86 KB | None | 0 0
  1. def cg(matvec, b, x0, disp=False, tol=1e-5, maxiter=None):
  2. hist = {'norm_r': []}
  3. if disp:
  4. print('%9s' % 'norm_r')
  5.  
  6. def write_hist(hist, norm_r):
  7. hist['norm_r'].append(norm_r)
  8.  
  9. def callback(x):
  10. r = matvec(x) - b
  11. norm_r = norm(r, np.inf)
  12. write_hist(hist, norm_r)
  13. if disp:
  14. print('%9.8f' % norm_r)
  15.  
  16. callback(x0)
  17. xk = x0
  18. rk = matvec(xk) - b
  19. dk = -rk
  20. cnt_iter = 0
  21.  
  22. while norm(rk, np.inf) > tol:
  23. alpha_k = rk.dot(rk) / dk.dot(matvec(dk))
  24. xk = xk + alpha_k * dk
  25. rk_new = rk + alpha_k * matvec(dk)
  26. beta_k = rk_new.dot(rk_new) / rk.dot(rk)
  27. rk = rk_new
  28. dk = -rk + beta_k * dk
  29. cnt_iter += 1
  30. callback(xk)
  31. if maxiter is not None and cnt_iter > maxiter:
  32. break
  33.  
  34. return xk, hist
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement