摘 要:在高等數(shù)學領域中,求多元函數(shù)的極值是解決聯(lián)系實際求最優(yōu)解問題的最基礎,最有效的方法。而在較為復雜的多元函數(shù)中,求解極值的計算量較大,因此合理借助計算機軟件來實現(xiàn)求極值能夠節(jié)省時間,提高效率。在眾多軟件中Python具有語言邏輯簡單,通用性強,計算效率高等特點,同時Python中豐富的資源庫能夠為科學計算提供有力支撐,因此選用Python軟件對數(shù)學領域的多元函數(shù)的極值進行求解。以二元函數(shù)為例,通過在Python軟件環(huán)境下實現(xiàn)求解函數(shù)的極值,在分析最優(yōu)化問題等實際應用中實現(xiàn)高效求解。
關鍵詞:多元函數(shù);極值;求解;Python
中圖分類號:TP311.5 文獻標識碼:A DOI:10.3969/j.issn.1003-6970.2021.03.050
本文著錄格式:趙禹琦.Python軟件在求多元函數(shù)極值中的應用[J].軟件,2021,42(03):171-174
The Application of Python Software in Finding the Extremum of Multivariate Function
ZHAO Yuqi
(School of Intelligent Manufacturing Zhanjiang Institute of Science and Technology, Zhanjiang? Guangdong? 524094)
【Abstract】:In the field of higher mathematics, finding the extremum of multivariate function is the most basic and effective method to solve the optimization problem. In the more complex multivariate functions, a large amount of calculation are needed to find the extremum. Therefore, with the help of computer software, it can save time and improve efficiency for finding the extremum. Among different software, python is featured with simple language logic, strong versatility and high computational efficiency. At the same time, the rich resource library in python can provide strong support for scientific calculation. Therefore, python is chosen to be applied to solve the problem of finding the extremum of multivariate functions in the field of mathematics. Taking binary function as an example, Finding the extremum of multivariate function by python software, efficiency has been great improved in practical applications especially when analyzing optimization problems.
【Key words】:multivariate function;extremum;solve problems;Python
0 引言
在高等數(shù)學理論中求解多元函數(shù)的極值問題是研究多元微分學的基礎,在實際生活中也有廣泛應用。在用數(shù)學分析量化實際問題來求最優(yōu)解時,其最優(yōu)解往往受多個條件因素影響,因此通常用到的是多元函數(shù),而在最優(yōu)化問題中常用的方法是求多元函數(shù)的極值,例如在經(jīng)濟學領域中用來合理分配達到利潤最大化,在數(shù)據(jù)分析領域中篩選最優(yōu)元素,在規(guī)劃領域中求最優(yōu)解等。傳統(tǒng)人工求多元函數(shù)極值的方法繁瑣,容易出錯,時間成本高,因此需要借助計算機科學軟件來進行求解。Python軟件的邏輯語言簡明,交互性強,其中含有豐富的資源庫,通過合理調(diào)用能夠快速實現(xiàn)科學計算,被廣泛應用在數(shù)學求值計算中。基于Python環(huán)境合理設計程序能夠高效解決多元函數(shù)極值問題,為多元函數(shù)應用提供支撐。多元函數(shù)求極值的基礎是應用極值的充分條件來判斷并求解,以此為依據(jù)通過Python軟件能夠?qū)崿F(xiàn)對極值的快速準確求解。
1 Python軟件簡介
Python是一種邏輯語法簡便,有較強的通用性的軟件,它最早是20世紀80年代由荷蘭程序員開發(fā)出的。Python所用語言是強調(diào)代碼易讀性的高級語言,從最初開發(fā)到現(xiàn)在已經(jīng)更新多個版本,隨著其功能性的逐漸增強,越來越多的程序員們選擇使用Python完成代碼編寫[1]。Python的功能性強,廣泛應用在數(shù)據(jù)分析,云計算,網(wǎng)頁設計和開發(fā)等前沿領域,眾多大型公司和互聯(lián)網(wǎng)企業(yè)例如知乎,百度,阿里等,都主要依托Python軟件。Python的代碼是自由開放的,用戶使用Python軟件是不需要支付任何費用的,并且其下載安裝簡單易操作。Python的語言是邏輯簡單,容易閱讀的,這有助于用戶更專注于應用軟件去解決問題,而不是花費大量時間去弄懂復雜語言。Python的語言具有解釋性,它不必將編寫的程序翻譯成二進制,可以直接運行程序中的源代碼。Python的程序運行簡單,可以無需修改地直接將程序語言由一臺機復制粘貼到另一臺機上運行,其語言可以實現(xiàn)有效的跨平臺應用。Python的擴展性強,它具有較為豐富的腳本語言和多種類型的庫,這些庫的功能包括科學計算、訪問數(shù)據(jù)庫、網(wǎng)絡編程等[2]。
Python具有獨特的語法格式,它并不需要用分號,括號等符號把代碼分割開,它是用TAB或者空格縮進來描述所需要的語法,這可以保持代碼的完整性和簡明性,它的輸出語言應用print()。在Python軟件中語言轉換能力很強,Python中的變量和變量類型不需要進行申明,直接給變量做相應的賦值即可[3]。例如:a=3,b=i,s=Ture,t=None等,盡管這些變量沒有申明類型,但賦值過程中也賦予了其相應的變量類型。Python軟件的變量是區(qū)分大小寫的。Python軟件的分支判斷是通過if...elif...else來實現(xiàn)的,常用的判斷符號有:==,!=,<,>,is等。在Python中也可以直接用變量作為分支判斷的條件,其中只要時非None變量都會被認為是真值。Nnoe類型的變量有:None,F(xiàn)alse,0,,()等。應用分支結構判斷格式如下:
if 條件語句:
print( )
elif 條件語句:
print( )
else:
Print( )
Python軟件中還可以定義函數(shù)并調(diào)用,其格式如下:
def? fun(x,y):
Return(2*x+3*y+1)
fun(1,2)
Python里面有多種數(shù)據(jù)類型,主要分為元祖類型,列表類型和字典類型。元祖類型是指用小括號括起來的一組元素,內(nèi)容具有不可變性。列表類型的表示主要用中括號,它與元祖的區(qū)別是內(nèi)容和長度是動態(tài)可變的。字典類型類似一個容器,可以用來儲存任意的對象,具有可變性。
Python軟件中包含的庫種類豐富,我們把具有相關功能的模塊組成的集合統(tǒng)稱為庫。在Python中主要分為標準庫,第三方庫以及自定義庫[4]。具有核心作用的庫主要包括科學計算庫(numpy,,math,sympy等)主要用來進行數(shù)學中的科學計算和數(shù)值求解;工程計算庫(scipy)主要用來解決工程中的計算問題,它的模塊主要有集成,線性代數(shù)和優(yōu)化等;數(shù)據(jù)分析處理庫(pandas)用來系統(tǒng)分析處理復雜數(shù)據(jù);圖像繪制處理庫(matplotlib,PIL)主要是用來繪圖,對圖片進行深度處理的功能庫。通過合理調(diào)用Python軟件的功能庫,可以把復雜問題在程序上簡單化,達到高效解決問題的目的。
2 多元函數(shù)求極值問題
在求解量化分析的實際問題中,目標問題往往受多種因素影響和制約,在應用數(shù)學模型來準確描述目標問題時,通常就需要分析多個自變量與多個因變量之間存在的某種相互依存的聯(lián)系,由此引入多元函數(shù)。
多元函數(shù)的概念是由一元函數(shù)進行空間推廣得到的,假設D是Rn空間上的一個非空點集,我們把從D到R的映射f稱為集合D上的n元函數(shù)??梢杂涀觯?/p>
或
其中D為函數(shù)f的定義域,x1,x2,…xn叫做該函數(shù)的自變量,u叫做函數(shù)的因變量。在這個定義中,如果n=1則把該函數(shù)稱為一元函數(shù),n≥2就把該函數(shù)稱為多元函數(shù)。在多元函數(shù)中,集合叫做該函數(shù)的值[5]。其中二元函數(shù)是多元函數(shù)的基礎,因此研究極值問題以二元函數(shù)為例。
把一元函數(shù)可以求導數(shù)的性質(zhì)推廣到多元函數(shù)中,即可得到多元函數(shù)偏導數(shù)的概念。設函數(shù)z=f(x,y),(x,y)∈D,其中在定義域的內(nèi)點中有一點(x0,y0),當保持y=y0不變,對應的x相對于x0有增量?x,函數(shù)有增量,如果存在的極限值,則稱函數(shù)z=f(x,y) 在該點關于x可偏導,把這個極限值叫做z=f(x,y)在
(x0,y0)關于x的偏導數(shù)。記為。
類似的可以定義函數(shù)z=f(x,y)關于y的偏導數(shù),記為。
從偏導數(shù)定義可以看出二元函數(shù)z=f(x,y)在(x0,y0)點關于x的偏導數(shù)等于一元函數(shù)f(x,y0)在點x0處的導數(shù),關于y的偏導數(shù)也有類似結論??梢钥闯銮蠖嘣瘮?shù)偏導數(shù)可以先固定一個元素,并對另一個元素求導數(shù)。
如果二元函數(shù)z=f(x,y)在(x,y)∈D具有偏導數(shù),這兩個偏導數(shù)構成的函數(shù)分別可以再次對未知數(shù)x,y求偏導數(shù),得到的結果稱為z=f(x,y)的二階偏導數(shù),二元函數(shù)的二階偏導數(shù)可以寫成:
,
,
關于多元函數(shù)利用偏導數(shù)可以對其求極值。依據(jù)極值的充分條件,如果有函數(shù)z=f(x,y)在點(x0,y0)的鄰域內(nèi)有連續(xù)的二階偏導數(shù),其中(x0,y0)是函數(shù)z=f(x,y)的駐點(一階偏導數(shù)等于零的點),用以下符號表示:
,,
,
(1)如果H>0并且有A<0,則可以得到f(x0,y0)是函數(shù)的極大值;如果H>0并且有A>0,則可以得到f(x0,y0)是函數(shù)的極小值。
(2)如果H<0則說明f(x0,y0)不是極值。
(3)如果H=0則說明f(x0,y0)可能是極值也可能不是極值,需要另外具體分析討論。
應用極值的充分條件求解是二元函數(shù)求極值的基礎,而Python軟件具有科學計算庫,可以實現(xiàn)求導。在Python中適當?shù)貞脳l件語句可以進行判斷,因此利用Python合理編寫代碼可以實現(xiàn)對符合極值判別條件的二元函數(shù)進行極大值和極小值的求解。
3 用Python軟件求解二元函數(shù)的極值
Python軟件使用的代碼邏輯簡潔,可閱讀性較強,還有多種功能全面的庫可以調(diào)用,因此在求解多元函數(shù)極值問題中多選用Python軟件來實現(xiàn)。Python軟件的科學計算庫可以快速高效進行求導,求偏導以及解方程的運算,適當引用條件語句可以對變量進行判別,為應用極值充分條件求解二元函數(shù)極值的問題提供了支撐,可以節(jié)省計算時間,保證求解的準確性。
求解二元函數(shù)的極值關鍵在于求出該函數(shù)的一階和二階偏導數(shù),在利用充分條件進行判別,具體舉例如下:
求函數(shù)的極值。
依據(jù)極值判別的充分條件:
先求出相應的一階偏導數(shù):
通過解方程組求駐點:得到駐點(-3,0), (-3,2),(1,0),(1,2)
求解該函數(shù)的二階偏導數(shù)fxx=6x+6,fxy=0,fyy=-6x+6
應用極值充分條件進行判別:
把點(-3,0)帶入得到:A=-12,B=0,C=6,H=AC- B2=-72,其中H<0所以該點不是極值點。
把點(-3,2)帶入得到:A=-12,B=0,C=-6,H=AC- B2=-72,其中H>0,A<0所以該點是極大值點,f(-3,2)= 31,是極大值。
把點(1,0)帶入得到:A=12,B=0,C=6,H=AC- B2= -72,其中H>0,A>0所以該點是極小值點,f(1,0)=-5,是極小值。
把點(1,2)帶入得到:A=12,B=0,C=-6,H=AC- B2=-72,其中H<0所以該點不是極值點。
在python軟件環(huán)境中對該題進行求極值計算程序如下:
>>> from sympy import*
>>> x,y=symbols('x,y')
>>> def fun0(x,y):
return(x**3-y**3+3*(x**2)+3*(y**2)-9*x)
>>> def fun1(x,y):
return(diff(fun0(x,y),x))
>>> fun1(x,y)
3*x**2 + 6*x - 9
>>> def fun2(x,y):
return(diff(fun0(x,y),y))
>>> fun2(x,y)
-3*y**2 + 6*y
>>> solve([Eq(fun1(x,y),0),Eq(fun2(x,y),0)],(x,y))
[(-3, 0), (-3, 2), (1, 0), (1, 2)]
>>> def fun3(x,y):
return(diff(fun1(x,y),x))
>>> fun3(x,y)
6*x + 6
>>> def fun4(x,y):
return(diff(fun1(x,y),y))
>>> fun4(x,y)
0
>>> def fun5(x,y):
return(diff(fun2(x,y),y))
>>> fun5(x,y)
-6*y + 6
>>> def f1(x,y):
return(6*x + 6)
>>> a1=f1(-3,0);a2=f1(-3,2);a3=f1(1,0);a4=f1(1,2)
>>> b1=0;b2=0;b3=0;b4=0
>>> def f2(x,y):
return(-6*y + 6)
>>> c1=f2(-3,0);c2=f2(-3,2);c3=f2(1,0);c4=f2(1,2)
>>> m1=a1*c1-b1**2;m2=a2*c2-b2**2;m3=a3* c3-b3**2;m4=a4*c4-b4**2
>>> if m1>0 and a1>0:
print('極小值',fun0(-3,0))
elif m1>0 and a1<0:
print('極大值',fun0(-3,0))
elif m1<0:
print('不是極值')
else:
print('不能判斷')
不是極值
>>> if m2>0 and a2>0:
print('極小值',fun0(-3,2))
elif m2>0 and a2<0:
print('極大值',fun0(-3,2))
elif m2<0:
print('不是極值')
else:
print('不能判斷')
極大值 31
>>> if m3>0 and a3>0:
print('極小值',fun0(1,0))
elif m3>0 and a2<0:
print('極大值',fun0(1,0))
elif m3<0:
print('不是極值')
else:
print('不能判斷')
極小值 -5
>>> if m4>0 and a4>0:
print('極小值',fun0(1,2))
elif m4>0 and a2<0:
print('極大值',fun0(1,2))
elif m4<0:
print('不是極值')
else:
print('不能判斷')
不是極值。
經(jīng)過對例題驗算結果與Python軟件程序運行結果相同,可以證明該代碼能準確有效運行。由此可見應用Python軟件可以求出符合極值充分條件的二元函數(shù)的極值,且語言邏輯簡單,能夠達到節(jié)省時間提高效率的目地。
4 結語
多元函數(shù)求極值問題是多元微分學的重要組成部分,在解決受多種客觀因素影響的實際問題時,通常把問題抽象出帶有多元函數(shù)的數(shù)學模型,對其求最優(yōu)解時廣泛應用到多元函數(shù)求極值思想。高效精確地求出多元函數(shù)的極值有助于節(jié)約時間成本,實現(xiàn)科學求解最優(yōu)化問題。而Python軟件可以實現(xiàn)求解導數(shù),偏導數(shù),高階導數(shù)等科學計算,通過適當編寫代碼,能夠達到精確求得滿足極值判別條件的二元函數(shù)的極值。Python具有簡單的語法結構,運行效率提高,能夠為解決實際問題提供有效工具。
參考文獻
[1] 張偉,邱崇濤,謝明宏,等.利用Python自動化生成地質(zhì)解釋圖件[J].物探與化探,2021,45(1):186-191.
[2] 王軼哲.基于數(shù)據(jù)挖掘的客戶預測及其Python實現(xiàn)技術研究[J].電子制作,2020(24):51-52.
[3] 張珩.Python的計算機軟件應用技術探討[J].電腦知識與技術,2020,16(32):96-97+102.
[4] 顧建軍.信息與計算科學專業(yè)的Python教學分析與設計[J].科技資訊,2020,18(35):35-37+40.
[5] 王培,李津平,李奇芳,等.多元函數(shù)極值的探討[J].玉林師范學院學報,2019,40(5):10-13.