线性共轭梯度法python_python中的预条件共轭梯度与线性化器

在尝试使用scipy.sparse.linalg的预条件共轭梯度法求解线性方程组时,遇到TypeError。尝试通过spilu得到A的预处理条件M^-1,并在cg函数中传入M2(类型为LinearOperator)。然而,代码运行报错,提示无法将'LinearOperator'类型转换为数值。对于linearerator接口的疑惑也存在,不清楚其具体用途。寻求解答。
摘要由CSDN通过智能技术生成

[作业]我要用预处理的共轭梯度法求解线性方程组Ax=b,我使用scipy.sparse.linalg先决条件。A是稀疏对称162×162矩阵。因为spilu给出了A的逆的近似值,比如M近似A,所以spilu(A)给出了M^-1,这是预处理条件。我发现我们可以在python共轭梯度函数中直接给出预处理条件,但是我下面的代码不起作用。在M_inverse=scipy.sparse.linalg.spilu(A)

M2=scipy.sparse.linalg.LinearOperator((162,162),M_inverse.solve)

x3=scipy.sparse.linalg.cg(A,b,M2)

TypeError Traceback (most recent call last)

in ()

----> 1 x3=scipy.sparse.linalg.cg(A,b,M2)

/Users/ruobinghan/anaconda/lib/python3.4/site-packages/scipy/sparse/linalg/isolve/iterative.py in cg(A, b, x0, tol, maxiter, xtype, M, callback)

/Users/ruobinghan/anaconda/lib/python3.4/site-packages/scipy/sparse/linalg/isolve/iterative.py in non_reentrant(func, *a, **kw)

83 try:

84 d['__entered'] = True

---> 85 return func(*a, **kw)

86 finally:

87 d['__entered'] = False<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值