[數學建模(七)]使用MATLAB實現數據擬合


 目錄

1.線性最小二乘法

2.多項式擬合方法(polyfit)

3.最小二乘優化:lsqlin,lsqcurvefit,lsqnonlin,lsqnonneg

4.曲線擬合的用戶圖形界面求法(cftool)

 

1.線性最小二乘法

 

x=[19 25 31 38 44]';

y=[19.0 32.3 49.0 73.3 97.8]';

r=[ones(5,1),x.^2];

ab=r\y   % if AB=C then B=A\C

x0=19:0.1:44;

y0=ab(1)+ab(2)*x0.^2;

plot(x,y,'o',x0,y0,'r')

運行結果:

 

2. 多項式擬合方法

 

x0=[1990 1991 1992 1993 1994 1995 1996];

y0=[70 122 144 152 174 196 202];

a=polyfit(x0,y0,1)

y97=polyval(a,1997)

x1=1990:0.1:1997;

y1=a(1)*x1+a(2);

plot(x1,y1)

hold on

plot(x0,y0,'*')

plot(1997,y97,'o')

 

 

3.最小二乘優化

3.1 lsqlin 函數

 

例四:

x=[19 25 31 38 44]';

y=[19.0 32.3 49.0 73.3 97.8]';

r=[ones(5,1),x.^2];

ab=lsqlin(r,y)

x0=19:0.1:44;

y0=ab(1)+ab(2)*x0.^2;

plot(x,y,'o',x0,y0,'r')

3.2 lsqcurvefit 函數

 

(1)定義函數

function f=fun1(x,tdata);

f=x(1)+x(2)*exp(-0.02*x(3)*tdata); %其中x(1)=a,x(2)=b,x(3)=k

(2)主函數

td=100:100:1000;

cd=[4.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59];

x0=[0.2 0.05 0.05];

x=lsqcurvefit(@fun1,x0,td,cd)  % x(1)=a,x(2)=b,x(3)=k

t=100:10:1000;

c=x(1)+x(2)*exp(-0.02*x(3)*t);

plot(t,c)

hold on

plot(td,cd,'*'

3.3 lsqnonlin 函數

 

(1)定義函數

function f=fun2(x);

td=100:100:1000;

cd=[4.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59];

f=x(1)+x(2)*exp(-0.02*x(3)*td)-cd;

(2)主函數

x0=[0.2 0.05 0.05]; %初始值是任意的

x=lsqnonlin(@fun2,x0)

3.4 lsqnonneg 函數

 

c=[0.0372 0.2869;0.6861 0.7071;0.6233 0.6245;0.6344 0.6170];

d=[0.8587;0.1781;0.0747;0.8405];

x=lsqnonneg(c,d)

4. 曲線擬合的用戶圖形界面求法

Matlab 工具箱提供了命令cftool,該命令給出了一維數據擬合的交互式環境。具體

執行步驟如下:

(1)把數據導入到工作空間;

(2)運行cftool,打開用戶圖形界面窗口;

(3)對數據進行預處理;

(4)選擇適當的模型進行擬合;

(5)生成一些相關的統計量,並進行預測。


免責聲明!

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



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