你似乎误解了多项式拟合的概念。当你打电话
polyfit(x, y, n)
,它所做的是给出最适合点集(x,y)的n次(或更小)多项式。所以通过给polyfit打电话
n = 2
,它将返回符合给定点的最佳二次多项式。这个多项式只是对集合的一个近似值,因此期望返回值与期望值不同,因为二次多项式不能很好地表示它们。
下面的代码直观地演示了这是如何实现的。改变你的观点
n
价值
polyfit()
函数,看看你是否能更好地理解这个概念:
import numpy as np
import matplotlib.pyplot as plt
points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
x = points[:,0]
y = points[:,1]
# calculate polynomial
z = np.polyfit(x, y, 2)
f = np.poly1d(z)
x_fit = np.linspace(-100, 100, 1000)
y_fit = [f(_x) for _x in x_fit]
plt.plot(x, y)
plt.plot(x_fit, y_fit)
plt.show()