自定義離散點進行指定多項式函數擬合
用戶自己自己輸入坐標點,擬合函數可根據用戶輸入的多項式的最高次方進行自動擬合函數,擬合方法采用最小二乘法進行函數擬合。
(1,2),(2,5),(3,10),(4,17),(5,26),(6,37)(7,50),(8,65),(9,82)
很顯然是函數為二次函數,y=x^2+1
代碼中,f1 = np.polyfit(x, y, 2)
,2表示使用二次函數進行擬合
import numpy as np
import matplotlib.pyplot as plt#定義x、y散點坐標
x = [1,2,3,4,5,6,7,8,9]
x = np.array(x)
print('x is :\n',x)num = [2,5,10,17,26,37,50,65,82]y = np.array(num)
print('y is :\n',y)#用多次多項式擬合
f1 = np.polyfit(x, y, 2)
print('f1 is :\n',f1)
p1 = np.poly1d(f1)
print('p1 is :\n',p1)#也可使用yvals=np.polyval(f1, x)
yvals = p1(x) #擬合y值
print('yvals is :\n',yvals)#繪圖
plot1 = plt.plot(x, y, 's',label='original values')
plot2 = plt.plot(x, yvals, 'r',label='polyfit values')
plt.xlabel('grade')
plt.ylabel('value')
plt.legend(loc=4) #指定標識的位置(1為右上角,2為左上角,3為左下角,4為右下角)
plt.title('Color fastness grade')
plt.show()
運行效果如下: