董慶瑞
摘要:為了便于快速地找到適用的曲線擬合方法,以半導(dǎo)體熱敏電阻實(shí)驗(yàn)中溫度曲線的曲線擬合為例,全面地總結(jié)了利用Matlab程序進(jìn)行曲線擬合的基本理論和具體方法,演示了lsqcurvefit、nlinfit和fit三個非線性擬合指令的具體程序格式與操作步驟。這些Matlab指令程序可以有效地應(yīng)對實(shí)驗(yàn)數(shù)據(jù)處理中各種復(fù)雜的曲線擬合問題。
關(guān)鍵詞:曲線擬合;Matlab;非線性擬合;最小二乘法
中圖分類號:G642.0? ? ?文獻(xiàn)標(biāo)志碼:A? ? ?文章編號:1674-9324(2019)37-0066-03
在實(shí)驗(yàn)數(shù)據(jù)處理過程中,經(jīng)常需要選擇曲線類型來擬合原始數(shù)據(jù),并以所得曲線方程來反映變量間的函數(shù)關(guān)系[1]。隨著計(jì)算機(jī)性能的提高和數(shù)值計(jì)算方法的發(fā)展,計(jì)算機(jī)軟件在實(shí)驗(yàn)數(shù)據(jù)曲線擬合工作中發(fā)揮了越來越大的作用。目前利用計(jì)算機(jī)數(shù)值計(jì)算進(jìn)行曲線擬合是實(shí)驗(yàn)數(shù)據(jù)曲線擬合工作的必然選擇。雖然計(jì)算機(jī)語言或曲線擬合軟件在實(shí)驗(yàn)數(shù)據(jù)的曲線擬合過程中得到了廣泛運(yùn)用,但對其具體操作知識的系統(tǒng)總結(jié)卻不全面。本文以半導(dǎo)體熱敏電阻實(shí)驗(yàn)中實(shí)驗(yàn)數(shù)據(jù)的曲線擬合為例,總結(jié)了各種Matlab擬合指令的具體用法。
一、半導(dǎo)體熱敏電阻實(shí)驗(yàn)
半導(dǎo)體材料具有顯著的熱電特性,半導(dǎo)體熱敏電阻的溫度系數(shù)為負(fù)值,近似滿足下式:
二、曲線擬合的理論方法
函數(shù)近似通常采用兩種方法:插值法和擬合法。插值方法要求所求得的近似函數(shù)通過所有數(shù)據(jù)點(diǎn),由于實(shí)驗(yàn)所給出的數(shù)據(jù)本身存在誤差,因此要求插值曲線通過所有的插值點(diǎn)必定會使插值函數(shù)保留這個誤差。擬合方法并不要求擬合曲線必須通過所有的數(shù)據(jù)點(diǎn),只要求擬合的近似函數(shù)能夠反映實(shí)驗(yàn)數(shù)據(jù)的整體趨勢,并使擬合數(shù)據(jù)整體的誤差最小。
2.多項(xiàng)式擬合。曲線擬合中的多項(xiàng)式擬合屬于線性最小二乘問題,關(guān)鍵步驟是求解聯(lián)立線性方程組,具體數(shù)學(xué)理論推導(dǎo)可參看相關(guān)文獻(xiàn)[2]。在實(shí)際物理問題中,這些方程組是無解的,但可以通過數(shù)值計(jì)算方法獲得其近似解。
3.非線性擬合。因?yàn)閿M合函數(shù)是非線性的,所以無法如線性最小二乘法一樣用求函數(shù)極值法來得到擬合參數(shù),而需要在最小二乘法的基礎(chǔ)上采用復(fù)雜的優(yōu)化算法來求解,常用的算法是搜索算法和迭代算法[1]。搜索算法是按一定的規(guī)則選擇若干組參數(shù)值,計(jì)算它們的目標(biāo)函數(shù)值并比較大小,選出使目標(biāo)函數(shù)值最小的參數(shù)值。不同的參數(shù)值選擇規(guī)則構(gòu)成不同的搜索算法。迭代算法的原則是從參數(shù)的一個初始猜測值出發(fā),然后產(chǎn)生一系列的參數(shù)點(diǎn),若這個參數(shù)序列收斂到使目標(biāo)函數(shù)極小的參數(shù)點(diǎn),則認(rèn)為參數(shù)的收斂值就是所求參數(shù)點(diǎn)。
4.擬合方式比較。前面部分介紹的方法可以通過計(jì)算機(jī)語言進(jìn)行編程來實(shí)現(xiàn)。Matlab也內(nèi)置了現(xiàn)成的相關(guān)指令,在使用中無需花費(fèi)時間去編程,只需要按照規(guī)定的格式調(diào)用即可。Matlab曲線擬合工具箱和Origin也集成了進(jìn)行曲線擬合的軟件,將數(shù)據(jù)導(dǎo)入軟件后,可以通過操作界面對擬合過程進(jìn)行設(shè)置。
程序擬合可以實(shí)現(xiàn)軟件擬合的全部功能,相較而言軟件擬合的功能有所限制。在需要進(jìn)行多次重復(fù)擬合的場合,軟件擬合要求對操作界面進(jìn)行多次重復(fù)操作,而程序擬合卻可避免這種重復(fù)操作,從而提高效率。除了處理單純的曲線擬合工作外,擬合程序還可以嵌入復(fù)雜的數(shù)據(jù)處理程序中去發(fā)揮作用。
三、用Matlab指令進(jìn)行曲線擬合
常用的Matlab曲線擬合指令有多項(xiàng)式擬合指令polyfit、非線性擬合指令nlinfit、非線性擬合指令lsqcurvefit、曲線擬合指令fit。下面以半導(dǎo)體熱敏電阻溫度曲線的擬合過程為例來說明這些指令的用法。
半導(dǎo)體熱敏電阻溫度曲線是一個指數(shù)函數(shù),屬于非線性擬合問題,但可以經(jīng)過數(shù)學(xué)推導(dǎo)化簡成線性擬合問題,并利用多項(xiàng)式擬合指令polyfit處理。本文的目的是介紹實(shí)驗(yàn)數(shù)據(jù)曲線擬合的普遍方法,所以仍將其按非線性擬合問題來處理,下面具體給出lsqcurvefit、nlinfit和fit三個指令的擬合過程。
1.外部數(shù)據(jù)的輸入。首先需要讀取實(shí)驗(yàn)儀器生成的Excel數(shù)據(jù)文件并保存到Matlab的變量中,具體程序如下:
t=xlsread('data.xls',1,'A2:A62');
V=xlsread('data.xls',1,'B2:B62');
T=t+273.16;? %調(diào)整溫度單位。
R=V*e-3/(20*e-6);? ?%由電壓計(jì)算電阻。
2.指令lsqcurvefit擬合。指令lsqcurvefit屬于Matlab的優(yōu)化工具箱,利用最小二乘法,從初始猜測值開始求參數(shù),將原始數(shù)據(jù)點(diǎn)擬合到非線性函數(shù),具體格式為:x=lsqcurvefit(fun,x0,xdata,ydata),其中:xdata、ydata是原始數(shù)據(jù)點(diǎn);fun(x,xdata)是擬合函數(shù),也就是公式(1);x是擬合函數(shù)系數(shù);x0是系數(shù)初始猜測值,其初始設(shè)置可能會影響結(jié)果。如擬合結(jié)果不理想,可以改變初始值x0后再重新擬合。具體Matlab程序如下:
x0=[2600,1000];
fun=@(x,T)x(1)*exp(x(2)*(1./T-1/300));
x=lsqcurvefit(fun,x0,T,R);
R0=x(1);B=x(2);
disp(['R=',num2str(R0),'*exp(',num2str(B),…
'*(1./T-1/T0))']);
計(jì)算結(jié)果如下:
R=2230.4327*exp(3407.2165*(1/T-1/T0))
擬合曲線和原始數(shù)據(jù)的對比如圖2所示,結(jié)果顯示擬合曲線與原始數(shù)據(jù)完全一致。如果對擬合效果要求較高,可以通過Matlab幫助系統(tǒng),查閱表征擬合效果的具體參數(shù)。
3.指令nlinfit擬合。指令nlinfit屬于Matlab的統(tǒng)計(jì)和機(jī)器學(xué)習(xí)工具箱,采用迭代最小二乘法估算擬合系數(shù)。函數(shù)nlinfit是非線性擬合的通用函數(shù),適用面比函數(shù)lsqcurvefit更廣,例如可以做加權(quán)最小二乘擬合。具體格式如下:
x=nlinfit(xdata,ydata,fun,x0)
與指令lsqcurvefit類似,不同的x0可能會得到不同的結(jié)果。具體Matlab程序如下:
x0=[2000,100];
fun=@(x,T)x(1)*exp(x(2)*(1./T-1/300));
x=nlinfit(T,R,fun,x0);
R0=x(1);B=x(2);
disp(['R=',num2str(R0),'*exp(',num2str(B),…
'*(1/T-1/T0))']);
計(jì)算結(jié)果如下:
R=2230.4327*exp(3407.2165*(1/T-1/T0))
這與指令lsqcurvefit的擬合結(jié)果完全一致。初始值x0設(shè)為[2000,100],初始值的改變沒有影響擬合結(jié)果。
4.指令fit擬合。指令fit屬于Matlab的曲線擬合工具箱,其功能與曲線擬合工具箱軟件cftool類似。具體格式如下:
fitobject=fit(xdata,ydata,afitType)
aFittype=fittype(expression,Name,Value)
其中參數(shù)具體含義可查看Matlab幫助系統(tǒng)。與指令lsqcurvefit和nlinfit不同,指令fit不必設(shè)置擬合系數(shù)初始值。具體Matlab程序如下:
X=fittype('R0*exp(B*(1/T-1/300))',…
'independent','T','coefficients',{'R0','B'});
Y=fit(T,R,X);
disp(['R=',num2str(Y.R0),…
'*exp(',num2str(Y.B),'*(1/T-1/T0))']);
計(jì)算結(jié)果如下:
R=2230.4328*exp(3407.2159*(1/T-1/T0))
擬合結(jié)果與前面兩個指令的擬合結(jié)果幾乎一致。
四、結(jié)論
采用計(jì)算機(jī)數(shù)值計(jì)算方法,可以進(jìn)行高精度、高效率的實(shí)驗(yàn)數(shù)據(jù)曲線擬合工作。本文以半導(dǎo)體熱敏電阻實(shí)驗(yàn)的曲線擬合過程為例,全面總結(jié)了利用Matlab程序進(jìn)行數(shù)據(jù)曲線擬合的基本理論和具體方法。具體介紹三個Matlab指令的使用方法和程序格式。應(yīng)用Matlab程序進(jìn)行曲線擬合,不但可以將數(shù)據(jù)擬合成各種函數(shù),而且便于將其代碼集成到復(fù)雜的實(shí)驗(yàn)數(shù)據(jù)處理程序中去,從而有助于完成高效、精確的實(shí)驗(yàn)數(shù)據(jù)處理工作。
參考文獻(xiàn):
[1]劉金遠(yuǎn),段萍,鄂鵬.計(jì)算物理學(xué)[M].科學(xué)出版社,2012.
[2]彭芳麟.計(jì)算物理基礎(chǔ)[M].北京:高等教育出版社,2010.
Curve Fitting of Temperature Curve of Semiconductor Thermistor Based on Matlab
DONG Qing-rui
(School of Physics and Electronics,Shandong Normal University,Ji'nan,Shandong 250014,China)
Abstract:To find an appropriate curve-fitting method quickly,taking the curve fitting of the temperature curve of a semiconductor thermistor as an example,the basic theory and method of curve fitting using Matlab programs are summarized comprehensively.The program format and operation steps of three non-linear fitting instructions,lsqcurvefit,nlinfit and fit,are demonstrated.These MATLAB instruction programs can effectively deal with various complex curve fitting problems in experimental data processing.
Key words:curve fitting;Matlab;nonlinear fitting;least-square method