黃淵

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