沈建武
【摘要】本文主要講解利用VB編程解決數(shù)學(xué)課程里的利潤最大值問題,引導(dǎo)學(xué)生加強題意分析,結(jié)合數(shù)學(xué)知識,建立數(shù)學(xué)模型,然后根據(jù)數(shù)學(xué)模型設(shè)計算法并利用程序設(shè)計語言編程解決實際問題。
【關(guān)鍵詞】VB 數(shù)學(xué)模型 If語句 For循環(huán)
【中圖分類號】G632.4 【文獻(xiàn)標(biāo)識碼】A 【文章編號】2095-3089(2017)30-0075-02
在數(shù)學(xué)課程里,學(xué)生常常會遇到較為復(fù)雜繁瑣的實際問題,學(xué)生一時難以求解,而運用計算機編程解決往往會變得有效、便捷多。在編程解決具體問題中應(yīng)引導(dǎo)學(xué)生把實際問題抽象為數(shù)學(xué)模型,我們除已知的數(shù)學(xué)概念、數(shù)學(xué)公式可直接利用外,還可根據(jù)題意建立方程組、不等式組、函數(shù)式、運算式、遞推式等等。
一、結(jié)合具體問題,理清解題思路
問題:某太陽能設(shè)備廠在計劃期內(nèi)擬生產(chǎn)甲、乙、丙三種適銷產(chǎn)品,每件銷售利潤分別為4萬元、3萬元、2萬元。按工藝規(guī)定,甲、乙、丙三種產(chǎn)品都需要在A、B、C、D四種不同的設(shè)備上加工,其中甲產(chǎn)品生產(chǎn)需在A、B、C、D四種設(shè)備上加工的臺時數(shù)分別為2、1、4、0;乙產(chǎn)品為2、2、0、4;丙產(chǎn)品為1、1、0、0。已知A、B、C、D四種設(shè)備在計劃期內(nèi)有效使用臺時數(shù)分別為12、8、16、12。如何安排生產(chǎn)可使利潤最大?
通過問題描述不難看出這是個典型的線性規(guī)劃問題,我們主要通過構(gòu)造相應(yīng)的目標(biāo)函數(shù)來求得生產(chǎn)利潤最大值。
1. 分析問題
設(shè)甲、乙、丙三種產(chǎn)品的產(chǎn)量分別為x、y、z件,利潤總額為f(x, y, z),根據(jù)題意,構(gòu)造x、y、z變量的約束條件應(yīng)滿足如下不等式組:
構(gòu)造以x、y、z為變量的目標(biāo)函數(shù)f(x, y, z)=4x+3y+2z,計算f(x, y, z)值的可行域。
2. 加強題意分析,尋找解題思路和方法
根據(jù)不等式組可知,x、y、z是自然數(shù)且滿足:0≤x≤4,0≤y≤3,0≤z≤8。這樣,可采用窮舉的方法,在許可的范圍內(nèi)尋找適當(dāng)?shù)膞、y、z,求出利潤總額f(x, y, z)一系列的值,這一系列值的集合即為f(x, y, z)的可行域。在可行域的一系列f(x, y, z)值中找出最大f_max值,即為所求的生產(chǎn)利潤最大。
以上所述為解決線性規(guī)劃問題的一般思路,學(xué)生容易理解,但實際求解時需做大量的判斷和計算,人工計算非常繁瑣,一時半刻求不出正確的答案;若編寫程序讓計算機完成,則可充分發(fā)揮計算機運算速度快、計算準(zhǔn)確的特點。
二、VB語言實現(xiàn)數(shù)學(xué)中的關(guān)鍵問題
1. 約束條件的實現(xiàn)
VB中的If語句很方便的實現(xiàn)約束條件的判斷,其中多個不等式應(yīng)同時成立正好可用VB中的邏輯運算符And(與運算:當(dāng)兩個操作數(shù)同時為真時,結(jié)果才為真)相連接。
2. VB中For循環(huán)可表示x、y、z的變化
根據(jù)題意和分析不等式組可知,x可從0變化到4,y可從0變化到3,z可從0變化到8,在程序設(shè)計中應(yīng)對x、y、z值作離散化處理,本題中,x,y,z∈N(N表示自然數(shù)),故可將x、y、z的變化量設(shè)為1,利用VB提供的For語句三重循環(huán)可以方便地表示x、y、z變化。
3. 目標(biāo)函數(shù)f(x, y, z)最大值的求解
利潤總額f(x, y, z)是一系列值的集合,用VB編程求其中的最大值f_max。
①把滿足不等式組的x、y、z代入f(x, y, z)=4x+3y+2z中求出一系列值存放在定義的數(shù)組f中。
②開始假設(shè)利潤總額最大值f_max=0
③利用VB的三重for循環(huán)依次取出存放在數(shù)組f中的數(shù)并與f_max比較大小,若f_max< f(x, y, z),則f_max= f(x, y, z),直至循環(huán)結(jié)束,最后f_max中存放的就是f(x, y, z)中的最大值,從而得出利潤總額的最大值。
三、VB程序設(shè)計
本程序的界面非常簡單,只需一個窗體(Form1)、一個命令按鈕(Command1)即可,命令按鈕的單擊事件過程代碼如下(單引號后面為程序代碼注釋):
Private Sub Command1_Click()
Dim x, y, z As Integer
Dim x_max, y_max, z_max, f_max As Integer
Dim f(4, 3, 8) As Integer '定義存放函數(shù)f (x,y,z)值的數(shù)組f
'把滿足不等式組的x、y、z代入 f (x,y,z)=4x+3y+2z中求值存入數(shù)組
For x = 0 To 4
For y = 0 To 3
For z = 0 To 8
If (2 * x + 2 * y + z <= 12) And (x + 2 * y + z <= 8) Then
f(x, y, z) = 4 * x + 3 * y + 2 * z
Else
f(x, y, z) = 0
End If
Next z
Next y
Next x
f_max = 0 '初始化最大值變量f_max為0
'依次取出數(shù)組f (x,y,z) 中所有的值,找出最大值存放在變量f_max
For x = 0 To 4
For y = 0 To 3
For z = 0 To 8
If f_max < f(x, y, z) Then
f_max = f(x, y, z)
x_max = x
y_max = y
z_max = z
End If
Next z
Next y
Next x
Print "當(dāng)x="; x_max; ",y="; y_max; ",z="; z_max; "時,"
Print " f (x,y,z)的最大值="; f_max
End Sub
運行程序,單擊命令按鈕(Command1),立即在窗體上顯示結(jié)果如圖所示。
若想探究目標(biāo)函數(shù)f(x, y, z)中具體有哪些值,可在程序代碼“f(x, y, z) = 4 * x + 3 * y + 2 * z”后面回車換行輸入“Print f(x, y, z)”,運行程序,單擊命令按鈕(Command1),窗體上會分行顯示下列數(shù)值:0、2、4、6、8、10、12、14、16、3、5、7、9、11、13、15、6、8、10、12、14、9、11、13、4、6、8、10、12、14、16、18、7、9、11、13、15、17、10、12、14、16、13、15、8、10、12、14、16、18、20、11、13、15、17、19、14、16、18、17、12、14、16、18、20、22、15、17、19、21、18、20、16、18、20、22、24、19、21、23、22,最后再顯示上圖所示最大值信息。
通過本文的敘述不難看出,編寫程序求解數(shù)學(xué)中相對復(fù)雜的線性規(guī)劃問題很方便、快捷,而且程序設(shè)計的通用性強,對于不同的線性規(guī)劃問題,只需要改變x、y、z的變化范圍、約束條件和目標(biāo)函數(shù)即可,所以計算機程序設(shè)計實現(xiàn)數(shù)值計算也成為數(shù)學(xué)建模的常用方法,這不僅能快速、準(zhǔn)確的得到計算結(jié)果,同時也為問題的求解提供了新的思路。
參考資料:
[1]信息技術(shù)(選修1)算法與程序設(shè)計,廣東教育出版社.
[2]普通高中數(shù)學(xué)新課程標(biāo)準(zhǔn)(實驗),中華人民共和國教育部.
[3]楊振山等.大學(xué)計算機基礎(chǔ)簡明教程[M].北京:高等教育出版社.
[4]李佐鋒.數(shù)學(xué)建模[M].中國廣播電視大學(xué)出版社 .endprint