无法将表达式转换为float

2 python symbolic-math sympy 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)
Run Code Online (Sandbox Code Playgroud)

Aza*_*kov 6

这是PEP-8中关于通配符导入的经典示例:

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

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

当你写作

from sympy import *
Run Code Online (Sandbox Code Playgroud)

你正在你的模块名称空间中导入在sympy顶层提供包的所有东西(并且有很多东西,很多你根本不需要的东西),包括sympy.log类.

下一个声明之后

from math import *
Run Code Online (Sandbox Code Playgroud)

您正在导入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)
Run Code Online (Sandbox Code Playgroud)

给我们

1.0/x
Run Code Online (Sandbox Code Playgroud)

PS:我已经删除了math导入,因为在给定的示例中没有使用它.