通过www.example.com()获得的多项式导数numpy.polynomial.polynomial.Polynomial.fit给出了错误的值

5f0d552i  于 2023-03-02  发布在  其他
关注(0)|答案(2)|浏览(109)

我从一组点得到一个一次多项式(一条线),并使用line.deriv()得到导数,我期望de derivative是系数[1],但得到的却是一个不同的数字

x = [1, 2, 3]
y = [0.1, 0.3, 0.6]

line = np.polynomial.polynomial.Polynomial.fit(x, y, 1)
print(line)
print(line.deriv())

回馈:

poly([0.33333333 0.25      ])
poly([0.25])

这是对的但如果我再加一点

x = [1, 2, 3, 4]
y = [0.1, 0.3, 0.6, 0.7]

line = np.polynomial.polynomial.Polynomial.fit(x, y, 1)
print(line)
print(line.deriv())

回馈:

poly([0.425 0.315])
poly([0.21])

这似乎不对
我没看到什么?

ecfsfe2w

ecfsfe2w1#

您看到的是 * 缩放域 * 中的系数,参见文档的最后一段:
请注意,系数是在窗口与域之间的线性Map定义的缩放域中给出的。convert可用于获得未缩放数据域中的系数。
为了得到“通常”的系数,你需要

print(line.convert().coef)

这给出了预期的[-0.1 0.21]
顺便说一句,IPython显示了line的一个非常丰富的输出:

wfauudbj

wfauudbj2#

事实上,Stef的答案告诉您,系数是使用线性Map缩放的。您可以查看deriv的源代码。https://github.com/numpy/numpy/blob/8cec82012694571156e8d7696307c848a7603b4e/numpy/polynomial/_polybase.py#L882
off, scl = self.mapparms()
offscl分别表示偏移和缩放。
因此,如果您希望获得例外的行为,则必须提供一个等于域的窗口,如下所示:

>>> line = np.polynomial.polynomial.Polynomial.fit(x, y, 1, domain [-1,1],window=[-1,1])
>>> line
Polynomial([-0.1 ,  0.21], domain=[-1.,  1.], window=[-1.,  1.], symbol='x')
>>> line.deriv()
Polynomial([0.21], domain=[-1.,  1.], window=[-1.,  1.], symbol='x')

相关问题