如何解决numpy polynomial.Polynomial.fit() 给出与 polynomial.polyfit()
我不明白为什么 polynomial.Polynomial.fit() 给出的系数与预期的系数非常不同:
import numpy as np
x = np.linspace(0,10,50)
y = x**2 + 5 * x + 10
print(np.polyfit(x,y,2))
print(np.polynomial.polynomial.polyfit(x,2))
print(np.polynomial.polynomial.Polynomial.fit(x,2))
给出:
[ 1. 5. 10.]
[10. 5. 1.]
poly([60. 75. 25.])
前两个结果没问题,多亏了 this answer,我才明白为什么两个数组的顺序相反。
但是,我不明白第三个结果的含义。尽管我通过这种方式得到的多项式似乎给出了正确的预测值,但系数看起来是错误的。
解决方法
当然,答案稍微隐藏在文档中。看着 class numpy.polynomial.polynomial.Polynomial(coef,domain=None,window=None)
很明显,通常系数 [a
,b
,c
,...] 是针对多项式 a + b * x + c * x**2 + ...
。但是,关键字参数 domain
和 window
均默认为 [-1,1]
。我不是那个班级,所以我不确定目的,但很明显发生了重新映射。现在在 polynomial.Polynomial.fit()
的情况下,有一个类方法可以自动将 x
数据作为域,但仍然映射到窗口。因此,在 OP 中,[0-10]
被映射到 [-1,1]
。这是由 x = x' / 5 - 1
或 x' -> 5 * x + 5
完成的。将后者放入OP多项式我们得到
( 5 x' + 5 )**2 + 5 * ( 5 * x' + 5 ) + 10 = 25 * x'**2 + 75 * x' + 60
瞧。
要得到预期的结果,必须投入
print(np.polynomial.polynomial.Polynomial.fit(x,y,2,window=[0,10] ) )
至善至美
poly([10. 5. 1.])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。