用Matlab软件求多元函数的偏导数和极值
数学实验五 用Matlab 软件求多元函数的偏导数和极值
一、多元函数的偏导数
1.调用格式一:
diff(' 多元函数',' 自变量',n)
其中,n 为所求偏导数的阶数.
∂2z ∂z ∂2z 例1 已知z =x cos 2y ,求和2. 、∂x ∂y ∂x ∂y 2
解 打开M文件编辑窗口,在其中输入下面命令集:
pzpx=diff('x^2*cos(2*y)','x')
p2zpypx=diff(pzpx,'y')
p2zpy2=diff('x^2*cos(2*y)','y',2)
取名为exa9保存,再在命令窗口中输入命令exa9,程序运行结果如下:
pzpx =
2*x*cos(2*y)
p2zpypx =
-4*x*sin(2*y)
p2zpy2 =
-4*x^2*cos(2*y)
即
∂z ∂2z ∂2z =2x cos 2y ,=−4x sin 2y ,2=−4x 2cos 2y . ∂x ∂y ∂x ∂y
2.调用格式二:
syms x y z …
diff(f,自变量,n)
∂u ∂3u ∂3u 例2 已知u =sin(x −y +5z ) ,求. 、和∂x ∂z ∂y ∂x ∂z 323
解 在命令行中依次输入:
syms x y z
u=sin(x^2-y^3+5*z);
ux=diff(u,x);
uxy=diff(ux,y);
uxyz=diff(uxy,z);
uz3=diff(u,z,3);
ux,uxyz,uz3
运行结果如下:
ux =
2*cos(x^2-y^3+5*z)*x
uxyz =
30*cos(x^2-y^3+5*z)*y^2*x
uz3 =
-125*cos(x^2-y^3+5*z)
即
∂3u ∂u 23=30xy 2cos(x 2−y 3+5z ) , =2x cos(x −y +5z ) ,∂z ∂y ∂x ∂x
∂3u =−125cos(x 2−y 3+5z ) . 3∂z
二、隐函数的导数
在Matlab 中没有直接求隐函数导数的命令,但可调用Maple 中求隐函数导数的命令,调用格式如下:
maple('implicitdiff(f(u,x,y,z,…,)=0,u,x)')
例3 求由多元方程x 2+y 2+z 2=xyz 所确定的隐函数
解 在命令行中输入:
pzpx=maple('implicitdiff(x^2+y^2+z^2-x*y*z=0,z,x)')
运行结果是:
pzpx =
(2*x-y*z)/(-2*z+x*y)
即 ∂z . dx
∂z 2x −yz =. ∂x xy −2z
三、多元函数的极(或最)值
在Matlab 中同样有求多元函数的极(或最)小值的函数,但由于多元函数的形式比较复杂,不同情况用到不同的Matlab 函数.若要求多元函数u 在某一区域的极(或最)大值,可转化为求−u 在该区域内的极(或最)小值.
1.非线性无约束情形
求极(或最)小值点或极(或最)小值的调用格式是:
[x,fval]=fminsearch(‘f ’,x0)
f 是被最小化的目标函数名,x0是求解的初始值向量.
例4 求二元函数f (x , y ) =2x +4xy −10xy +y 的最值点和最值.
解 打开M文件编辑窗口,在其中输入下面命令集:
%必须对自变量进行转化x=x(1),y=x(2)
[Xmin,fmin]=fminsearch('2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2',[0,0]);
[Xmax,Fmin]=fminsearch('-2*x(1)^3-4*x(1)*x(2)^3+10*x(1)*x(2)-x(2)^2',[0,0]);
fmax=-Fmin;
Xmin,fmin
Xmax,fmax
取名为exa10保存,再在命令窗口中输入命令exa10,程序运行结果如下:
Xmin =
1.0016 0.8335
fmin =
-3.3241
Xmax =
-1.0000 1.0000
fmax = 332
2.非线性有约束情形
非线性有约束优化问题的数学模型如下:
Min f (x )
c (x ) ≤0
ceq (x ) =0
A ⋅x ≤b
Aeq ⋅x ≤beq
lb ≤x ≤ub
式中,x,b,beq,lb 和ub 是向量,A 和Aeq 是矩阵,c(x)和ceq(x)为函数,返回标量.f(x),c(x)和ceq(x)可以是非线性函数.求极(或最)小值点或极(或最)小值的调用格式如下:
[x,fval]=fmincon('fun',x0,A,b,Aeq,beq,lb,ub,nonlcon)
nonlcon 参数计算非线性不等式约束c(x)
例5 求表面积为6m 2的体积最大的长方体体积.
解 设长方体的长、宽、高分别为x1、x2、x3,则
f(x)=-x(1)*x(2)*x(3),
S.t x(1)*x(2)+x(2)*x(3)+x(3)*x(1)-3=0,
x(i)>0,i=1,2,3.
⑴ 建立函数文件fun1
打开M文件编辑窗口,在其中输入下面命令集:
function F=fun1(x) %函数文件必须是function 开头
F=-x(1)*x(2)*x(3);
单击“保存”按钮,自动取名为fun1,再击保存.
⑵ 建立非线性约束函数文件yceq
function [c,ceq]=yceq(x)
c=x(1)*x(2)+x(2)*x(3)+x(3)*x(1)-3;
ceq=[];
保存方法同上,自动取名为yceq ,再击保存.
⑶ 编制主程序:
打开M文件编辑窗口,在其中输入下面命令集:
x0=[3;3;3]; %给长宽高一个初值
A=[];b=[];
Aeq=[];beq=[];
lb=[0,0,0];ub=[];
[xmax,fmin]=fmincon('fun1',x0,A,b,Aeq,beq,lb,ub,'yceq'); %函数要加单引号
Vmax=-fmin;
xmax,Vmax
取名为exa11保存,再在命令窗口中输入命令exa11,程序运行结果如下:
xmax =
1.0000
1.0000
1.0000
Vmax =
四、上机实验
1.用help 命令查看函数diff ,fminsearch 和fmincon 等的用法.
2.上机验证上面各例.
3.作相关小节练习中多元函数的偏导数,极(或最)值.