【问题标题】:Using Python to solve a 5th order polynomial使用 Python 求解 5 阶多项式
【发布时间】:2013-11-23 15:41:27
【问题描述】:

我认为从标题中可以清楚地看出我要完成的工作。那么,让我们继续编写代码:

import math

import numpy as np

import scipy

#from scipy import scipy.optimize.fsolve as sci_solve



x0 = -5

def function(x):

    x**5 + x**4 + x**3 + x**2 + x + 1

#print sci_solve(function, x0)

print scipy.optimize.fsolve(function, x0)

好的,所以当我运行此代码时,我得到 [-5.]。它什么时候简单地打印了我的初始值,而不是这个方程的根?此外,当我在包含代码 #from scipy import scipy.optimize.fsolve as sci_solve 和 print sci_solve(function, x0) 的行之前运行不带 # 的代码时,它给了我一个语法错误。

我做错了什么?

正如 hcwhsa 所指出的,我忽略了向读者介绍我正在使用的 python 版本,对此我感到非常抱歉。我使用的是 2.7 版

【问题讨论】:

    标签: python syntax compiler-errors syntax-error


    【解决方案1】:

    在这个问题之前我从未真正听说过scipy 模块(所以谢谢你),但从http://folk.uio.no/inf3330/scripting/doc/python/SciPy/tutorial/old/node18.html 给出的示例代码看来,您需要在之前添加return 语句def function(x): 之后给出的多项式。

    【讨论】:

    • 好的,这有点帮助。它没有返回 x0 值,而是返回 [-1.]。但是,我无法想象这是方程 0 = x^5 + x^4 + x^3 + x^2 + x + 1 的唯一根
    • 看到这个Wolfram Alpha link。 -1 是唯一(真正的)解决方案。
    • 哦,原来如此。谢谢。
    【解决方案2】:

    一种方法:

    from scipy import *
    
    x0 = -5
    p = poly1d([1, 1, 1, 1, 1, 1])
    
    # evaluate for x = x0
    p(x0)
    
    # get roots
    roots(p)
    

    这为您提供了所有根源,包括复杂的根源。如果你只想要真正的根,你可以遍历 root(p)(它是一个数组)并检查每个项目的 imag 属性是否为 0.0。

    【讨论】:

      猜你喜欢
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 2012-11-29
      • 2021-07-07
      • 1970-01-01
      相关资源
      最近更新 更多