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

时间:2013-04-08 00:09:42

标签: python sympy

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

from sympy import *
x = Symbol('x')
y = 1 - (0.1 * coeff1) / (x + 2) - sin(x) * (2 * x + coeff1)
yprime = y.diff(x)

然后我尝试在计算中使用 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

根据mtadd进行一些操作后:

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})

我收到了数字结果,但仍然无法使用更多逻辑。它说:

  

TypeError:无法将表达式转换为float

2 个答案:

答案 0 :(得分:2)

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

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})

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

答案 1 :(得分:0)

我认为这可能会有所帮助Evaluating a mathematical expression in a string我认为yprime被解释为字符串,这篇文章的第一个答案描述了如何将字符串作为算术表达式进行评估。