APP下载

Python软件在求多元函数极值中的应用

2021-08-17赵禹琦

软件 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软件的逻辑语言简明,交互性强,其中含有丰富的资源库,通过合理调用能够快速实现科学计算,被广泛应用在数学求值计算中。基于Python环境合理设计程序能够高效解决多元函数极值问题,为多元函数应用提供支撑。多元函数求极值的基础是应用极值的充分条件来判断并求解,以此为依据通过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元函数。可以记做:

其中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.

猜你喜欢

极值
极值点带你去“漂移”
极值点偏移拦路,三法可取
极值点偏移问题的解法
一类“极值点偏移”问题的解法与反思
借助微分探求连续函数的极值点
以整个空间为极值传递分布混沌集的动力系统