MATLAB曲線擬合(含實(shí)例)_第1頁(yè)
MATLAB曲線擬合(含實(shí)例)_第2頁(yè)
MATLAB曲線擬合(含實(shí)例)_第3頁(yè)
MATLAB曲線擬合(含實(shí)例)_第4頁(yè)
MATLAB曲線擬合(含實(shí)例)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

[matlab曲線擬合(含實(shí)例)]matlab曲線擬合-非常好非常全面的介紹M擬合的參考資料MathworksTech-Note1508曲線擬合向?qū)?.介紹2.Mathworks產(chǎn)品的曲線擬合特色a.曲線擬合工具箱(CurveFittingToolbox)b.Matlab內(nèi)建函數(shù)與其他的帶有曲線擬合能力的附加產(chǎn)品(工具箱)c.線性曲線擬合d.非線性曲線擬合3.加權(quán)曲線擬合方法a.曲線擬合工具箱b.統(tǒng)計(jì)工具箱c.優(yōu)化工具箱4.利用曲線擬合工具箱提高曲線擬合結(jié)果5.其他的相關(guān)資料第1節(jié):簡(jiǎn)介MATLAB即有內(nèi)建的解決很多通常遇到的曲線擬合問(wèn)題的能力,又具有附加這方面的產(chǎn)品。本技術(shù)手冊(cè)描述了幾種擬合給定數(shù)據(jù)集的曲線的方法,另外,本手冊(cè)還解釋了加權(quán)曲線擬合、針對(duì)復(fù)數(shù)集的曲線擬合以及其他一些相關(guān)問(wèn)題的擬合技巧。在介紹各種曲線擬合方法中,采用了典型例子的結(jié)合介紹。第2節(jié):MathWorks產(chǎn)品的曲線擬合特色MATLAB有可以用于曲線擬合的內(nèi)建函數(shù)。MathWorks公式也提供了很多工具箱可以用于曲線擬合。這些方法可以用來(lái)做線性或者非線性曲線擬合。MATLAB也有一個(gè)開(kāi)放的工具箱――曲線擬合工具箱(CurveFittingToolbox),她可以用于參數(shù)擬合,也可以用于非參數(shù)擬合。本節(jié)將介紹曲線擬合工具箱與其他工具箱、以及各種MATLAB可以用于曲線擬合的內(nèi)建函數(shù)的詳細(xì)特征。a.曲線擬合工具箱曲線擬合工具箱是專門(mén)為數(shù)據(jù)集合進(jìn)行曲線擬合而設(shè)計(jì)的。這個(gè)工具箱集成了用MATLAB建立的圖形用戶界面(GUIs)和M文件函數(shù)。曲線擬合向?qū)enial@USTC2004-4-18?利用工具箱的庫(kù)方程(例如線性,二次,高階多項(xiàng)式等)或者是用戶自定義方程(局限于用戶的想象力)可以進(jìn)行參數(shù)擬合。當(dāng)你想找出回歸系數(shù)以及他們背后的物理意義的時(shí)候就可以采用參數(shù)擬合。?通過(guò)采用平滑樣條或者其他各種插值方法,你就可以進(jìn)行非參數(shù)擬合。當(dāng)回歸系數(shù)不具有物理意義并且不在意他們的時(shí)候,就采用非參數(shù)擬合方法。曲線擬合工具箱提供了如下功能:?數(shù)據(jù)回歸,譬如截面(?sectioning)與平滑;?標(biāo)準(zhǔn)線性最小二乘擬合,非線性最小二乘擬合,加權(quán)最小二乘擬合,約束二乘(constrainedleastsquares)擬合以及穩(wěn)?。╮obust)擬合;?根據(jù)諸如R2以及誤差平方和(SSE)確定的擬合性能的統(tǒng)計(jì)特征。請(qǐng)查閱曲線擬合工具箱提供的demos。b.MATLAB內(nèi)建函數(shù)與具有曲線擬合能力的其他工具箱除了曲線擬合工具箱,MATALB與其他工具箱也提供了些可以用于解決線性和非線性曲線擬合的功能。本節(jié)列舉并解釋了其中幾個(gè)。c.利用MATLAB內(nèi)建函數(shù)進(jìn)行線性曲線擬合函數(shù)描述polyfit用多項(xiàng)式進(jìn)行數(shù)據(jù)擬合。polyfit(X,Y,N)對(duì)數(shù)據(jù)X,Y擬合N階多項(xiàng)式系數(shù),P(X(I))~=Y(I),在最小二乘意義上。\反斜線或者矩陣陣左除。如果A是一個(gè)方陣,A\B基本上與inv(A)*B一致的,是采用的不同計(jì)算方式而已。polyval在給定點(diǎn)計(jì)算多項(xiàng)式的值corrcoef計(jì)算兩個(gè)向量的相關(guān)系數(shù)。它可以與polyfit和polyval函數(shù)一起用來(lái)在實(shí)際數(shù)據(jù)和擬合輸出之間計(jì)算R2相關(guān)系數(shù)下面給出一個(gè)利用corref計(jì)算R值的例子:loadcensus[p,s]=polyfit(cdate,pop,2);Output=polyval(p,cdate);Corrolation=corroef(cate,Output);cdate與它自身很好的相關(guān),同樣的Output也與它自身很好相關(guān)。反對(duì)角線上元素是2曲線擬合向?qū)enial@USTC2004-4-18cdate與Output之間的相關(guān)性。這個(gè)值非常接近于1,因此實(shí)際數(shù)據(jù)與擬合結(jié)果能否較好的吻合。因此,這個(gè)擬合是“好”的擬合。(應(yīng)該是這樣判斷的么?我怎么覺(jué)得應(yīng)該通過(guò)pop與Output的相關(guān)性來(lái)判斷擬合的好壞的呢?)利用反斜線操作符與polyfit函數(shù)進(jìn)行回歸與曲線擬合的更多的例子請(qǐng)參照MATLAB文檔中的RegressionandCurveFitting一節(jié)。附加例子:數(shù)據(jù)集:t=[0.3.81.11.62.3]';y=[0.50.821.141.251.351.40]';plot(t,y,'o'),gridon方法1:多項(xiàng)式回歸基于圖形,數(shù)據(jù)可能通過(guò)二次多項(xiàng)式建模如下:y=a0+a1*t+a2*t其中未知系數(shù)a0,a1,a2可以通過(guò)最小二乘(通過(guò)最小化通過(guò)模型計(jì)算出來(lái)的數(shù)據(jù)的偏差的平方和)擬合計(jì)算。三個(gè)未知數(shù)6個(gè)方程如下:用6x3的矩陣表示:X=[ones(size(t))tt.^2];則結(jié)果通過(guò)反斜線操作符得到:a=X\ya=0.53180.9191-0.2387因此二階多項(xiàng)式模型為:y=0.5318+0.9191*t-0.2387*t2曲線擬合向?qū)enial@USTC2004-4-18計(jì)算模型在均勻空間的值,并將原來(lái)的值畫(huà)在同一個(gè)圖形上:T=(0:.1:2.5)';Y=[ones(size(T)TT.^2)]*a;plot(T,Y,'-'t,y,'o'),gridon方法2:線性參數(shù)回歸建立模型:X=[ones(size(t))exp(-t)t.*exp(-t)];a=X\y;T=(0:.1:2.5)';Y=[ones(size(T))exp(-T)T.exp(-T)]*a;plot(T,Y,'-',t,y,'o'),gridon曲線擬合向?qū)enial@USTC2004-4-18方法3:多元回歸如果y是一個(gè)包含多個(gè)獨(dú)立變量的函數(shù),表示變量間的相鄰關(guān)系的矩陣方程可以通過(guò)附加數(shù)據(jù)進(jìn)行擴(kuò)展。假設(shè)我們測(cè)量參數(shù)x1、x2的少數(shù)幾個(gè)值的輸出y,觀測(cè)值如下:x1=[.2.5.6.81.01.1]';x2=[.1.3.4.91.11.4]';y=[.17.26.28.23.27.24]';本數(shù)據(jù)的一個(gè)多元模型是:多元回歸解決的是通過(guò)最小二乘擬合求未知系數(shù)a0,a1,a2。通過(guò)構(gòu)造回歸矩陣X構(gòu)造和解決同步方程,依然采用反斜線操作符。X=[ones(size(x1))x1x2];a=X\y;為了評(píng)價(jià)模型,求取絕對(duì)誤差的最大值:Y=X*a;MaxErr=max(abs(Y-y));實(shí)例分析:曲線擬合(本節(jié)來(lái)自matlab的在線幫助文檔)本節(jié)提供了以實(shí)際數(shù)據(jù)分析形式的在MATLAB中的數(shù)據(jù)分析基本能力的概貌。下面的例子是以收集的人口普查數(shù)據(jù)為基礎(chǔ),采用MATLAB函數(shù)對(duì)數(shù)據(jù)進(jìn)行實(shí)驗(yàn)擬合:?多項(xiàng)式擬合?殘差分析?指數(shù)擬合?誤差界限1.導(dǎo)入數(shù)據(jù)loadcensus(census.mat包含了美國(guó)1790年到1990年的人口數(shù)據(jù))其中包括兩個(gè)變量:cdate與popcdate是從1790以10遞增到1990的一個(gè)列向量,是年份數(shù);pop是cdate中年份相應(yīng)的人口數(shù)據(jù)向量曲線擬合向?qū)enial@USTC2004-4-182.多項(xiàng)式擬合首先我們想通過(guò)簡(jiǎn)單的多項(xiàng)式對(duì)普查數(shù)據(jù)進(jìn)行擬合。利用MATLAB中的兩個(gè)函數(shù)進(jìn)行處理:polyfit與polyval。polyfit函數(shù)是在給定階次多項(xiàng)式上對(duì)數(shù)據(jù)進(jìn)行最小二乘意思上的最優(yōu)擬合。假設(shè)采用4階多項(xiàng)式,擬合過(guò)程為:>>p=polyfit(cdate,pop,4)Warning:Polynomialisbadlyconditioned.RemoverepeateddatapointsortrycenteringandscalingasdescribedinHELPPOLYFIT.p=1.0e+005*0.0000-0.00000.0000-0.01266.0020警告的產(chǎn)生是因?yàn)閜olyfit函數(shù)用很大的值cdate作為基本數(shù)據(jù),用他來(lái)產(chǎn)生范德蒙矩陣(Vandermondematrix),具體細(xì)節(jié)的可以在polyfit的m文件中看到。cdate的展開(kāi)導(dǎo)致尺度標(biāo)準(zhǔn)問(wèn)題,一個(gè)解決辦法就是標(biāo)準(zhǔn)化cdate數(shù)據(jù)。預(yù)處理:標(biāo)準(zhǔn)化數(shù)據(jù)標(biāo)準(zhǔn)化處理是為了提高后期數(shù)值計(jì)算精度而進(jìn)行的尺度變化處理。一個(gè)處理辦法是:sdate=(cdate-mean(cdate))./std(cdate);然后再以標(biāo)準(zhǔn)化后數(shù)據(jù)進(jìn)行4階多項(xiàng)式擬合:>>p=polyfit(sdate,pop,4)p=0.70470.921023.470673.859862.2285通過(guò)圖形我們來(lái)觀察其擬合的好壞:>>pop4=polyval(p,sdate);>>plot(cdate,pop4,'-',cdate,pop,'+'),gridon曲線擬合向?qū)enial@USTC2004-4-18另外一個(gè)規(guī)范化數(shù)據(jù)的方法就是通過(guò)結(jié)果與單位的知識(shí)進(jìn)行轉(zhuǎn)換。如,對(duì)于本數(shù)據(jù)集,選擇1790作為0年也可以得到較為滿意的解。3.殘差分析一個(gè)評(píng)價(jià)擬合好壞的測(cè)度就是殘差――觀測(cè)值與預(yù)測(cè)值的差異。對(duì)不同的擬合,利用殘差進(jìn)行比較。從擬合圖形和殘差上,我們顯而易見(jiàn),采用標(biāo)準(zhǔn)化數(shù)據(jù)比簡(jiǎn)單的多項(xiàng)式可能對(duì)數(shù)據(jù)有更好的擬合。利用如下命令,分別對(duì)數(shù)據(jù)進(jìn)行1階,2階,4階的擬合,作圖,并比較其殘差:>>loadcensus>>sdate=(cdate-mean(cdate))./std(cdate);>>p1=polyfit(sdate,pop,1);>>pop1=polyval(p1,sdate);>>plot(cdate,pop1,'b-',cdate,pop,'g+');>>res1=pop-pop1;>>figure,plot(cdate,res1,'g+');>>p=polyfit(sdate,pop,2);>>pop2=polyval(p,sdate);>>figure,plot(cdate,pop2,'b-',cdate,pop,'g+')>>res2=pop-pop2;>>figure,plot(cdate,res2,'g+');>>p=polyfit(sdate,pop,4);>>pop4=polyval(p,sdate);>>figure,plot(cdate,pop4,'b-',cdate,pop,'g+')>>res4=pop-pop4;>>figure,plot(cdate,res4,'g+');>>max(abs(res1))ans=41.3987>>max(abs(res2))ans=7.5361>>max(abs(res4))ans=6.3455曲線擬合向?qū)enial@USTC2004-4-184.指數(shù)擬合看前面的人口圖形,發(fā)現(xiàn)人口數(shù)據(jù)曲線有些與指數(shù)曲線相似。利用這一點(diǎn),我們?cè)囍鴮?duì)人口數(shù)據(jù)值的對(duì)數(shù)進(jìn)行擬合,依然采用前面的標(biāo)準(zhǔn)化方法。>>logp1=polyfit(sdate,log10(pop),1);>>logpred1=10.^polyval(logp1,sdate);>>semilogy(cdate,logpred1,'-',cdate,pop,'+');gridon>>logp2=polyfit(sdate,log10(pop),2);>>logpred2=10.^polyval(logp2,sdate);>>figure,semilogy(cdate,logpred2,'-',cdate,pop,'+');gridon>>logres2=log10(pop)-polyval(logp2,sdate);>>figure,plot(cdate,logres2,'+');>>r=pop-10.^(polyval(logp2,sdate));>>figure,plot(cdate,r,'+')可以看出,殘差更加隨機(jī)性強(qiáng)一些。或許,殘差隨著人口數(shù)的增加而在數(shù)量級(jí)方面增長(zhǎng)很快,但是總體而言,對(duì)數(shù)模型提供了更精確的擬合。曲線擬合向?qū)enial@USTC2004-4-185.誤差界限誤差界限對(duì)于判別你的擬合是否是個(gè)合理的模型很有用。你可以通過(guò)從polyfit選擇任意兩個(gè)輸出參數(shù)作為polyfit的兩個(gè)輸入?yún)?shù)。本例子采用普查例子斷乎機(jī)和前面講的規(guī)范化方法,利用polyfit和polyval得到二階多項(xiàng)式模型的誤差界限。對(duì)年度值進(jìn)行規(guī)范化,本例子采用+-2△間隔,相應(yīng)的其置信度的95%。>>loadcensus>>sdate=(cdate-mean(cdate))./std(cdate);>>[p2,S2]=polyfit(sdate,pop,2);>>[pop2,del2]=polyval(p2,sdate,S2);>>plot(cdate,pop,'+',cdate,pop2,'g-',cdate,pop2+2*del2,'r:',cdate,pop2-2*del2,'r:'),gridon優(yōu)化工具箱的利用(接1)函數(shù)描述LSQLIN有約束線性最小二乘優(yōu)化LSQNONNEG非負(fù)約束線性最小二乘優(yōu)化問(wèn)題當(dāng)有約束問(wèn)題存在的時(shí)候,應(yīng)該采用上面的方法代替Polyfit與反斜線(\)。具體例子請(qǐng)參曲線擬合向?qū)enial@USTC2004-4-18閱優(yōu)化工具箱文檔中的相應(yīng)利用這兩個(gè)函數(shù)的例子。d.非線性曲線擬合利用MATLAB的內(nèi)建函數(shù)函數(shù)名描述FMINBND只解決單變量固定區(qū)域的最小值問(wèn)題FMINSEARCH多變量無(wú)約束非線性最小化問(wèn)題(Nelder-Mead方法)。下面給出一個(gè)小例子展示一下如何利用FMINSEARCH1.首先生成數(shù)據(jù)>>t=0:.1:10;>>t=t(:);>>Data=40*exp(-.5*t)+rand(size(t));%將數(shù)據(jù)加上隨機(jī)噪聲2.寫(xiě)一個(gè)m文件,以曲線參數(shù)作為輸入,以擬合誤差作為輸出functionsse=myfit(params,Input,Actural_Output)A=params(1);lamda=params(2);Fitted_Curve=A.*exp(-lamda*Input);Error_Vector=Fitted_Curve-Actural_Output;%當(dāng)曲線擬合的時(shí)候,一個(gè)典型的質(zhì)量評(píng)價(jià)標(biāo)準(zhǔn)就是誤差平方和sse=sum(Error_Vector.^2);%當(dāng)然,也可以將sse寫(xiě)作:sse=Error_Vector(:)'*Error_Vector(:);3.調(diào)用FMINSEARCH>>Strarting=rand(1,2);>>options=optimset('Display','iter');>>Estimates=fiminsearch(@myfit,Strarting,options,t,Data);>>plot(t,Data,'*');>>holdon>>plot(t,Estimates(1)*exp(-Estimates(2)*t),'r');Estimates將是一個(gè)包含了對(duì)原數(shù)據(jù)集進(jìn)行估計(jì)的參數(shù)值的向量。附圖見(jiàn)后面:曲線擬合向?qū)enial@USTC2004-4-18FMINSEARCH通常能夠用來(lái)解決不連續(xù)情況,特別是如果他們不出現(xiàn)在解的附近的時(shí)候。它得到的通常也是局部解。FMINSEARCH只能夠最小化實(shí)數(shù)值(也就是說(shuō),解的域必須只能包括實(shí)數(shù),函數(shù)的輸出只能夠?yàn)閷?shí)數(shù)值)。當(dāng)感興趣的是復(fù)數(shù)變量的域的時(shí)候,他們必須被分割為實(shí)部與虛部。MATLAB的FIGURE窗口:最基本的擬合界面與數(shù)據(jù)統(tǒng)計(jì)工具M(jìn)ATLAB通過(guò)基本的擬合界面也支持基本曲線擬合。利用這個(gè)界面,你可以快速地在簡(jiǎn)單易用的環(huán)境中實(shí)現(xiàn)許多基本的曲線擬合。這個(gè)界面可以實(shí)現(xiàn)以下功能:a.通過(guò)比樣條插值(splineinterpolant)、hermite插值、或者是高達(dá)10階的多項(xiàng)式插值實(shí)現(xiàn)數(shù)據(jù)的擬合;b.對(duì)給定數(shù)據(jù)同時(shí)實(shí)現(xiàn)多樣插值的繪制;c.繪制殘差圖;d.檢查擬合結(jié)果的殘差的數(shù)值;e.通過(guò)內(nèi)插值或者外推插值評(píng)價(jià)一個(gè)擬合結(jié)果;f.對(duì)擬合結(jié)果和殘差的模進(jìn)行圖形繪制;g.將擬合結(jié)果保存入MATLAB工作空間。開(kāi)發(fā)你的擬合應(yīng)用的時(shí)候,你可以通過(guò)基本擬合(BasicFitting)界面,也可以通過(guò)命曲線擬合向?qū)enial@USTC2004-4-18令行函數(shù),也可以同時(shí)作用。你可以通過(guò)基本擬合界面只能夠?qū)崿F(xiàn)2-D數(shù)據(jù)的擬合。然而,如果你用subplot繪制多個(gè)數(shù)據(jù)集,只要有至少一個(gè)數(shù)據(jù)集是2D的,那么就可以用基本擬合界面??梢酝ㄟ^(guò)如下步驟激活基本擬合界面:1.繪制數(shù)據(jù);2.從figure窗口的Tools菜單條下面選擇BasicFitting菜單項(xiàng);有關(guān)BasicFitting界面的更多信息,請(qǐng)查閱MATLAB幫助文檔的相應(yīng)部分。注意:對(duì)于HP,IBM以及SGI平臺(tái),MATLAB6.0(R12.0)以及MATLAB6.1(R12.1)的基本擬合界面不受支持。數(shù)據(jù)統(tǒng)計(jì)界面可以用來(lái)對(duì)圖形中的每個(gè)數(shù)據(jù)集進(jìn)行統(tǒng)計(jì)量的計(jì)算。可以通過(guò)如下步驟將數(shù)據(jù)統(tǒng)計(jì)界面激活:1.制數(shù)據(jù);2.從figure窗口的Tools菜單條下面選擇DataStatistics菜單項(xiàng);優(yōu)化工具箱函數(shù)LSQNONLIN解決非線性最小二乘法問(wèn)題,包括非線性數(shù)據(jù)擬合問(wèn)題LSQCURVEFIT解決非線性數(shù)據(jù)擬合問(wèn)題下面給出利用這兩個(gè)函數(shù)的例子:LSQNONLIN:利用這個(gè)函數(shù)最小化連續(xù)函數(shù)只能夠找到句柄解。下面的例子說(shuō)明利用LSQNONLIN函數(shù)用下面的函數(shù)進(jìn)行擬合:f=A+Bexp(C*x)+D*exp(E*x)對(duì)數(shù)據(jù)集x與y進(jìn)行擬合,其中y是在給定x的情況下的期望輸出。為了解決這個(gè)問(wèn)題,先建立下面的名為fit_simp.m的函數(shù),它利用數(shù)據(jù)x與y,將他們作為優(yōu)化輸入?yún)?shù)傳遞給LSQNONLIN。利用給定的數(shù)據(jù)x計(jì)算f的值,再與原始數(shù)據(jù)y進(jìn)行比較。經(jīng)驗(yàn)值與實(shí)際計(jì)算出的值之間的差異作為輸出值返回。LSQNOLIN函數(shù)就是最小化這些差的平方和。functiondiff=fit_simp(x,X,Y)%此函數(shù)被LSQNONLIN調(diào)用%x是包含等式系數(shù)的向量%X與Y是作為操作數(shù)傳遞給lsnonlinA=x(1);B=x(2);C=x(3);曲線擬合向?qū)enial@USTC2004-4-18D=x(4);E=x(5);diff=A+B.*exp(C.*X)+D.*exp(E.*X)-Y;下面的腳本是利用上面定義的fit_simp.m函數(shù)的一個(gè)例子:%定義你打算擬合的數(shù)據(jù)集合>>X=0:.01:.5;>>Y=2.0.*exp(5.0.*X)+3.0.*exp(2.5.*X)+1.5.*rand(size(X));%初始化方程系數(shù)>>X0=[11111]';%設(shè)置用中等模式(memdium-scale)算法>>options=optimset('Largescale','off');%通過(guò)調(diào)用LSQNONLIN重現(xiàn)計(jì)算新的系數(shù)>>x=lsqnonlin(@fit_simp,X0,[],[],options,X,Y);%調(diào)用LSQNONLIN結(jié)果輸出表明擬合是成功的Optimizationterminatedsuccessfully:GradientinthesearchdirectionlessthantolFunGradientlessthan10*(tolFun+tolX)%繪制原始數(shù)據(jù)與新的計(jì)算的數(shù)據(jù)>>Y_new=x(1)+x(2).*exp(x(3).*X)+x(4).*exp(x(5).*X);>>plot(X,Y,'+r',X,Y_new,'b');注意:LSQNONLIN只可以處理實(shí)數(shù)變量。在處理包括復(fù)數(shù)變量的實(shí)例的擬合的時(shí)候,數(shù)據(jù)集應(yīng)該被切分成實(shí)數(shù)與虛數(shù)部分。下面給出一個(gè)例子演示如何對(duì)復(fù)數(shù)參數(shù)進(jìn)行最小二乘擬合。曲線擬合向?qū)enial@USTC2004-4-18為了擬合復(fù)數(shù)變量,你需要將復(fù)數(shù)分解為實(shí)數(shù)部分與虛數(shù)部分,然后把他們傳遞到函數(shù)中去,這個(gè)函數(shù)被LEASTSQ作為單個(gè)輸入調(diào)用。首先,將復(fù)數(shù)分解為實(shí)部與虛部?jī)蓚€(gè)向量。其次,將這兩個(gè)向量理解成諸如第一部分是實(shí)部、第二部分是虛部。在MATLAB函數(shù)中,重新裝配復(fù)數(shù)數(shù)據(jù),并用你想擬合的復(fù)數(shù)方程計(jì)算。將輸出向量分解實(shí)部與虛部,將這兩部分連接為一個(gè)單一的輸出向量傳遞回LEASTSQ。下面,給出一個(gè)例子演示如何根據(jù)兩個(gè)復(fù)數(shù)指數(shù)擬合實(shí)數(shù)X與Y。建立方程:functionzero=fit2(x,X,Y)%根據(jù)輸入x重建復(fù)數(shù)輸入cmpx=x(1:4)+i.*x(5:8);%利用復(fù)數(shù)計(jì)算函數(shù)zerocomp=cmpx(1).*exp(cmpx(2).*X)+cmpx(3).*exp(cmpx(4).*X)-Y;%將結(jié)果轉(zhuǎn)換成一個(gè)列向量%其中第一部分是實(shí)部,第二部分是虛部numx=length(X);%實(shí)部長(zhǎng)度zero=real(zerocomp);%實(shí)部zero(numx+1:2*numx)=imag(zerocomp);%虛部為了評(píng)價(jià)計(jì)算這個(gè)函數(shù),需要X與Y數(shù)據(jù)集。LSQNONLIN將根據(jù)它擬合出下面方程中的參數(shù)a,b,c與d:Y=a*exp(b*X)+c*exp(d*X);其中,a,b,c與d是復(fù)數(shù)變量。>>X=0:.1:5;>>Y=sin(X);>>Y=Y+.1*rand(size(Y))-.05;>>cmpx0=[1i22*i];>>x0(1:4)=real(cmpx0);>>x0(5:8)=imag(cmpx0);>>x=leastsq(@fit2,x0,[],[],X,Y);>>cmpx=x(1:4)+i.*x(5:8);>>Y1=real(cmpx(1).*exp(cmpx(2).*X)+cmpx(3).*exp(cmpx(4).*X));曲線擬合向?qū)enial@USTC2004-4-18>>plot(X,Y1,'r');>>holdon>>plot(X,Y,'+');LSQCURVEFIT:利用此函數(shù)可以在最小二乘意義上解決非線性曲線擬合(數(shù)據(jù)擬合)問(wèn)題。也就是說(shuō),給定輸入數(shù)據(jù)xdata,以及觀測(cè)的輸出數(shù)據(jù)ydata,找到系數(shù)x,使得函數(shù)F(x,xdata)能夠最好的擬合向量值。LSQCURVEFIT利用與LSQNONLIN相同的算法。它的目的在于專門(mén)為數(shù)據(jù)擬合問(wèn)題提供一個(gè)接口。在擬合的時(shí)候,2維、3維或者N維參數(shù)擬合是沒(méi)有什么差別的。下面給出一個(gè)3維參數(shù)擬合的例子。待擬合函數(shù)是:z=a1*y.*x..^2+a2*sin(x)+a3*y.^3;建立的myfun.m的函數(shù)如下:functionF=myfun(a,data);x=data(1,:);y=data(2,:);F=a(1)*y.*x.^2+a(2)*sin(x)+a(3)*y.^3;下面的腳本展示了這么利用上面的函數(shù):曲線擬合向?qū)enial@USTC2004-4-18>>xdata=[3.67.79.34.18.62.81.37.910.05.4];>>ydata=[16.5150.6263.124.7208.59.92.7163.9325.054.3];>>zdata=[95.0923.1160.6348.5989.1276.9745.681.8482.1744.47];>>data=[xdata;ydata];>>a0=[10,10,10];%初識(shí)揣測(cè)>>[a,resnorm]=lsqcurvefit(@myfun,a0,data,zdata)Maximumnumberoffunctionevaluationsexceeded;increaseoptions.MaxFunEvalsa=0.0088-34.2886-0.0000resnorm=2.2636e+004>>formatlong>>aa=0.00881645527493-34.28862491919983-0.00000655131499>>option=optimset('MaxFunEvals',800);>>[a,resnorm]=lsqcurvefit(@myfun,a0,data,zdata,[],[],option)Optimizationterminatedsuccessfully:RelativefunctionvaluechangingbylessthanOPTIONS.TolFunresnorm統(tǒng)計(jì)工具箱函數(shù)函數(shù)名描述nlinfit(非線性回歸)采用Gauss-Newton法進(jìn)行非線性最小二乘數(shù)據(jù)擬合lscov(線性回歸)根據(jù)已知協(xié)方差矩陣進(jìn)行最小二乘估計(jì)regressregstatsridgerstoolstepwise多元線性回歸回歸診斷脊回歸(?Ridgeregress)多維響應(yīng)表面可視化(RSV)交互式逐步回歸具體例子請(qǐng)參閱相應(yīng)文檔曲線擬合向?qū)enial@USTC2004-4-18第3節(jié)加權(quán)曲線回歸方法當(dāng)擬合數(shù)據(jù)包含隨機(jī)變量時(shí),通常在針對(duì)誤差有兩個(gè)主要假設(shè):●誤差只在響應(yīng)數(shù)據(jù)中存在,而不在預(yù)測(cè)數(shù)據(jù)中存在;●誤差是滿足零均值常數(shù)方差正態(tài)分布的數(shù)據(jù)變量。第二條假設(shè)方差為常數(shù)嚴(yán)重影響野點(diǎn)的出現(xiàn)。因?yàn)橐包c(diǎn)原來(lái)真實(shí)模式數(shù)據(jù),他們可能引起真實(shí)擬合的潛在錯(cuò)誤。為了改善擬合,你可以領(lǐng)用附加的尺度因子(也就是權(quán)值)來(lái)提高擬合的質(zhì)量。將野點(diǎn)的權(quán)值設(shè)置得比較小,因此可以獲得較好的擬合。你可以利用下面的三個(gè)工具箱來(lái)實(shí)施加權(quán)擬合。a.CurveFittingToolbox此工具箱對(duì)線性與非線性數(shù)據(jù)有通用的最小二乘擬合能力。權(quán)值是操作數(shù)設(shè)置中的一部分,你可以通過(guò)fitoptions進(jìn)行設(shè)置。在曲線擬合工具箱中,權(quán)值可以是與數(shù)據(jù)相聯(lián)系的一個(gè)權(quán)向量。b.StatisticsToolbox統(tǒng)計(jì)工具箱中的robustfit函數(shù)具有加權(quán)自動(dòng)回歸的能力。robustfit采用robust回歸對(duì)數(shù)據(jù)進(jìn)行擬合,其輸出為回歸系數(shù)。它也可以進(jìn)行線性加權(quán)回歸。調(diào)用語(yǔ)法結(jié)構(gòu)是:ROBUSTFIT(X,Y,'WFUN',TUNE,'CONST')c.OptimizationToolbox你也可以利用優(yōu)化工具箱的最小二乘求解器-----LSQNONLIN和LSQCURVEFIT函數(shù)實(shí)施加權(quán)最小二乘擬合。為了利用LSQNONLIN和LSQCURVEFIT實(shí)現(xiàn)加權(quán)最小二乘擬合,你需要針對(duì)你的擬合數(shù)據(jù)建立起一個(gè)方程。你可以在Solution27840中找到相應(yīng)的例子。附:Solution27840如何利用優(yōu)化工具箱的LSQNONLIN函數(shù)實(shí)現(xiàn)加權(quán)最小二乘擬合例子:1.制造準(zhǔn)備擬合的樣本數(shù)據(jù)。在本例子中,數(shù)據(jù)是疊加了噪聲的負(fù)指數(shù)模型:>>xdata=0:.01:1;>>ydata=exp(-3*xdata)+randn(size(xdata))*.05;2.在圖形中查看數(shù)據(jù),即用plot畫(huà)出xdata與ydata,用藍(lán)色的點(diǎn)表示:>>plot(xdata,ydata,'b.');曲線擬合向?qū)enial@USTC2004-4-183.建立一個(gè)函數(shù)作為L(zhǎng)SQNONLIN的輸入,該函數(shù)包含你打算擬合的數(shù)據(jù)的方程。建立名為Mycurve.m的m文件:functionerr_weithted=mycurv(parameter,real_x,real_y)%想擬合的方程是:exp(parameter*xdata)%其中,parameter是未知的%fit=exp(parameter*real_x);fit=exp(parameter*real_x);err=fit-real_y;%對(duì)誤差進(jìn)行加權(quán)%在本例子中,,我們只對(duì)最后一項(xiàng)進(jìn)行加權(quán),并設(shè)置其他的項(xiàng)為0(這將%使得例子根據(jù)清楚)weight=[zeros(1,length(real_x)-1)1];%誤差向量的權(quán)重err_weithted=err.*weight;4.調(diào)用優(yōu)化程序,返回parameter_hat參數(shù)>>parameter_hat=lsqnonlin(@mycurv,3,[],[],[],xdata,ydata)Optimizationterminatedsuccessfully:First-orderoptimalitylessthanOPTIONS.TolFun,andnonegative/zerocurvaturedetectedparameter_hat返回利用m文件Mycurv的指定方程的產(chǎn)生值。5.獲取了擬合的方程式,將parameter_hat帶入指數(shù)方程,并在同一張圖上畫(huà)出。>>fitted=exp(parameter_hat*xdata);holdon>>plot(xdata,fitted,'ro');>>parameter_hat2=lsqnonlin(@mycurv,3,[],[],[],xdata,ydata)%不加權(quán)擬合>>fitted2=exp(parameter_hat2*xdata);>>plot(xdata,fitted2,'y-');>>legend('待擬合數(shù)據(jù)','加權(quán)擬合結(jié)果','直接擬合結(jié)果');比較擬合結(jié)果可以看出不加權(quán)時(shí),曲線從所有數(shù)據(jù)點(diǎn)的中間穿過(guò)去(如黃色的線所示)。加權(quán)的時(shí)候,擬合曲線只通過(guò)最后一個(gè)點(diǎn)(因?yàn)橹挥性擖c(diǎn)權(quán)值非0)。曲線擬合向?qū)enial@USTC2004-4-18第4節(jié):利用CurveFittingToolbox改善擬合結(jié)果很多因素對(duì)曲線擬合造成影響。下面列出各種提示有助于你提高擬合質(zhì)量:●模型的選擇:或者從MATLAB的模型庫(kù)、或者用戶自定義的模型的選擇,是最主要的一個(gè)因素,試著用各種不同的模型對(duì)你的數(shù)據(jù)進(jìn)行擬合比較;●數(shù)據(jù)預(yù)處理:在擬合前對(duì)數(shù)據(jù)進(jìn)行預(yù)處理也很有用。這包括:▲對(duì)響應(yīng)數(shù)據(jù)進(jìn)行變換▲剔除Infs,NaNs,以及野點(diǎn)更多的細(xì)節(jié)請(qǐng)查閱CurveFittingToolbox的文檔?!窈侠淼臄M合應(yīng)該具有處理出現(xiàn)奇異而使得預(yù)測(cè)趨于無(wú)窮大的時(shí)候的能力。具體細(xì)節(jié)請(qǐng)查閱CurveFittingToolbox的文檔●如果你提供越多的系數(shù)的估計(jì)信息,你的擬合越容易收斂。下面的提示有利于你加快擬合的速度,提高擬合的精度:▲在開(kāi)始擬合的時(shí)候進(jìn)行一些智能的揣測(cè)。如果你認(rèn)為系數(shù)可能是某些值,那么就用那些值作為起始值▲如果缺少起始值的信息,試著用大量不同的起始值▲盡量重復(fù)訓(xùn)練參數(shù)。例如,如果你知道參數(shù)必須是正的,那么設(shè)置它的下限是0使得循環(huán)擬合過(guò)程?!{(diào)整各種擬合操作數(shù),例如:a.采用不同的算法b.增加迭代與函數(shù)評(píng)價(jià)的次數(shù)c.減小容許誤差▲將數(shù)據(jù)分解為幾個(gè)子集,對(duì)不同的子集采用不同的曲線擬合●復(fù)雜的問(wèn)題最好通過(guò)進(jìn)化的方式解決,即一個(gè)問(wèn)題的少量獨(dú)立變量先解決。低階問(wèn)題的解通常通過(guò)近似映射作為高階問(wèn)題解的起始點(diǎn)。例如,如果你的模型最好被描述為:y=c+a*exp(b*x)+d*sin(f*x)那么它經(jīng)常最好每次擬合一個(gè)項(xiàng),通常從最重要的項(xiàng)開(kāi)始。你可以先擬合:y=c1+a1*exp(b1*x)然后利用擬合出的結(jié)果系數(shù)作為上式中的a,b,c的起始值進(jìn)行完整的擬合。曲線擬合向?qū)enial@USTC2004-4-18第5節(jié):其他相近方法或許MATLAB2002年2月的NewsandNotes雜志中有關(guān)曲線擬合的文章:AtmosphericCarbonDi-OxideModelingandtheCurveFittingToolbox或許對(duì)你有用。附:一個(gè)用fminsearch進(jìn)行園的擬合的例子:function[xc,yc,r,fval,exitflag,output]=tlscirc(x,y)%TLScirclefitoptions=optimset('TolFun',1e-10);[x0,y0]=circfit(x,y);%centerestimate[z,fval,exitflag,output]=fminsearch(@circobj,[x0,y0],options,x,y);[f,r]=circobj(z,x,y);xc=z(1);yc=z(2);function[f,r]=circobj(z,x,y)%TLScirclefitobjectivefandradiusrn=length(x);X=x-z(1);Y=y-z(2);X2=X'*X;Y2=Y'*Y;r=sum(sqrt(X.^2+Y.^2))/n;f=X2+Y2-n*r^2;Thecircfitfunctionisusedaboveasaninitialestimator.Theobjectivevaluesoftlscircandcircfitdifferbynearly14%intheexamplebelow.x=[1;2;3;5;7;9];y=[7;6;7;8;7;5];plot(x,y,'bo'),holdon[xc,yc,r,f]=tlscirc(x,y)%[xc,yc,r,f]=[4.7398,2.9835,4.7142,1.2276]rectangle('Position',[xc-r,yc-r,2*r,2*r],'Curvature',[1,1],'EdgeColor','b')[xc,yc,r]=circfit(x,y)X=x-xc;Y=y-yc;f=sum((sqrt(X.^2+Y.^2)-r).^2)%[xc,yc,r,f]=[4.7423,3.8351,4.1088,1.3983]rectangle('Position',[xc-r,yc-r,2*r,2*r],'Curvature',[1,1],'EdgeColor','r')holdoff,axisequalGenial@USTC2004-4-17matlab非線性曲線擬合最近在用matlab做非線性曲線擬合,發(fā)現(xiàn)matlab功能確實(shí)很強(qiáng)大,總結(jié)其方法有如下幾種:一、Matlab非線性擬合工具箱單一變量的曲線逼近Matlab有一個(gè)功能強(qiáng)大的曲線擬合工具箱cftool,使用方便,能實(shí)現(xiàn)多種類型的線性、非線性曲線擬合。假設(shè)我們要擬合的函數(shù)形式是y=a+(b-a)*c^2*(c^2-x^2)/((c^2-x^2)^2+(2*d*x)^2);其中a,b,c,d是待定系數(shù)。在命令行輸入數(shù)據(jù):x=8:0.01:12.4;y=real(epsilon);2、啟動(dòng)曲線擬合工具箱》cftool3、進(jìn)入曲線擬合工具箱界面“CurveFittingtool”(1)點(diǎn)擊“Data”按鈕,彈出“Data”窗口;(2)利用Xdata和Ydata的下拉菜單讀入數(shù)據(jù)x,y,可修改數(shù)據(jù)集名“Datasetname”,然后點(diǎn)擊“Createdataset”按鈕,退出“Data”窗口,返回工具箱界面,這時(shí)會(huì)自動(dòng)畫(huà)出數(shù)據(jù)集的曲線圖;(3)點(diǎn)擊“Fitting”按鈕,彈出“Fitting”窗口;(4)點(diǎn)擊“Newfit”按鈕,可修改擬合項(xiàng)目名稱“Fitname”,通過(guò)“Dataset”下拉菜單選擇數(shù)據(jù)集,然后通過(guò)下拉菜單“Typeoffit”選擇擬合曲線的類型,工具箱提供的擬合類型有:CustomEquations:用戶自定義的函數(shù)類型Exponential:指數(shù)逼近,有2種類型,a*exp(b*x)、a*exp(b*x)+c*exp(d*x)Fourier:傅立葉逼近,有7種類型,基礎(chǔ)型是a0+a1*cos(x*w)+b1*sin(x*w)Gaussian:高斯逼近,有8種類型,基礎(chǔ)型是a1*exp(-((x-b1)/c1)^2)Interpolant:插值逼近,有4種類型,linear、nearestneighbor、cubicspline、shape-preservingPolynomial:多形式逼近,有9種類型,linear~、quadratic~、cubic~、4-9thdegree~Power:冪逼近,有2種類型,a*x^b、a*x^b+cRational:有理數(shù)逼近,分子、分母共有的類型是linear~、quadratic~、cubic~、4-5thdegree~;此外,分子還包括constant型SmoothingSpline:平滑逼近SumofSinFunctions:正弦曲線逼近,有8種類型,基礎(chǔ)型是a1*sin(b1*x+c1)Weibull:只有一種,a*b*x^(b-1)*exp(-a*x^b)選擇好所需的擬合曲線類型及其子類型,并進(jìn)行相關(guān)設(shè)置:——如果是非自定義的類型,根據(jù)實(shí)際需要點(diǎn)擊“Fitoptions”按鈕,設(shè)置擬合算法、修改待估計(jì)參數(shù)的上下限等參數(shù);——如果選CustomEquations,點(diǎn)擊“New”按鈕,彈出自定義函數(shù)等式窗口,有“LinearEquations線性等式”和“GeneralEquations構(gòu)造等式”兩種標(biāo)簽。在本例中選CustomEquations,點(diǎn)擊“New”按鈕,選擇“GeneralEquations”標(biāo)簽,輸入函數(shù)類型y=a+(b-a)*c^2*(c^2-x^2)/((c^2-x^2)^2+(2*d*x)^2),設(shè)置參數(shù)a、b、c、d的上下限,然后點(diǎn)擊OK。5)類型設(shè)置完成后,點(diǎn)擊“Apply”按鈕,就可以在Results框中得到擬合結(jié)果,如下例:Generalmodel:f(x)=a+(b-a)*c^2*(c^2-x^2)/((c^2-x^2)^2+(2*d*x)^2)Coefficients(with95%confidencebounds):a=3.155(3.129,3.181)b=3.025(2.998,3.051)c=9.577(9.572,9.582)d=0.1387(0.1312,0.1462)Goodnessoffit:SSE:32.94R-square:0.924AdjustedR-square:0.9235RMSE:0.2746擬合曲線如下二、利用nlinfit函數(shù)實(shí)現(xiàn),代碼如下:clc;x=8:0.01:12.4;x=x;y=real(epsilon);y=y';myfunc=inline('beta(1)+(beta(2)-beta(1))*beta(3)^2*(beta(3)^2-x.^2)./((beta(3)^2-x.^2).^2+(2*beta(4)*x).^2)','beta','x');my_opts=statset('MaxIter',300,'TolFun',1e-12,'TolX',1e-12);beta=nlinfit(x,y,myfunc,[11101],my_opts);%調(diào)整初值可能導(dǎo)致不同結(jié)果,但貌似增加一個(gè)options對(duì)結(jié)果沒(méi)起什么作用beta(1)beta(2)beta(3)beta(4)%testthemodelxx=min(x):0.01:max(x);yy=beta(1)+(beta(2)-beta(1))*beta(3)^2*(beta(3)^2-x.^2)./((beta(3)^2-x.^2).^2+(2*beta(4)*x).^2);figure;plot(x,y,'ro',xx,yy,'b');三、利用nlintool函數(shù)實(shí)現(xiàn),代碼如下:clc;x=8:0.01:12.4;y=real(epsilon);y=y';myfunc=inline('beta(1)+(beta(2)-beta(1))*beta(3)^2*(beta(3)^2-x.^2)./((beta(3)^2-x.^2).^2+(2*beta(4)*x).^2)','beta','x');nlintool(x,y,myfunc,[11101]);上述中y的取值是:y=2.73322.73182.73032.72872.72722.72562.72402.72242.72072.71902.71732.71562.71382.71202.71012.70832.70642.70442.70242.70042.69842.69632.69412.69202.68972.68752.68522.68282.68042.67802.67552.67302.67042.66782.66512.66242.65962.65672.65382.65082.64782.64472.64152.63832.63502.63162.62822.62472.62112.61742.61362.60982.60582.60182.59772.59352.58922.58482.58022.57562.57092.56602.56102.55592.55072.54532.53982.53422.52842.52242.51632.51002.50362.49692.49012.48312.47592.46842.46082.45292.44482.43642.42782.41882.40962.40012.39032.38022.36972.35882.34762.33592.32392.31132.29832.28482.27082.25622.24102.22512.20862.19132.17332.15442.13472.11392.09212.06922.04512.01961.99271.96421.93391.90171.86731.83051.79101.74841.70231.65211.59731.53691.46981.39461.30931.21091.09510.95570.78470.59220.46380.43300.44960.48750.53700.59380.65590.72230.79210.86520.94131.02041.10231.18721.27511.36611.46031.55801.65931.76441.87361.98742.10592.22962.35912.49492.63762.78822.94743.11653.29693.49033.69893.92554.17384.44864.75665.10695.51225.98806.54167.10437.36137.11606.71306.35256.05825.81825.61945.45195.30845.18405.07484.97804.89154.81374.74324.67904.62024.56624.51644.47024.42734.38744.35004.31514.28234.25144.22234.19494.16894.14434.12094.09884.07774.05764.03844.02014.00273.98603.97003.95463.93993.92583.91233.89933.88673.87473.86303.85183.84103.83063.82063.81083.80143.79243.78363.77513.76683.75893.75123.74373.73643.72943.72253.71593.70943.70323.69713.69123.68553.67993.67443.66913.66403.65903.65413.64943.64473.64023.63583.63163.62743.62333.61943.61553.61173.60803.60453.60103.59753.59423.59093.58783.58473.58163.57873.57583.57293.57023.56753.56483.56233.55973.55733.55493.55253.55023.54803.54583.54373.54163.53953.53753.53553.53363.53183.52993.52813.52643.52473.52303.52143.51983.51823.51673.51523.51373.51233.51093.50953.50823.50693.50563.50443.50323.50203.50083.49973.49863.49753.49643.49543.49443.49343.49253.49153.49063.48973.48893.48803.48723.48643.48563.48483.48413.48343.48273.48203.48133.48073.48003.47943.47883.47833.47773.47723.47663.47613.47563.47513.47473.47423.47383.47343.47303.47263.47223.47193.47153.47123.47093.47063.47033.47003.46973.46953.46923.46903.46883.46863.46843.46823.46803.46793.46773.46763.46743.46733.46723.46713.46703.46703.46693.46693.46683.46683.46683.46673.46673.46673.46683.46683.46683.46693.46693.46703.46703.46713.46723.46733.46743.46753.46763.46773.46793.46803.46823.46833.46853.46873.46893.46913.46933.46953.46973.46993.47013.47033.47063.47083.47113.47143.47163.47193.47223.47253.47283.47313.47343.47373.47403.47443.47473.47503.47543.47573.47613.47653.47683.47723.47763.47803.47843.47883.47923.47963.48003.48043.48093.4813PS:縱觀上面三種擬合非線性函數(shù)的結(jié)果來(lái)看都并非理想,曲線變化比較劇烈的地方就表現(xiàn)比較明顯了,還有待尋求更好的辦法來(lái)求得理想曲線。參考:MATLAB在非線性曲線擬合中的應(yīng)用小結(jié)摘要:歸納總結(jié)了非線性曲線擬合的方法、求解步驟和上機(jī)操作過(guò)程關(guān)鍵詞:曲線擬合非線性MATLAB正文:1.曲線擬合的基本原理已知一組測(cè)定的數(shù)據(jù)(例如N個(gè)點(diǎn)(xi,yi)去求得自變量x和因變量y的一個(gè)近似解析表達(dá)式y(tǒng)=φ(x)。若記誤差δi=φ(xi)-yi,i=1,2,…N,則要使誤差的平方和最小,即要求:Q=∑δi=1N2i為最小,這就是常用的最小二乘法原理。2.MATLAB曲線擬合的相關(guān)方法2.1.函數(shù)形式:(1)多項(xiàng)式擬合函數(shù)polyfit,調(diào)用格式為:p=polyfit(x,y,n)其中x,y為參與曲線擬合的實(shí)驗(yàn)數(shù)據(jù),n為擬合多項(xiàng)式的次數(shù),函數(shù)返回值為擬合多項(xiàng)式的系數(shù)(按降冪排列)。n=1時(shí),就為線性擬合。例1:給出表1數(shù)據(jù),試用最小二乘法求一次和二次擬合多項(xiàng)式。表1數(shù)據(jù)x-1.00-0.75-0.50-0.2500.250.500.751.00y-0.22090.32950.88261.43922.00032.56453.13343.70614.2836在MATLAB命令窗口中輸入:clear;close;x=-1:0.25:1;y=[-0.2209,0.3295,0.8826,1.4392,2.0003,2.5645,3.1334,3.7061,4.2836]p1=polyfit(x,y,1)p2=polyfit(x,y,2)y1=polyval(p1,x);y2=polyval(p2,x);plot(x,y,'+',x,y1,'r:',x,y2,'k-.')運(yùn)行結(jié)果:1擬合多項(xiàng)式為:y*=2.0516+2.0131和y*=0.0313x2+2.2516x+2.20001(2)非線性數(shù)據(jù)擬合函數(shù)lsqcurvefit調(diào)用格式為:c=lsqcurvefi(t'fun',x0,xdata,ydata)其中'fun'為擬合函數(shù)的M-函數(shù)文件名,x0為初始向量,xdata,ydata為參與曲線擬合的實(shí)驗(yàn)數(shù)據(jù)。函數(shù)返回值c為非線性函數(shù)fun的擬合系數(shù)。例2:2004年全國(guó)大學(xué)生數(shù)學(xué)建模競(jìng)賽C題(酒后駕車)中給出某人在短時(shí)間內(nèi)喝下兩瓶啤酒后,間隔一定的時(shí)間測(cè)量他的血液中酒精含量y(毫克/百毫升),得到數(shù)據(jù)如表2。表2酒精含量與飲酒時(shí)間的實(shí)驗(yàn)數(shù)據(jù)時(shí)間(小時(shí))0.250.50.751酒精含量3068735758281.522.533.544.55418282910776811121512685813141075150151674時(shí)間(小時(shí))6酒精含量382518通過(guò)建立微分方程模型得到短時(shí)間內(nèi)喝酒后血液中酒精濃度與時(shí)間的關(guān)系為:y=c1(e?c2t?e?c3t)(2)根據(jù)實(shí)驗(yàn)數(shù)據(jù),利用非線性擬合函數(shù)lsqcurvefit,確定模型(2)式中的參數(shù)c1,c2,c3。求解過(guò)程為:先編寫(xiě)一個(gè)M-函數(shù)文件Example2_1:functionf=Example2_1(c,tdata)f=c(1)*(exp(-c(2)*tdata)-exp(-c(3)*tdata));保存后,在命令窗口中輸入:cleartdata=[0.250.50.7511.522.533.544.55678910111213141516];ydata=[306875828277686858515041383528258151210774];c0=[111];2fori=1:50;c=lsqcurvefit('Example2_1',c0,tdata,ydata);c0=c;end得到最優(yōu)解為:c=117.05,0.1930,1.9546從而得出擬合曲線:y=117.05(e0.1930t?e1.9546t)2.2.圖形窗口形式(1)利用

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論