【问题标题】:Why is numpy's root failing?为什么numpy的root失败了?
【发布时间】:2016-07-27 20:59:37
【问题描述】:

定义多项式

# a specific polynomial x**0 + x**1 + x**2 + x**3
p = [1, -2.8176255165067872, -0.97639120853458261, -0.86023870029448335]

这里有一个简洁的例子来说明差异,

import numpy as np
r1 = np.roots(p); r2 = np.polynomial.polynomial.polyroots(p)
f = lambda x: np.sum([x**i*j for i,j in enumerate(p)])

print "{:>10} {:>10}".format("roots","polyroots")
for i,j in zip(r1, r2): # test should return 0
    print "{:10.5f} {:10.5f}".format(np.abs(f(i)),np.abs(f(j)))

输出显然不为零

     roots  polyroots
  46.41221    0.00000
   1.97595    0.00000
   1.97595    0.00000

比较的正确案例

相比之下,Mathematica 正确地获得了根:

fn[x_] := 1.` - 2.817625516506788` x - 0.97639120853458261` x^2 - 0.8602387002944835` x^3
Roots[fn[x] == 0, x]

提供根为:

x == -0.723475 - 1.78978 I || x == -0.723475 + 1.78978 I || x == 0.311926

测试验证了这一点:

fn[-0.7234748700272414` - 1.7897835665374093` I]
-4.44089*10^-16 - 2.66454*10^-15 

【问题讨论】:

  • 作为旁注:p = [1, -2.8176255165067872, 2.6797211079532777, -0.86023870029448335]np.root提供了一个体面的答案
  • 似乎认为numpy 文档不正确。 np.roots 需要 reversed() 数组作为输入
  • 你说得对,np.roots 需要一个反转数组——但我认为文档在这方面是完全准确的......
  • @mgilson 你是完全正确的。仔细查看文档是正确的。我花了一个小时读错了!

标签: python numpy polynomial-math polynomials


【解决方案1】:

numpy.polynomial 中的代码比numpy.roots(和numpy.poly1d 等)更新。在新的多项式代码中,更改了系数顺序的约定。在新代码中,系数是按递增顺序给出的,而在旧代码中,首先给出最高阶的系数。

In [98]: p = [1, -2.8176255165067872, -0.97639120853458261, -0.86023870029448335]

In [99]: np.roots(p[::-1])
Out[99]: array([-0.72347487+1.78978357j, -0.72347487-1.78978357j,  0.31192616+0.j        ])

In [100]: np.polynomial.polynomial.polyroots(p)
Out[100]: array([-0.72347487-1.78978357j, -0.72347487+1.78978357j,  0.31192616+0.j        ])

【讨论】:

  • 不错的沃伦。我们大约在同一时间到达那里,这令人印象深刻,因为我领先了整整一小时:)
  • 该文档在我看来是正确的。你发现了什么问题?
  • 我认为这是阅读我期望看到的而不是实际存在的情况。我认为polynomial 变体是应该使用的变体,因为它似乎更准确
  • 我没有听说polynomial模块中的代码更准确,但我并不是说不是。这可能是 numpy 邮件列表的问题。
猜你喜欢
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
相关资源
最近更新 更多