【问题标题】:Python equivalent for matlab Preconditioned Conjugate Gradients Method on function handlePython等效于函数句柄上的matlab预处理共轭梯度方法
【发布时间】:2017-09-21 16:13:03
【问题描述】:

Matlab 中以下预处理共轭梯度法是否有等效的 Python 表达式,其中第一个参数是函数句柄而不是矩阵:

pcg(@(x)myfunction(x,arg1, arg2),x0,thres,max_iter);

【问题讨论】:

  • 你可能需要自己写,它不是一个硬算法
  • 在python中没有找到类似函数句柄的东西
  • 哦,那你搜索的太少了!它们被称为 Lambda 函数。不过,如果您编写自己的PGC,则不需要使用 Lambda,您只需将矩阵乘法 A*x 替换为您的函数
  • 我的印象是您可以使用 lambda 表达式和线性运算符(而不是 arg1、arg2)传递单个参数函数,但我会进一步研究它。感谢您的帮助!

标签: python matlab gradient-descent


【解决方案1】:

我相信您可以将scipy.sparse.linalg.cgscipy.sparse.linalg.LinearOperator 结合使用。

“许多迭代方法(例如cg,gmres)不需要知道矩阵的各个条目来求解线性系统Ax=b。这样的求解器只需要计算矩阵向量乘积,Av 其中 v 是密集向量。此类用作迭代求解器和类似矩阵的对象之间的抽象接口。"

"M : {稀疏矩阵、稠密矩阵、LinearOperator} A 的预处理器。预处理器应该近似于 A 的逆。有效的预处理显着提高了收敛速度,这意味着需要更少的迭代来达到给定的误差容限。"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 2014-03-22
    相关资源
    最近更新 更多