Matlab曲線擬合

     最近用Matlab處理實驗數據,擬合曲線用的較多。
    
  Excel擬合曲線方程
 
     Excel可以通過畫散點圖,添加趨勢線,對數據進行簡單的對數,線性,多項式,指數,冪函數曲線擬合,可能不適用於它們的組合,也就是交複雜的線性;另一種方法是使用加載項中的規劃求解,運用統計和數值分析知識,確定目標函數和擬合參數初值,然後求出最優的擬合參數,畫出散點圖,觀看效果。
     第二種方法,可以參考用論文《EXCEL及其規劃求解功能擬合曲線方程》   http://ishare.iask.sina.com.cn/f/18741114.html?from=like
   
   Matlab擬合曲線方程
   Matlab擬合曲線,可以使用最優化工具箱裏的非線性擬合函數lsqcurvefit(最小二乘法)和 概率論和數理統計工具箱裏的非線性迴歸函數nlinfit函數或nlintool函數,還有直接求最小二乘解,若是多項式的擬合,用ployfit函數。
  
    Matlab的曲線擬合工具箱CFtool使用簡介
    注意的是cftool 工具箱只能進行單個變量 的曲線擬 
 
 1.  lsqcurvefit
 [x,res] = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)
其中,fun是在M文件中定義的函數,xdata,ydata爲原始數據,x0是函數中參數的初始值,lb、ub分別爲變量x的下限、上限;x爲參數的最優值,res是x的殘差平方和sum((fun(x,xdata)-ydata).^2)
 
1)編寫函數文件
 function Thta = hth(x,ht)
 %編寫函數M文件,內容如下
%編寫完畢,保存爲hth.m
 Thta=(x(3)-x(4))./((1+(x(1).*ht).^x(2)).^(1-(1./x(2))))+x(4);

%不運行hth.m,而是進行下一步驟,否則提示x未定義
%在命令窗口輸入,以下內容
ht=[0 27.2 53.04 62.56 69.36 81.60 95.20 108.80 126.48 159.12 197.20 251.60 262.48 286.96 359.04 452.88 503.20];
th=[476 434 406 401 392 382 365 351 335 312 287 271 261 253 252 236 234]*0.001;
x0=[0.1 1.5 0.5 0.1];
x1=[0 1 0 0];
x2=[5 5 1 1];
[x resnorm]=lsqcurvefit(@hth,x0,ht,th,x1,x2)
 
2)定義內置函數
      f=inline(fun,'參變量','自變量')
 fx=inline('(x(3)-x(4))./((1+(x(1).*ht).^x(2)).^(1-(1./x(2))))+x( 4)','x','ht');
ht=[0 27.2 53.04 62.56 69.36 81.60 95.20 108.80 126.48 159.12 197.20 251.60 262.48 286.96 359.04 452.88 503.20];
th=[476 434 406 401 392 382 365 351 335 312 287 271 261 253 252 236 234]*0.001;
x0=[0.1 1.5 0.5 0.1];
x1=[0 1 0 0];
x2=[5 5 1 1];
[x,res]=lsqcurvefit(f,x0,ht,th,x1,x2)
y1=fx(x,ht);
plot(th,ht,' o',y1,ht,'-')
 
 
2.nlinfit
  [beta,r,J] = nlinfit(x,y,fun,beta0)
 其中,x,y爲原始數據,fun是在M文件中定義的函數,beta0是函數中參數的初始值;beta爲參數的最優值,r是各點處的擬合殘差,J爲雅克比矩陣的數值.
%非線性迴歸
fun=inline('(x(3)-x(4))./((1+(x(1).*ht).^x(2)).^(1-(1./x(2))))+x(4)','x','ht');
ht=[0 27.2 53.04 62.56 69.36 81.60 95.20 108.80 126.48 159.12 197.20 251.60 262.48 286.96 359.04 452.88 503.20];
th=[476 434 406 401 392 382 365 351 335 312 287 271 261 253 252 236 234]*0.001;
x0=[0.1 1.2 0.5 0.1];
[x,r,J]=nlinfit(ht,th,fun,x0);
x
R=sum(r.^2)                        %誤差平方和
y=fun(x,ht);  
plot(th,ht,'*',y,ht,'-r')
 
3.求最小二乘解
 
%函數線性組合的曲線擬合方法
%y(x)=c1+c2*exp(-3*x)+c3*cos(-2*x).*exp(-4*x)+c4*x.^2
x=[0 0.2 0.4 0.7 0.9 0.92 0.99 1.2 1.4 1.48 1.5]';
y=[2.88 2.2576 1.9683 1.9258 2.0862 2.109 2.1979 2.5409 2.9627 3.155 3.2052]';
A=[ones(size(x)),exp(-3*x),cos(-2*x).*exp(-4*x),x.^2];
c=A\y;                                                    %最小二乘解
c1=c'
x0=[0:0.01:1.5]';
A1=[ones(size(x0)),exp(-3*x0),cos(-2*x0).*exp(-4*x0),x0.^2];
y1=A1*c;
plot(x0,y1,x,y,'rx');
 
4.polyfit
 
plot(x,y,n),根據數據x,y得到一個n次擬合多項式P(x)的係數;polyval(p,x)由係數p(從高次到低次順序)確定的多項式在x個點上的值
x=1:0.5:5;
y=[2.6 3.3 3.7 4.0 4.1 4.0 3.8  3.3 2.8];
p=polyfit(x,y,2)
y1=polyval(p,x);
plot(x,y1,x,y,'ro')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章