張茁 楊曉峰
基金項目:基于Hadoop的非標(biāo)準(zhǔn)化物流配貨數(shù)據(jù)分析與應(yīng)用研究 課題編號:2017JJ5042
摘要:在大數(shù)據(jù)應(yīng)用數(shù)學(xué)這門課程中,不僅要求教師能教授必要的數(shù)學(xué)知識,也要讓同學(xué)們學(xué)會如何將數(shù)學(xué)知識運用到Python語言程序當(dāng)中去,將程序語言的功能最大化。本文通過一個線性代數(shù)應(yīng)用案例講解如何使用Python編程實現(xiàn)數(shù)學(xué)問題,并優(yōu)化程序,使其具有更好的通用性和可推廣性。
關(guān)鍵詞:應(yīng)用數(shù)學(xué);大數(shù)據(jù);Python語言;程序
中圖分類號:G642;O151.2-4?? 文獻標(biāo)識碼:A?? 文章編號:1672-9129(2020)16-0117-01
大數(shù)據(jù)應(yīng)用數(shù)學(xué)課程開設(shè)之前學(xué)生已初步掌握了Python語言的語法和基本功能實現(xiàn),在學(xué)習(xí)大數(shù)據(jù)應(yīng)用數(shù)學(xué)課程上學(xué)生學(xué)習(xí)了更多Python語言在數(shù)學(xué)問題上的實現(xiàn)。對于有的應(yīng)用問題來說,僅僅實現(xiàn)數(shù)學(xué)問題的計算并不能很好體現(xiàn)計算機語言的優(yōu)勢,計算機語言本身具有的判斷、循環(huán)作用也可以很好的應(yīng)用的數(shù)學(xué)問題中,使得程序更加的智能和具有可推廣性。
下面以教材當(dāng)中的一個線性代數(shù)的應(yīng)用案例來說明如何將Python程序設(shè)計得更加智能和具有可推廣價值。
案例:設(shè)有甲、乙、丙3種酒,重要成分A、B、C的各自含量如表1所示。調(diào)酒師現(xiàn)要用這3種酒配出另一種酒,使其中A、B、C的含量分別為66.5%、18.5%、15%,請問能否配出合乎要求的酒?如果能,3種酒的比例如何分配?當(dāng)甲酒缺貨時,能否用3種主要成分含量為(0.8,0.12,0.08)的丁酒代替?
表1 甲、乙、丙3種酒的主要成分含量
ABC
甲 酒0.70.20.1
乙 酒0.60.20.2
丙 酒0.650.150.2
分析:設(shè)甲、乙、丙3種酒的成分含量依次為x1、x2、x3,則
0.7x1+0.6x2+0.65x3=a0.2x1+0.2x2+0.15x3=b0.1x1+0.2x2+0.2x3=c?? (1)
甲、乙、丙3種酒中都含有A、B、C三種成分,要能配出新酒使得新酒中A、B、C三種成分的含量分別為a、b、c,就是要使得方程組(1)在區(qū)間[0,1]有實數(shù)解,其實數(shù)解即為甲、乙、丙3種酒的比例;方程組若在區(qū)間內(nèi)無實數(shù)解則不能按要求配出。將甲酒改為丁酒即將方程組中3個方程的第一個系數(shù)依次改為丁酒的成分含量即可。
解:設(shè)甲、乙、丙3種酒的成分含量依次為x1、x2、x3,則(1)式中的a、b、c依次取66.5%、18.5%、15%,解得(x1,x2,x3)為(0.5,0.2,0.3),即可以用甲、乙、丙3種酒配出A、B、C的含量分別為66.5%、18.5%、15%的新酒,且甲、乙、丙3種酒的比例依次為50%、20%、30%。
用筆算解這個方程組并不是十分容易(此處省略運算步驟),但是用Python的庫函數(shù)十分的簡單。輸入命令:
import numpy as np
D = np.array([[0.7,0.6,0.65],[0.2,0.2,0.15],[0.1,0.2,0.2]]) # 創(chuàng)建系數(shù)行列式
arr = np.array([0.665,0.185,0.15])
x = np.linalg.solve(D, arr)
print('方程組的解為:', x)
輸出結(jié)果:
方程組的解為:[0.5 0.2 0.3]
將甲酒改成丁酒后,類似的設(shè)丁、乙、丙3種酒的成分含量依次為x1、x2、x3,則(1)式中x1的系數(shù)依次改為(0.8,0.12,0.08),解得(x1,x2,x3)為(0.41666667,0.95,-0.36666667),不全為正數(shù),即不可以用丁酒代替甲酒配出A、B、C的含量分別為66.5%、18.5%、15%的新酒。
Python輸入命令:
import numpy as np
D = np.array([[0.8,0.6,0.65],[0.12,0.2,0.15],[0.08,0.2,0.2]]) # 創(chuàng)建系數(shù)行列式
arr = np.array([0.665,0.185,0.15])
x = np.linalg.solve(D, arr)
print('方程組的解為:', x)
輸出結(jié)果:
方程組的解為:[ 0.41666667,0.95,-0.36666667]
此處我們只用到了程序語言的計算功能,最后的判斷還是要人工做出來,如果要將此程序運用到實際生產(chǎn)中,我們考慮到是可以將程序語言的判斷功能也添加進去,讓程序可以主動對計算結(jié)果做出判斷。我們在主程序的后面添加了循環(huán)和判斷語句。輸入命令:
import numpy as np
D = np.array([[0.8,0.6,0.65],[0.12,0.2,0.15],[0.08,0.2,0.2]]) # 創(chuàng)建系數(shù)行列式
arr = np.array([0.665,0.185,0.15])
x = np.linalg.solve(D, arr)
print('方程組的解為:', x)
z=0
for xx in x:
if xx<=0 or xx>=1:
print("不能用丁酒代替甲酒!")
break
z=z+1
if z==3:
print("可以用丁酒代替甲酒!")
輸出結(jié)果:
方程組的解為:[ 0.41666667 0.95 -0.36666667]
不能用丁酒代替甲酒!
在這套新的程序命令中,加入了循環(huán)判斷的語句,因此可以由方程組的解直接進行判斷并且得出正確的結(jié)論,在數(shù)據(jù)發(fā)生變化時也可以很方便的對程序中的數(shù)據(jù)進行更新,而不需要再變動其他的命令,仍然可以得到正確的結(jié)論,這得使程序更加的完整而具有推廣價值。
我們在大數(shù)據(jù)專業(yè)開設(shè)數(shù)學(xué)課程,是為了讓學(xué)生有必要的數(shù)學(xué)知識,在得到數(shù)據(jù)以后會提出問題、使用數(shù)學(xué)理論分析問題、并利用程序語言進一步地解決問題。數(shù)學(xué)理論時我們分析問題的基礎(chǔ),程序語言是我們得到問題結(jié)論的工具,二者缺一不可,相輔相成。因此大數(shù)據(jù)專業(yè)的應(yīng)用數(shù)學(xué)課程必須成為一門理論和實踐高度統(tǒng)一的課程才能達(dá)到培養(yǎng)學(xué)生理論和實踐相結(jié)合的良好的實際分析能力和數(shù)學(xué)建模能力。
參考文獻:
[1]雷俊麗,張良均.大數(shù)據(jù)數(shù)學(xué)基礎(chǔ)(Python語言描述)[M].人民郵電出版社:北京,2019:138.
[2]徐恩立.淺析數(shù)學(xué)與應(yīng)用數(shù)學(xué)在大數(shù)據(jù)中的應(yīng)用[J].科技資訊,2019,36:248-250.
[3]徐時芳,潘春燕,陳昱池.大數(shù)據(jù)+數(shù)學(xué)核心素養(yǎng)培育的STEM教育應(yīng)用研究[J].教育教學(xué)論壇,2019,32:191-192.