【问题标题】:How to solve a polynomial expression in python3.5?如何解决python3.5中的多项式表达式?
【发布时间】:2016-01-20 16:43:12
【问题描述】:
from __future__ import division
import math
from sympy import *
d=symbol('d')
x=solve(d**2 - 224*d + 400)
print(x)

您好,我是 python 新手。我刚尝试使用 symPy 求解多项式表达式,但出现以下错误。

Traceback (most recent call last):
  File "C:/Windows/System32/test.py", line 4, in <module>
    d=symbol('d')
TypeError: 'module' object is not callable

请有人帮助我正确的功能。谢谢

【问题讨论】:

    标签: python-3.5


    【解决方案1】:

    您确定您正在运行 python3,并且您的脚本没有命名为与任何其他模块冲突的东西?您的脚本目录中有一个名为 sympy.py 的文件吗? (你不应该)

    我从不使用 import *,你永远不知道会遇到什么样的命名空间错误。这段代码对我来说 100% 有效:

    #!/usr/bin/env python3
    
    import math
    import sympy
    
    d = sympy.Symbol('d')
    x = sympy.solve(d**2 - 224*d + 400)
    print(x)  # Prints [-4*sqrt(759) + 112, 4*sqrt(759) + 112]
    
    x = sympy.solve(d - 10)
    print(x)  # Prints 10
    

    【讨论】:

    • 对不起,我在尝试使用 symplify() 而不是 solve() 时遇到了这个错误。现在我得到的输出类似于 [-4*sqrt(759) + 112, 4* sqrt(759) + 112]。但我需要 d**2 - 224d + 400 来产生 d=1.8。我不应该使用solve()进行这样的评估......如果是这样,请建议任何其他方式来获得结果
    • 恐怕你的数学错误。 sympy.solve() 返回正确的结果。为了确认,您期望 d^2 - 224*d + 400 = 0 解析为 d = 1.8?如果你用 1.8 代替 d,你将得到 0.04。
    • 另外,如果您经常这样做,我强烈建议您花一些时间在sympy docs 或查看Doing Math With Python 一书
    • 抱歉,我无法将代码放入 cmets。我已经编辑了我的示例代码,以向您展示 sympy.solve() 如何在可能的情况下返回单个正确的解决方案。
    【解决方案2】:

    将 Symbol 大写,然后重试。

    【讨论】:

    • 我又遇到了一个错误。 NameError:名称“简化”未定义。有没有其他办法。
    • 通过更正,我可以在 Python 3.4.3 和 Python 2.7.6 上运行代码,并且都可以得到输出 [-4*sqrt(759) + 112, 4*sqrt(759) + 112]。错误信息是简化还是简化?
    • 对不起,我在尝试使用 symplify() 而不是 solve() 时遇到了这个错误。现在我得到与你相同的输出,但我希望显示 1.8..即从 d**2 - 224d + 400 对 d 的评估必须得出 d=1.8。我不应该使用solve()进行这样的评估......如果是这样,请建议任何其他方式来获得结果
    • 您可以使用N 函数来计算表达式。当然,solve 返回一个表达式列表,因此您需要以某种方式处理该列表(例如 for 循环)。我(在python3中)的最短解决方案是将打印行更改为print(list(map(N,x)))。这基本上对python说,获取列表x,将函数N应用于它的每个元素(这就是map所做的),然后从结果中形成一个新的list和print它.在 python 2 中它是print map(N,x)
    【解决方案3】:

    试试d = Symbol('d')。执行symbol('d') 您正在尝试将symbol 子模块用作无效的功能。同样,就像您在 python 3 中一样,您不需要将来的导入

    【讨论】:

    • 我又遇到了一个错误。 NameError:名称“简化”未定义。有没有其他办法。
    • 这很奇怪,只有修改它对我有用
    猜你喜欢
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2017-05-10
    相关资源
    最近更新 更多