我正在使用numpy.polynomial.Polynomial在域0到0.02上生成二次多项式,以使其适合点(0,0)和(0.02,16)
生成的多项式对象如下:
所以系数为[4. 8. 4.]
如果我运行plt.plot(*pA.linspace(), label="Ascending", color="orange")
,则结果符合预期:
但是,如果我将此多项式绘制在另一个工具(例如WolframAlpha)上,结果将完全不同:
http://www.wolframalpha.com/input/?i=4x%5E2%2B8x%2B4+;+0+%3C%3D+x+%3C+0.02
有人可以帮忙吗?相当困惑
根据要求编辑多项式对象,可以使用以下方法获得:
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()
答案 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。)