多项式生成

时间:2018-09-14 22:26:03

标签: python numpy

我正在使用numpy.polynomial.Polynomial在域0到0.02上生成二次多项式,以使其适合点(0,0)和(0.02,16)

生成的多项式对象如下:

enter image description here

所以系数为[4. 8. 4.]

如果我运行plt.plot(*pA.linspace(), label="Ascending", color="orange"),则结果符合预期:

enter image description here

但是,如果我将此多项式绘制在另一个工具(例如WolframAlpha)上,结果将完全不同:

http://www.wolframalpha.com/input/?i=4x%5E2%2B8x%2B4+;+0+%3C%3D+x+%3C+0.02

enter image description here

有人可以帮忙吗?相当困惑

根据要求编辑多项式对象,可以使用以下方法获得:

from numpy.polynomial import Polynomial
import matplotlib.pyplot as plt

pA = Polynomial(coef=[4.,8.,4.], domain=[0,0.02])
plt.plot(*pA.linspace(), label="Ascending", color="orange")
plt.show()

2 个答案:

答案 0 :(得分:0)

您可以转换为系数的未缩放且不移位的形式。

In [1]: from numpy.polynomial import Polynomial as P

In [2]: p = P([4.,8.,4.], domain=[0,0.02])

In [3]: p.convert()
Out[3]: Polynomial([     0.,      0.,  40000.], [-1.,  1.], [-1.,  1.])

答案 1 :(得分:0)

一个例子:

p = P( [0, 0, 1], domain=[0, 1], window=[-1, 1] )

分两个步骤执行p(x)

1: domaintowindow: x -> w = 2x - 1  # 0 to -1, 1 to 1
2: [0 0 1] is squaring, w -> w^2

p( x ): x -> w = 2x - 1
          -> w^2  # [0 0 1]
          = (2x - 1)^2  = 4x^2 - 4x + 1  # p.convert()

因此,如果要在另一个系统中使用多项式p(),则需要两个步骤- 不要忘记domaintowindow()

(做一个粗略的草图:
窗口[-1 1]上的w^2是抛物线,中间为0,两端为1;
域[0 1]上的p(x)是一个抛物线,中间为0,结尾为1。)