?

Python軟件在求多元函數極值中的應用

2021-08-17 14:20趙禹琦
軟件 2021年3期
關鍵詞:極值

摘 要:在高等數學領域中,求多元函數的極值是解決聯系實際求最優解問題的最基礎,最有效的方法。而在較為復雜的多元函數中,求解極值的計算量較大,因此合理借助計算機軟件來實現求極值能夠節省時間,提高效率。在眾多軟件中Python具有語言邏輯簡單,通用性強,計算效率高等特點,同時Python中豐富的資源庫能夠為科學計算提供有力支撐,因此選用Python軟件對數學領域的多元函數的極值進行求解。以二元函數為例,通過在Python軟件環境下實現求解函數的極值,在分析最優化問題等實際應用中實現高效求解。

關鍵詞:多元函數;極值;求解;Python

中圖分類號:TP311.5 文獻標識碼:A DOI:10.3969/j.issn.1003-6970.2021.03.050

本文著錄格式:趙禹琦.Python軟件在求多元函數極值中的應用[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 引言

在高等數學理論中求解多元函數的極值問題是研究多元微分學的基礎,在實際生活中也有廣泛應用。在用數學分析量化實際問題來求最優解時,其最優解往往受多個條件因素影響,因此通常用到的是多元函數,而在最優化問題中常用的方法是求多元函數的極值,例如在經濟學領域中用來合理分配達到利潤最大化,在數據分析領域中篩選最優元素,在規劃領域中求最優解等。傳統人工求多元函數極值的方法繁瑣,容易出錯,時間成本高,因此需要借助計算機科學軟件來進行求解。Python軟件的邏輯語言簡明,交互性強,其中含有豐富的資源庫,通過合理調用能夠快速實現科學計算,被廣泛應用在數學求值計算中?;赑ython環境合理設計程序能夠高效解決多元函數極值問題,為多元函數應用提供支撐。多元函數求極值的基礎是應用極值的充分條件來判斷并求解,以此為依據通過Python軟件能夠實現對極值的快速準確求解。

1 Python軟件簡介

Python是一種邏輯語法簡便,有較強的通用性的軟件,它最早是20世紀80年代由荷蘭程序員開發出的。Python所用語言是強調代碼易讀性的高級語言,從最初開發到現在已經更新多個版本,隨著其功能性的逐漸增強,越來越多的程序員們選擇使用Python完成代碼編寫[1]。Python的功能性強,廣泛應用在數據分析,云計算,網頁設計和開發等前沿領域,眾多大型公司和互聯網企業例如知乎,百度,阿里等,都主要依托Python軟件。Python的代碼是自由開放的,用戶使用Python軟件是不需要支付任何費用的,并且其下載安裝簡單易操作。Python的語言是邏輯簡單,容易閱讀的,這有助于用戶更專注于應用軟件去解決問題,而不是花費大量時間去弄懂復雜語言。Python的語言具有解釋性,它不必將編寫的程序翻譯成二進制,可以直接運行程序中的源代碼。Python的程序運行簡單,可以無需修改地直接將程序語言由一臺機復制粘貼到另一臺機上運行,其語言可以實現有效的跨平臺應用。Python的擴展性強,它具有較為豐富的腳本語言和多種類型的庫,這些庫的功能包括科學計算、訪問數據庫、網絡編程等[2]。

Python具有獨特的語法格式,它并不需要用分號,括號等符號把代碼分割開,它是用TAB或者空格縮進來描述所需要的語法,這可以保持代碼的完整性和簡明性,它的輸出語言應用print()。在Python軟件中語言轉換能力很強,Python中的變量和變量類型不需要進行申明,直接給變量做相應的賦值即可[3]。例如:a=3,b=i,s=Ture,t=None等,盡管這些變量沒有申明類型,但賦值過程中也賦予了其相應的變量類型。Python軟件的變量是區分大小寫的。Python軟件的分支判斷是通過if...elif...else來實現的,常用的判斷符號有:==,!=,<,>,is等。在Python中也可以直接用變量作為分支判斷的條件,其中只要時非None變量都會被認為是真值。Nnoe類型的變量有:None,False,0,,()等。應用分支結構判斷格式如下:

if 條件語句:

print( )

elif 條件語句:

print( )

else:

Print( )

Python軟件中還可以定義函數并調用,其格式如下:

def? fun(x,y):

Return(2*x+3*y+1)

fun(1,2)

Python里面有多種數據類型,主要分為元祖類型,列表類型和字典類型。元祖類型是指用小括號括起來的一組元素,內容具有不可變性。列表類型的表示主要用中括號,它與元祖的區別是內容和長度是動態可變的。字典類型類似一個容器,可以用來儲存任意的對象,具有可變性。

Python軟件中包含的庫種類豐富,我們把具有相關功能的模塊組成的集合統稱為庫。在Python中主要分為標準庫,第三方庫以及自定義庫[4]。具有核心作用的庫主要包括科學計算庫(numpy,,math,sympy等)主要用來進行數學中的科學計算和數值求解;工程計算庫(scipy)主要用來解決工程中的計算問題,它的模塊主要有集成,線性代數和優化等;數據分析處理庫(pandas)用來系統分析處理復雜數據;圖像繪制處理庫(matplotlib,PIL)主要是用來繪圖,對圖片進行深度處理的功能庫。通過合理調用Python軟件的功能庫,可以把復雜問題在程序上簡單化,達到高效解決問題的目的。

2 多元函數求極值問題

在求解量化分析的實際問題中,目標問題往往受多種因素影響和制約,在應用數學模型來準確描述目標問題時,通常就需要分析多個自變量與多個因變量之間存在的某種相互依存的聯系,由此引入多元函數。

多元函數的概念是由一元函數進行空間推廣得到的,假設D是Rn空間上的一個非空點集,我們把從D到R的映射f稱為集合D上的n元函數??梢杂涀觯?/p>

其中D為函數f的定義域,x1,x2,…xn叫做該函數的自變量,u叫做函數的因變量。在這個定義中,如果n=1則把該函數稱為一元函數,n≥2就把該函數稱為多元函數。在多元函數中,集合叫做該函數的值[5]。其中二元函數是多元函數的基礎,因此研究極值問題以二元函數為例。

把一元函數可以求導數的性質推廣到多元函數中,即可得到多元函數偏導數的概念。設函數z=f(x,y),(x,y)∈D,其中在定義域的內點中有一點(x0,y0),當保持y=y0不變,對應的x相對于x0有增量?x,函數有增量,如果存在的極限值,則稱函數z=f(x,y) 在該點關于x可偏導,把這個極限值叫做z=f(x,y)在

(x0,y0)關于x的偏導數。記為。

類似的可以定義函數z=f(x,y)關于y的偏導數,記為。

從偏導數定義可以看出二元函數z=f(x,y)在(x0,y0)點關于x的偏導數等于一元函數f(x,y0)在點x0處的導數,關于y的偏導數也有類似結論??梢钥闯銮蠖嘣瘮灯珜悼梢韵裙潭ㄒ粋€元素,并對另一個元素求導數。

如果二元函數z=f(x,y)在(x,y)∈D具有偏導數,這兩個偏導數構成的函數分別可以再次對未知數x,y求偏導數,得到的結果稱為z=f(x,y)的二階偏導數,二元函數的二階偏導數可以寫成:

,

,

關于多元函數利用偏導數可以對其求極值。依據極值的充分條件,如果有函數z=f(x,y)在點(x0,y0)的鄰域內有連續的二階偏導數,其中(x0,y0)是函數z=f(x,y)的駐點(一階偏導數等于零的點),用以下符號表示:

,,

,

(1)如果H>0并且有A<0,則可以得到f(x0,y0)是函數的極大值;如果H>0并且有A>0,則可以得到f(x0,y0)是函數的極小值。

(2)如果H<0則說明f(x0,y0)不是極值。

(3)如果H=0則說明f(x0,y0)可能是極值也可能不是極值,需要另外具體分析討論。

應用極值的充分條件求解是二元函數求極值的基礎,而Python軟件具有科學計算庫,可以實現求導。在Python中適當地應用條件語句可以進行判斷,因此利用Python合理編寫代碼可以實現對符合極值判別條件的二元函數進行極大值和極小值的求解。

3 用Python軟件求解二元函數的極值

Python軟件使用的代碼邏輯簡潔,可閱讀性較強,還有多種功能全面的庫可以調用,因此在求解多元函數極值問題中多選用Python軟件來實現。Python軟件的科學計算庫可以快速高效進行求導,求偏導以及解方程的運算,適當引用條件語句可以對變量進行判別,為應用極值充分條件求解二元函數極值的問題提供了支撐,可以節省計算時間,保證求解的準確性。

求解二元函數的極值關鍵在于求出該函數的一階和二階偏導數,在利用充分條件進行判別,具體舉例如下:

求函數的極值。

依據極值判別的充分條件:

先求出相應的一階偏導數:

通過解方程組求駐點:得到駐點(-3,0), (-3,2),(1,0),(1,2)

求解該函數的二階偏導數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軟件環境中對該題進行求極值計算程序如下:

>>> 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('不能判斷')

不是極值。

經過對例題驗算結果與Python軟件程序運行結果相同,可以證明該代碼能準確有效運行。由此可見應用Python軟件可以求出符合極值充分條件的二元函數的極值,且語言邏輯簡單,能夠達到節省時間提高效率的目地。

4 結語

多元函數求極值問題是多元微分學的重要組成部分,在解決受多種客觀因素影響的實際問題時,通常把問題抽象出帶有多元函數的數學模型,對其求最優解時廣泛應用到多元函數求極值思想。高效精確地求出多元函數的極值有助于節約時間成本,實現科學求解最優化問題。而Python軟件可以實現求解導數,偏導數,高階導數等科學計算,通過適當編寫代碼,能夠達到精確求得滿足極值判別條件的二元函數的極值。Python具有簡單的語法結構,運行效率提高,能夠為解決實際問題提供有效工具。

參考文獻

[1] 張偉,邱崇濤,謝明宏,等.利用Python自動化生成地質解釋圖件[J].物探與化探,2021,45(1):186-191.

[2] 王軼哲.基于數據挖掘的客戶預測及其Python實現技術研究[J].電子制作,2020(24):51-52.

[3] 張珩.Python的計算機軟件應用技術探討[J].電腦知識與技術,2020,16(32):96-97+102.

[4] 顧建軍.信息與計算科學專業的Python教學分析與設計[J].科技資訊,2020,18(35):35-37+40.

[5] 王培,李津平,李奇芳,等.多元函數極值的探討[J].玉林師范學院學報,2019,40(5):10-13.

猜你喜歡
極值
極值點帶你去“漂移”
極值點偏移攔路,三法可取
極值點偏移問題的解法
一類“極值點偏移”問題的解法與反思
借助微分探求連續函數的極值點
以整個空間為極值傳遞分布混沌集的動力系統
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合