1. 程式人生 > >關於Matlab中的線性與非線性最小二乘擬合

關於Matlab中的線性與非線性最小二乘擬合

1、線性最小二乘擬合

最小二乘法(又稱最小平方法)是一種數學優化技術,其通過最小化誤差的平方和尋找資料的最佳函式匹配。利用最小二乘法可以簡便地求得未知的資料,並使得這些求得的資料與實際資料之間誤差的平方和為最小。最小二乘法通過變數的資料來描述變數之間的相互關係。例如通過描述x、y之間的相互關係。

常見的多項式擬合曲線有:直線、多項式、雙曲線、指數曲線。Matlab中的最小二乘函式:P=polyfit(x,y,n)(n=1時為),[P Smu]=polyfit(x,y,n),polyval(P,t)返回n次多項式在t處的值(plot(t, polyval(P,t)。P-返回n次擬合多項式係數從高到低依次存放於向量P中,S-包含三個值其中normr是殘差平方和,mu-包含兩個值mean(x)均值,std(x)標準差。

2、非線性擬合

超定方程組(方程組的個數大於未知數的個數),Matlab中提供lsqcurvefit和lsqnonlin兩個非線性最小二乘擬合函式,兩者的區別在於其定於的函式f(x)不一樣。

非線性曲線擬合lsqcurvefit用以求含參量x(向量)的向量值函式F(x,xdata)=(F(x,xdata1),…,F(x,xdatan))T中的參變數x(向量),使得:

最小

其輸入格式有:

(1)x = lsqcurvefit (‘fun’,x0,xdata,ydata);

(2)x =lsqcurvefit (‘fun’,x0,xdata,ydata,options);

(3)x = lsqcurvefit (‘fun’,x0,xdata,ydata,options,’grad’);

(4)[x, options] = lsqcurvefit (‘fun’,x0,xdata,ydata,…);

(5)[x, options,funval] = lsqcurvefit (‘fun’,x0,xdata,ydata,…);

(6)[x, options,funval, Jacob] = lsqcurvefit (‘fun’,x0,xdata,ydata,…);

其中fun為事先建立的函式F(x,xdata)的M-檔案x0為迭代初始值,xdata、ydata為已知資料點、options為無約束優化。

非線性最小二乘擬合lsqnonlin用以求含參量x(向量)的向量值函式f(x)=(f1(x),f2

(x),…,fn(x))T中的參量x,使得:

最小

其中

其輸入格式為:

(1)x=lsqnonlin(‘fun’,x0);

(2)x= lsqnonlin (‘fun’,x0,options);

(3)x= lsqnonlin (‘fun’,x0,options,’grad’);

(4)[x,options]=lsqnonlin(‘fun’,x0,dwx,upx,options,Y);

其中,fun為建立的M檔案,x0為初始值,dwx、upx為上、下限,options為無約束優化,Y為傳入fun的引數值。

無約束優化options的設定options=optimset(‘optionName’,’optionValue’),例如options = optimset('Display','iter','TolFun',1e-8)使得優化函式值的誤差為1e-8,iter改為off不顯示迭代過程。options = optimset('param1',value1,'param2',value2,...)