黃淵
【摘 要】 本文以給藥方案制定問題為例,闡述了應(yīng)用Lingo軟件求解非線性曲線擬合,無需初始值,彌補了Matlab軟件的不足,是求解非線性曲線擬合的一種比較好的方法。
【關(guān)鍵詞】 Lingo軟件;非線性曲線擬合;Matlab軟件
一、非線性曲線擬合的概念
假設(shè)已知經(jīng)驗公式(這里b和x均可為向量),要求根據(jù)一批有誤差的數(shù)據(jù)0,1,2,…,n,確定參數(shù)b。這樣的問題稱為曲線擬合,其基本原理是最小二乘法,即求b使得均方誤差
達到最小。如果關(guān)于b是非線性函數(shù),那么稱這樣的曲線擬合為非線性曲線擬合。
二、非線性曲線擬合的軟件實現(xiàn)
對于非線性曲線擬合,數(shù)學(xué)軟件Matlab提供了nlinfit函數(shù),它的調(diào)用格式為:
a=nlinfit(x,y,fun,b0)
其中,b0為待定參數(shù)b的初始值,其他的含義參見文獻[1]第71頁。關(guān)于初始值,一般要根據(jù)函數(shù)模型的數(shù)學(xué)意義和實際意義來猜測b0,這往往是比較困難的事,而且大部分數(shù)學(xué)建模教材通常直接給出初始值,不會解釋初始值是怎么來的。所以筆者在給大專生講授此內(nèi)容時也直接給出初始值,但學(xué)生不易接受。
由于非線性曲線擬合實際上是一個無約束優(yōu)化問題,即
決策變量是擬合函數(shù)含有的待定參數(shù)b,因此可以用Lingo軟件來解決。下面舉一個例子。
例:給藥方案制定問題,詳細介紹參見文獻[2]第145頁。
模型假設(shè):
[1]機體看作一個房室。
[2]藥物進入機體到分布均勻所需的時間不計。
[3]藥物排出速率與血藥濃度成正比,比例系數(shù)。
[4]血藥容積為v,t=0時注射劑量為d,則t=0,血藥濃度為。
由假設(shè)[3]得:,由假設(shè)[4]得。解微分方程:得(其中d=300mg)。
下面通過非線性擬合求出參數(shù)。
在Lingo軟件中輸入以下程序:
model:
sets:
gh/1.9/:t,c;
endsets
data:
t=0.25,0.5,1,1.5,2,3,4,6,8;
c=19.21,18.15,15.36,14.10,12.89,9.32,7.45,5.24,3.01;
enddata
min=@sum(gh:(((300/a1)*@exp(-a2*t))-c)^2);
end
運行程序得最優(yōu)值為1.065887,即誤差為1.06589,a1=14.82116,。由此得到擬合函數(shù)。
在Matlab軟件中輸入以下程序:
>>t=[0.25,0.5,1,1.5,2,3,4,6,8];
c=[19.21,18.15,15.36,14.10,12.89,9.32,7.45,5.24,3.01];
f=@(t)(300/14.82116).*exp(-0.24197.*t);
plot(t(1:9),c(1:9),'r*',[0.25:0.1:8],f([0.25:0.1:8]),'k')
運行程序,得到散點圖和擬合曲線圖如下:
三、制定給藥方案
假設(shè):
每次注射劑量D,間隔時間。
血藥濃度應(yīng)。
初次劑量應(yīng)加大。
給藥方案記為:,則:
將代入計算得:
。
故可制定給藥方案:
D0=370.5mg,D=222.3mg,t=3.8h,
即首次注射mg,其余每次注射mg,注射的間隔時間為h。
用Lingo軟件求解非線性曲線擬合,不需要給定初始值,彌補了Matlab軟件的不足,同時,程序簡單,結(jié)果可靠,是求解非線性曲線擬合的一種比較好的方法,但是Lingo軟件不會作圖,無法展示散點圖和擬合曲線圖,此時可借助Matlab軟件來解決。綜上所述,對于求解非線性曲線擬合,最好將Lingo軟件與Matlab軟件兩者結(jié)合起來使用,各取所長。
【參考文獻】
[1]章紹輝.數(shù)學(xué)建模[M].北京:科學(xué)出版社,2009.
[2]劉保東,宿潔,陳建良.數(shù)學(xué)建?;A(chǔ)教程[M].北京:高等教育出版社,2015.
[3]袁新生,邵大宏,郁時煉.LINGO和Excel在數(shù)學(xué)建模中的應(yīng)用[M].北京:科學(xué)出版社,2007.