实验三
多元函数极值
【实验目的】
1.掌握MATLAB 软件有关的命令。
2.多元函数自由极值的求法
3.多元函数条件极值的求法.【实验准备】
1.计算多元函数的自由极值
对于多元函数的自由极值问题,根据多元函数极值的必要和充分条件,可分为以下几个步骤:
步骤1.定义多元函数)
,(y x f z =步骤2.求解正规方程0),(,0),(==y x f y x f y x ,得到驻点
步骤3.对于每一个驻点),(00y x ,求出二阶偏导数,,,22222y
z C y x z B x z A ∂∂=∂∂∂=∂∂=步骤4.对于每一个驻点),(00y x ,计算判别式2B AC −,如果02>−B AC ,则该驻点是极值点,当0>A 为极小值,0<A 为极大值;,如果02
=−B AC ,判别法失效,需进一步判断;如果02<−B AC ,则该驻点不是极值点.
2.计算二元函数在区域D 内的最大值和最小值
设函数),(y x f z =在有界区域D 上连续,则),(y x f 在D 上必定有最大值和最小值。求),(y x f 在D 上的最大值和最小值的一般步骤为:
步骤1.计算),(y x f 在D 内所有驻点处的函数值;
步骤2.计算),(y x f 在D 的各个边界线上的最大值和最小值;
步骤3.将上述各函数值进行比较,最终确定出在D 内的最大值和最小值。
3.函数求偏导数的MATLAB 命令
MATLAB 中主要用diff 求函数的偏导数,用jacobian 求Jacobian 矩阵。
diff(f,x,n)求函数f关于自变量x的n阶导数。
jacobian(f,x)求向量函数f关于自变量x(x也为向量)的jacobian矩阵。
可以用help diff,help jacobian查阅有关这些命令的详细信息
【实验内容】
例1:求函数z=sin(x)sin(y)sin(x+y)在0<x<pi/2,0<y<pi/2内的极大值.
理论分析知:当X=pi/3y=pi/3z有极大值3/8*3^(1/2)
Matlab程序:
%定义二元函数
clc;clear;
syms x y;
z=sin(x)*sin(y)*sin(x+y);
ezsurf(x,y,z,[0,pi/2,0,pi/2]);
matlab求导
%求解驻点
dzx=diff(z,x)
dzy=diff(z,y)
[xx,yy]=solve('cos(x)*sin(y)*sin(x+y)+sin(x)*sin(y)*cos(x+y)=0',...
'sin(x)*cos(y)*sin(x+y)+sin(x)*sin(y)*cos(x+y)=0','x','y')
%对于定义域内的驻点求解二阶偏导函数
A=diff(z,x,2);
B=diff(diff(z,x),y);
C=diff(z,y,2);
D=A*C-B^2;
%判别极大值点
D1=subs(subs(D,'x',xx(1)),'y',yy(1))
A1=subs(subs(A,'x',xx(1)),'y',yy(1))
D2=subs(subs(D,'x',xx(2)),'y',yy(2))
A2=subs(subs(A,'x',xx(2)),'y',yy(2))
%极大值点和极大值
[xx(2)yy(2)]
JDZ=subs(subs(z,'x',xx(2)),'y',yy(2))
程序运行结果
ans=
[1/3*pi,1/3*pi]
JDZ=
3/8*3^(1/2)
例2函数32824−+−=y xy x z 的极值点和极值
求函数3282
4−+−=y xy x z 的极值点和极值.首先用diff 命令求z 关于x,y 的偏导数>>clear;syms x y;
>>z=x^4-8*x*y+2*y^2-3;
>>diff(z,x)
>>diff(z,y)结果为
ans =4*x^3-8*y
ans =-8*x+4*y 即.48,843y x y
z y x x z +−=∂∂−=∂∂再求解正规方程,求得各驻点的坐标。一般方程组的符号解用solve 命令,当方程组不存在符号解时,solve 将给出数值解。求解正规方程的MATLAB 代码为:
>>clear;
>>[x,y]=solve('4*x^3-8*y=0','-8*x+4*y=0','x','y')
结果有三个驻点,分别是P(-2,-4),Q(0,0),R(2,4).下面再求判别式中的二阶偏导数:
>>clear;syms x y;
>>z=x^4-8*x*y+2*y^2-3;
>>A=diff(z,x,2)
>>B=diff(diff(z,x),y)
>>C=diff(z,y,2)
结果为
A=2*x^2
B =-8
C =4
由判别法可知)2,4(−−P 和)2,4(Q 都是函数的极小值点,而点Q(0,0)不是极值点,实际上,)2,4(−−P 和)2,4(Q 是函数的最小值点。当然,我们可以通过画函数图形来观测极值点与鞍点。
>>clear;
>>x=-5:0.2:5;y=-5:0.2:5;
>>[X,Y]=meshgrid(x,y);
>>Z=X.^4-8*X.*Y+2*Y.^2-3;
>>mesh(X,Y,Z)
>>xlabel('x'),ylabel('y'),zlabel('z')
结果如图1
图1函数曲面图
可在图2种不容易观测极值点与鞍点,这是因为z 的取值范围为[-500,100],是一幅远景图,局部信息丢失较多,观测不到图像细节.可以通过画等值线来观测极值.
>>contour(X,Y,Z,600)
>>xlabel('x'),ylabel('y')
结果如图6.2
图2等值线图
由图2可见,随着图形灰度的逐渐变浅,函数值逐渐减小,图形中有两个明显的极小值点)2,4(−−P 和)2,
4(Q .根据提梯度与等高线之间的关系,梯度的方向是等高线的法方向,且指向函数增加的方向.由此可知,极值点应该有等高线环绕,而点)0,0(Q 周围没有等高线环绕,不是极值点,是鞍点.
例3函数xy z =在条件1=+y x 下的极值..构造Lagrange 函数
)
1(),(−++=y x xy y x L λ
求Lagrange 函数的自由极值.先求L 关于λ,,y x 的一阶偏导数
>>clear;syms x y k
>>l=x*y+k*(x+y-1);
>>diff(l,x)
>>diff(l,y)
>>diff(l,k)得,1,,−+=∂∂+=∂∂+=∂∂y x L x y L y x L λ
λλ再解正规方程>>clear;syms x y k
>>[x,y,k]=solve('y+k=0','x+k=0','x+y-1=0','x','y','k')得,2
1,21,21−===λy x 进过判断,此点为函数的极大值点,此时函数达到最大值.例4物面22y x z +=被平面1=++z y x 截成一个椭圆,求这个椭圆到原点的最长与最短距离.
这个问题实际上就是求函数
2
22),,(z y x z y x f ++=在条件22y x z +=及1=++z y x 下的最大值和最小值问题.构造Lagrange 函数
)
1()(),,(22222−+++−++++=z y x z y x z y x z y x L µλ求Lagrange 函数的自由极值.先求L 关于µλ,,,,z y x 的一阶偏导数
>>clear;syms x y z u v
>>l=x^2+y^2+z^2+u*(x^2+y^2-z)+v*(x+y+z-1);
>>diff(l,x)
>>diff(l,y)
>>diff(l,z)
>>diff(l,u)
>>diff(l,v)得
µλµλµλ+−=∂∂++=∂∂++=∂∂z z
L y y y L x x x L 2,22,221,22−++=∂∂−+=∂∂z y x L z y x L µ
λ再解正规方程
>>clear;
>>[x,y,z,u,v]=solve('2*x+2*x*u+v=0','2*y+2*y*u+v=0','2*z-u+v=0','x^2+y^2-z=0','x+y+z-1=0','x','y','z','u','v')