无法将表达式转换为float

时间:2017-05-30 13:38:48

标签: python sympy symbolic-math derivative

我正在尝试学习python中的符号操作的来龙去脉(我是初学者)。

我有以下基本代码,输出给我一个错误,告诉我它“无法将表达式转换为浮动”。

此代码出了什么问题:

from sympy import *
from math import *

def h(x):
    return log(0.75392 * x)

x = symbols('x')
hprime = h(x).diff(x)

print(hprime)

2 个答案:

答案 0 :(得分:5)

这是PEP-8关于通配符导入的一个典型例子:

  

应避免使用通配符导入(from <module> import *),因为它们不清楚命名空间中存在哪些名称,使读者和许多自动化工具都感到困惑。

问题是您需要使用sympy.log类,但使用math.log函数代替float个对象,而不是Symbol个对象。

写作时

from sympy import *

您正在模块命名空间中导入sympy包裹在顶层提供的所有内容(并且有许多内容,大部分内容根本不需要),包括{{1 }。class。

下一个陈述后

sympy.log

您要导入from math import * 模块中的所有内容,包括math,它会覆盖以前导入的math.log类。

考虑到这一点,您的示例可能写成

sympy.log

给我们

import sympy


def h(x):
    return sympy.log(0.485022 * x)


x = sympy.symbols('x')
h_x = h(x)
hprime = h_x.diff(x)

print(hprime)

<强> P上。 S。:我已删除1.0/x 导入,因为它未在给定示例中使用。

答案 1 :(得分:2)

这里的问题是sympymath包都定义了一个名为log的函数。

将其导入为from sympy import *,然后from math import *会将sympy.log覆盖为math.log

最好始终使用import sympy,然后调用您的函数sympy.log或(如果像我一样懒惰)执行import sympy as sym,然后sym.log。一定要使用数学包。这种方法将在未来为您节省大量麻烦,并使您的代码更易于理解。