Python:将表达式解释为文本,而不是计算它

Python:将表达式解释为文本,而不是计算它,python,sympy,Python,Sympy,使用SyMpy库后,我收到一个表达式(在yprime变量中) 然后我尝试在计算中使用yprime,但Python将其解释为一个文本:-(2*x+1.0)*cos(x)-2*sin(x)+0.1/(x+2)**2 如何计算-(2*x+1.0)*cos(x)-2*sin(x)+0.1/(x+2)**2 根据以下内容进行一些操作后: 我收到一个数字结果,但仍然无法用进一步的逻辑操作。它说: TypeError:无法将表达式转换为浮点 我认为这可能会有所帮助。我认为yprime被解释为字符串,这篇文章的

使用SyMpy库后,我收到一个表达式(在yprime变量中)

然后我尝试在计算中使用yprime,但Python将其解释为一个文本:-(2*x+1.0)*cos(x)-2*sin(x)+0.1/(x+2)**2

如何计算-(2*x+1.0)*cos(x)-2*sin(x)+0.1/(x+2)**2

根据以下内容进行一些操作后:

我收到一个数字结果,但仍然无法用进一步的逻辑操作。它说:

TypeError:无法将表达式转换为浮点


我认为这可能会有所帮助。我认为yprime被解释为字符串,这篇文章的第一个答案描述了如何将字符串作为算术表达式计算。

调用符号表达式上的方法
subs
,以计算分析表达式。您可以调用分析表达式上的
evalf
,以获得Python浮点中的数值解。下面是从上面输入输入(coeff1=1.0)后从isympy输出的一些示例

以下节目:

from sympy import *
x, C1 = symbols('x C1')
y = 1-(0.1*C1)/(x+2)-sin(x)*(2*x+C1)
print y.diff(x).evalf(subs={x:pi/2,C1:1})

使用Symphy版本0.7.2和python 2.7.3打印-1.99215722345589。

可能会,但这是一种漫长而乏味的方式。可能应该有更短的方法?另一个有效的表达式是
yprime.evalf(subs={x:2*pi})
不幸的是,方法
subs
evalf
返回相同的表达式:-(2*x+1.0)*cos(x)-2*sin(x)+0.1/(x+2)**2我正在使用Symphy版本0.7.2,请使用
import Symphy检查您的版本;打印sympy.\uuuuu version\uuuuuu
Mine-too 0.7.2和Python 2.7。试试我在上面的答案末尾添加的4行脚本。你能更具体地说明是什么代码导致了TypeError吗?你所拥有的应该有用。
from sympy import *
x, coeff1 = symbols('x coeff1')
y = 1 - (0.1 * coeff1) / (x + 2) - sin(x) * (2 * x + coeff1)
yprime = y.diff(x).evalf(subs={x:0,coeff1:1})
In [18]: yprime
Out[18]:
                                   0.1
-(2⋅x + 1.0)⋅cos(x) - 2⋅sin(x) + ────────
                                        2
                                 (x + 2)

In [19]: yprime.subs(x,2*pi)
Out[19]:
                0.1
-4⋅π - 1.0 + ──────────
                      2
             (2 + 2⋅π)

In [20]: yprime.subs(x,2*pi).evalf()
Out[20]: -13.5649131254944
from sympy import *
x, C1 = symbols('x C1')
y = 1-(0.1*C1)/(x+2)-sin(x)*(2*x+C1)
print y.diff(x).evalf(subs={x:pi/2,C1:1})