sympy - 使用 Sympy 进行符号矩阵微分

标签 sympy differentiation

我正在测试https://zulko.wordpress.com/2012/04/15/symbolic-matrix-differentiation-with-sympy/使用Python35,我得到了这个错误:

Traceback (most recent call last):
  File "D:\Program Files\JetBrains\PyCharm 2016.1\helpers\pydev\pydev_run_in_console.py", line 71, in <module>
    globals = run_file(file, None, None)
  File "D:\Program Files\JetBrains\PyCharm 2016.1\helpers\pydev\pydev_run_in_console.py", line 31, in run_file
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "D:\Program Files\JetBrains\PyCharm 2016.1\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "D:/programs/python/wcf/test2/my.py", line 134, in <module>
    matPrint(  expand( expand( matDiff(H,X) ) ) )
  File "D:/programs/python/wcf/test2/my.py", line 64, in matDiff
    return  MATRIX_DIFF_RULES[expr.__class__](expr,symbols)
  File "D:/programs/python/wcf/test2/my.py", line 54, in <lambda>
    Mul :  lambda e,s : Mul(matDiff(e.args[0],s),Mul(*e.args[1:]))
  File "D:/programs/python/wcf/test2/my.py", line 64, in matDiff
    return  MATRIX_DIFF_RULES[expr.__class__](expr,symbols)
  File "D:/programs/python/wcf/test2/my.py", line 52, in <lambda>
    Symbol : lambda e, s: d(e) if (e in s) else 0,
TypeError: argument of type 'Symbol' is not iterable

最佳答案

我的猜测是,该代码是针对旧版本的 SymPy 编写的,您可以在其中编写类似 x in sin(x) 的内容。现在,这是不允许的,你必须使用has。所以替换应该是

Symbol : lambda e, s: d(e) if s.has(e) else 0,

关于sympy - 使用 Sympy 进行符号矩阵微分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37691989/

相关文章:

前向模式的计算效率自动与数字与符号微分

c++ - C++ 中的解析符号微分

python - 如何使用 Sympy NumPy 打印机?

python - 如何简化 sympy 向量?

python - Sympy 解决域上的所有解决方案

python - 微分运算符可用于矩阵形式,在 Python 模块 Sympy 中

Julia 符号微分

python - 如何在 sympy 中创建一个基于变量的维度的数组?

python - 从 Matlab 到 Python - 求解函数