برای مطالعه مبحث «چندجملهایهای حداقل مربعات» به کتاب «کاربرد ریاضیات در مهندسی شیمی - روش های عددی» که دکتر خراط نوشته اند مراجعه کنید. البته منابع مختلف دیگری هم در اینترنت موجود هست که به طور کامل توضیح داده اند. در کتاب دکتر خراط تمام روش های عددی و ریاضیاتی به طور مفصل و به همراه مثال توضیح داده شده اند که واقعا عالی هست.
مثال: از پنج نقطه داده شده در زیر یک سهمی از روش حداقل مجموع مربعات خطا بدست آورید:
(-2,4) , (-1,3) , (2,4) , (3,1) , (4,2)
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit # Use non-linear least squares to fit a function, f, to data.
xdata=np.array([-2,-1,2,3,4]) # fit this data with a function
ydata=np.array([4,3,4,1,2])
def func(x,p1,p2,p3):
return p1*x**2+p2*x+p3 # I’d like to fit this function using nonlinear least squares.
popt,pcov=curve_fit(func,xdata,ydata,p0=(3,1,2))
print('parrameters=',popt) # The variable popt contains the fit parameters
p1=popt[0]
p2=popt[1]
p3=popt[2]
residuals = func(xdata,p1,p2,p3)-ydata
print('residuals=',residuals)
fres = sum(residuals**2)
print('fres=',fres)
xfit = np.linspace(-3,6)
yfit = func(xfit, popt[0], popt[1], popt[2])
plt.plot(xdata,ydata,'r.')
plt.plot(xfit,yfit,'b-')
plt.show()
خروجی:
parrameters= [-0.06280788 -0.21305419 3.48275862]
residuals= [-0.34236453 0.63300493 -1.19458128 1.27832512 -0.37438424]
fres= 3.71921182266
منابع تکمیلی:
http://www.walkingrandomly.com/?p=5215
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html