最近用Matlab處理實(shí)驗(yàn)數(shù)據(jù),擬合曲線用的較多,。
Excel擬合曲線方程
Excel可以通過畫散點(diǎn)圖,,添加趨勢(shì)線,對(duì)數(shù)據(jù)進(jìn)行簡單的對(duì)數(shù),,線性,,多項(xiàng)式,指數(shù),,冪函數(shù)曲線擬合,,可能不適用于它們的組合,也就是交復(fù)雜的線性,;另一種方法是使用加載項(xiàng)中的規(guī)劃求解,,運(yùn)用統(tǒng)計(jì)和數(shù)值分析知識(shí),確定目標(biāo)函數(shù)和擬合參數(shù)初值,,然后求出最優(yōu)的擬合參數(shù),,畫出散點(diǎn)圖,觀看效果,。
第二種方法,,可以參考用論文《EXCEL及其規(guī)劃求解功能擬合曲線方程》 http://ishare.iask.sina.com.cn/f/18741114.html?from=like
Matlab擬合曲線方程
Matlab擬合曲線,可以使用最優(yōu)化工具箱里的非線性擬合函數(shù)lsqcurvefit(最小二乘法)和 概率論和數(shù)理統(tǒng)計(jì)工具箱里的非線性回歸函數(shù)nlinfit函數(shù)或nlintool函數(shù),,還有直接求最小二乘解,,若是多項(xiàng)式的擬合,,用ployfit函數(shù)。
Matlab的曲線擬合工具箱CFtool使用簡介
注意的是cftool 工具箱只能進(jìn)行單個(gè)變量 的曲線擬合
1. lsqcurvefit
[x,res] = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)
其中,,fun是在M文件中定義的函數(shù),,xdata,ydata為原始數(shù)據(jù),x0是函數(shù)中參數(shù)的初始值,,lb,、ub分別為變量x的下限、上限,;x為參數(shù)的最優(yōu)值,,res是x的殘差平方和sum((fun(x,xdata)-ydata).^2) 1)編寫函數(shù)文件
function Thta = hth(x,ht)
%編寫函數(shù)M文件,內(nèi)容如下
%編寫完畢,,保存為hth.m Thta=(x(3)-x(4))./((1+(x(1).*ht).^x(2)).^(1-(1./x(2))))+x(4); %不運(yùn)行hth.m,,而是進(jìn)行下一步驟,否則提示x未定義 %在命令窗口輸入,以下內(nèi)容
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)定義內(nèi)置函數(shù)
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為原始數(shù)據(jù),,fun是在M文件中定義的函數(shù),beta0是函數(shù)中參數(shù)的初始值,;beta為參數(shù)的最優(yōu)值,,r是各點(diǎn)處的擬合殘差,J為雅克比矩陣的數(shù)值.
%非線性回歸
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.求最小二乘解
%函數(shù)線性組合的曲線擬合方法
%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),根據(jù)數(shù)據(jù)x,y得到一個(gè)n次擬合多項(xiàng)式P(x)的系數(shù),;polyval(p,x)由系數(shù)p(從高次到低次順序)確定的多項(xiàng)式在x個(gè)點(diǎn)上的值
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') |
|