How to retrieve how many iterations ran to achieve specified tolerance level in SciPy sparse linear system solvers?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
The solvers support a callback
keyword argument that gets called after every iteration. So you could do something like this:
def solve_sparse(A, b):
num_iters = 0
def callback(xk):
num_iters += 1
# call the solver on your data
return scipy.sparse.linalg.cg(A, b, callback=callback)[0]
回答2:
For Python 3, the following works:
def solve_sparse(A, b):
num_iters = 0
def callback(xk):
nonlocal num_iters
num_iters+=1
x,status=scipy.sparse.linalg.cg(A, b,tol=1e-15, callback=callback)
return x,status,num_iters