最小二乘法擬合非線性函數及其Matlab/Excel 實現(轉)


1、最小二乘原理

  Matlab直接實現最小二乘法的示例:  

復制代碼
close
x = 1:1:100;
a = -1.5;
b = -10;
y = a*log(x)+b;
yrand = y + 0.5*rand(1,size(y,2));

%%最小二乘擬合
xf=log(x);
yf=yrand;

xfa = [ones(1,size(xf,2));xf]
w = inv(xfa*xfa')*xfa*yf';%直接擬合得到的結果
復制代碼

 

  參考資料:

  1、http://blog.csdn.net/lotus___/article/details/20546259

  2、http://blog.sina.com.cn/s/blog_5404ea4f0101afth.html

 

2、matlab調用函數實現最小二乘法

利用matlab的最小二乘擬合函數對非線性函數進行擬合,具體地擬合的函數:

[q r] = lsqcurvefit(fun, q_0, xdata, ydata);
輸入參數:
fun:需要擬合的函數,假定有n個需要擬合的參數,那么 q = [q1,q2,...,qn]
q_0:表示用戶給定的一個起始點
xdata:函數的自變量
ydata:函數的因變量
輸出參數:
q:表示求解得到的最優參數
r:表示最小二乘的目標函數值,即殘差。

實現代碼

復制代碼
close
x = 1:1:100;
a = -1.5;
b = -10;
y = a*log(x)+b;
plot(x,y);

yrand = y + 0.5*rand(1,size(y,2));
plot(x,yrand,'ro');

%%最小二乘擬合
xf=log(x);
yf=yrand;
f=inline('a(1)+a(2).*x','a','x');
[q,r]=lsqcurvefit(f,[1,0],xf,yf)
plot(x,yrand,'ro','LineWidth',2) %繪制圖表
hold on;

%%繪制擬合曲線
yn = q(1)+q(2)*log(x);
hold on;
plot(x,yn,'b','LineWidth',2);

%%設置Legend
hleg = legend(['原始函數(y=' num2str(b,3) '+' num2str(a,3) 'ln(x)' ')數據'],['擬合結果:y=' num2str(q(1),3) '+' num2str(q(2),3) 'ln(x)'],'Location','NorthEast');%本身不能設置字體的大小,需要通過set進行設置
set(hleg,'FontSize', 15, 'FontAngle','italic','FontWeight','bold',...
     'TextColor',[.6,.2,.1],'Color',[1,1,1]);%Color為設置坐標的背景顏色
 
 %%設置標題
 title('最小二乘擬合:y=a+b*ln(x)','Color','k','FontSize',20);
 
 %%坐標軸標題設置
 xlabel('x','Color','k','FontSize',15);%橫軸標題
 ylabel('y','Color','k','FontSize',15);%縱軸標題
 
%%保存圖像
set(1, 'InvertHardCopy', 'off');%設置的背景色有效,如果為on則圖形不保存背景色,maltab 默認為 on
filename = 'lnx';
print(1, '-djpeg', filename);%其他格式 -djpeg,-dpng,-dbmp,-dtiff,-dgif
復制代碼

   附件:最小二乘matlab.zip

 

擬合結果

如下圖所示

 

3、Excel的實現

使用 lenest函數進行最小二乘擬合,對以上生成的數據進行擬合,擬合結果和matlab是一致的。

已知擬合函數y=ax+b,那么

斜率計算公式為:

  a = lenest(ydata,xdata,,FALSE)

截距計算公式為:

  b = index(lenest(ydata,xdata),,FALSE),2)

 

擬合的代碼,請查閱附件:最小二乘擬合.xlsx,包含了帶噪聲的原始數據,擬合公式,擬合結果圖

擬合結果如下圖所示:

 

 

http://www.cnblogs.com/cv-pr/p/4741262.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM