将涉及矢量转置的表达式转换为具有lambdify的数值函数

时间:2016-04-19 22:59:32

标签: python vector sympy

我在python中编写了一个脚本,它使用sympy来计算几个向量/矩阵公式。但是,当我尝试将这些函数转换为我可以使用sympy.lambdify进行评估的函数时,我得到了一个

  

SyntaxError:扫描字符串文字时的EOL

这里有一些代码有相同的错误,所以你可以看到我的意思。

import sympy
x = sympy.MatrixSymbol('x',3,1)
f = sympy.lambdify(x, x.T*x)

因此,语法错误与表达式" x' .dot(x)"有关。以及" .T"的转换到'。

如何解决这个问题,从上面的lambdify中正确定义f?

2 个答案:

答案 0 :(得分:2)

找到一个解决方案,虽然不是最干净的解决方案......但它确实有效。

使用sympy中的implemented_function()方法定义您的函数。阅读完整文档:http://docs.sympy.org/latest/modules/utilities/lambdify.html

以下是代码:

import sympy
import numpy as np
from sympy.utilities.lambdify import implemented_function


x = sympy.MatrixSymbol('x',3,1)

f = implemented_function(sympy.Function('f'), lambda x: x.T*x)

lam_f= sympy.lambdify(x, f(x))

希望这能解决您的问题:)

答案 1 :(得分:1)

已在sympy版本> = 1.1

中解决

编辑:

实施例

当你定义这个 x = sympy.MatrixSymbol('x',3,1) 你正在创建一个矩阵,

您可以使用检查其索引和形状 print(sympy.Matrix(x))

现在你想要将x的Transpose乘以x,你必须给x一个你之前定义的相同形状的矩阵

这里试试这个:

from sympy import MatrixSymbol, lambdify, Matrix
x = MatrixSymbol('x', 3, 1)
f = lambdify(x, x.T*x)
a = Matrix([[1], [2], [3]])
print(f(a))

您可以查看此链接以更好地了解lambdify: http://docs.sympy.org/latest/modules/utilities/lambdify.html