我不明白为什么 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, y, 2))
print(np.polynomial.polynomial.Polynomial.fit(x, y, 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]
.我不是那个类(class),所以我不确定目的,但很明显发生了重新映射。现在在 polynomial.Polynomial.fit()
的情况下有一个类方法可以自动获取 x
data 作为域,但仍然映射到窗口。因此,在 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.])
关于python - numpy polynomial.Polynomial.fit() 给出与 polynomial.polyfit() 不同的系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67371614/