Matlab对指定参数的曲线进行非线性拟合
Matlab擬合曲線的方式
Matlab擬合曲線的方式有很多種,有三次樣條插值、線性插值、多項(xiàng)式擬合等等。多項(xiàng)式擬合由于函數(shù)由f(x)=anxn+an?1xn?1+...+a1x+a0f(x)=a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0f(x)=an?xn+an?1?xn?1+...+a1?x+a0?組成,若采用最小二乘法擬合,對(duì)于參數(shù)an,an?1,...,a1,a0a_n,a_{n-1},...,a_1,a_0an?,an?1?,...,a1?,a0?來(lái)說(shuō),方程組fn(x)=0f_n(x)=0fn?(x)=0是一個(gè)線性方程組,可以用Matlab求逆矩陣的方法,得到方程的最小二乘解。但如果參數(shù)構(gòu)成的方程組并不是線性方程組,則不可以用矩陣的方法求得。使用樣條插值和線性插值固然可以,但是得不到需要的表達(dá)式,此時(shí)使用非線性擬合方法解決最為合適。
通常,我們?cè)趯?shí)驗(yàn)前對(duì)模型都有一個(gè)假設(shè),例如這是一個(gè)指數(shù)衰減的曲線,或者指數(shù)衰減振蕩的曲線,或者是一個(gè)周期振蕩的由若干個(gè)頻率的三角函數(shù)疊加組成的信號(hào)。此時(shí)我們只需要指定需要估計(jì)的參數(shù),代入數(shù)據(jù)求解即可。以下就是一個(gè)點(diǎn)典型的例子。
步驟解讀
這個(gè)例子的數(shù)據(jù)是一個(gè)對(duì)一個(gè)慣性系統(tǒng)給定一個(gè)階躍輸入,對(duì)系統(tǒng)的輸出進(jìn)行采集,并辨別這個(gè)系統(tǒng)。
(xdata,ydata)是一個(gè)一階系統(tǒng)階躍響應(yīng)的采集數(shù)據(jù),ydata是輸出值,xdata是時(shí)間戳。由于系統(tǒng)是階躍響應(yīng),我們假定系統(tǒng)的傳遞函數(shù)是KTps+1\frac{K}{T_ps+1}Tp?s+1K?,顯然需要辨別的兩個(gè)參數(shù)是K和TpT_pTp?。
該系統(tǒng)在階躍響應(yīng)輸入下的始于表達(dá)式為c(t)=K(1?etTP)c(t)=K(1-\rm e^\frac{t}{T_P})c(t)=K(1?eTP?t?),因此需要建立的函數(shù)fun如下
是一個(gè)指定參數(shù)的函數(shù),我們需要求解的參數(shù)就是x(1)和x(2),其中x返回值是一個(gè)二元參數(shù)向量,可直接調(diào)用fun函數(shù)求得y根據(jù)時(shí)間戳生成的辨識(shí)系統(tǒng)的計(jì)算值。并與實(shí)驗(yàn)值ydata畫在一張圖進(jìn)行比較。
clc close all plot(xdata,ydata);xlim([0,1]);hold on;%實(shí)際曲線繪圖 fun=@(x,xdata)(x(1)*(1-exp(-xdata/x(2))));%估計(jì)函數(shù) x0=[1500,0.025];%初始估計(jì)值[x(1),x(2)] x=lsqcurvefit(fun,x0,xdata,ydata);%非線性函數(shù)擬合 y=fun(x,xdata);%代入估計(jì)的值,并獲得函數(shù)點(diǎn) plot(xdata,y);xlim([0,1]);%繪制估計(jì)曲線 title(['[K,Tp]=',num2str(x)]);%標(biāo)注估計(jì)的參數(shù)繪制的預(yù)估曲線如下:(藍(lán)色的是實(shí)驗(yàn)數(shù)據(jù),紅色的是擬合曲線)
可以發(fā)現(xiàn),如果沿著實(shí)驗(yàn)曲線的大致趨勢(shì),擬合的指數(shù)逼近曲線如紅色線所示,可見(jiàn)辨識(shí)的參數(shù)較為準(zhǔn)確。
總結(jié)
以上是生活随笔為你收集整理的Matlab对指定参数的曲线进行非线性拟合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Oracle 练习题 20131017
- 下一篇: 第五章 计算机故障诊断与排除