MATLAB多元函数导数
- 格式:doc
- 大小:432.00 KB
- 文档页数:7
matlab求导数的函数
Matlab 中有很多用来求导数的函数,主要包括:
1、 diff函数: diff函数是matlab中直接求导数的函数,它
的语法如下: yd=diff(y) ,其中输入y是一个向量,yd就是y的
导数,yd的维度比y少一维。
2、 gradient函数: gradient函数是matlab中求梯度的函数,它的语法如下: [fx,fy]=gradient(f),其中输入f是一个二维函数的矩阵,fx和fy是f的分别沿x和y方向的梯度,类似于diff函数,他们的维度比f的最外一层维度少一个,即fx和f,的行列数
是一样的,而fx的列数比f少一格。
3、 jacobian函数: jacobian函数是matlab中用来求变量函
数的Jacobian矩阵的函数,它的语法如下: J=jacobian(vector,in),vector是一个向量,in是一个矩阵,J是它们的Jacobian矩阵。
4、 quadjac函数:quadjac函数是matlab中用来求解二次型的Jacobian矩阵的函数,它的语法如下: J =quadjac(f,x),其中f
是一个二次型的函数,x是变量,J是它们的Jacobian矩阵。
- 1 -。
matlab导数Matlab一款功能强大的数学软件,可以用来计算各种数学函数,甚至可以用来计算数值微分(Numerical Differentiation),研究Matlab数很有必要。
什么是导数?在数学中,函数的导数指的是函数变化量的变化率,也就是曲线的斜率。
导数的计算可以有很多方法,但是 Matlab供的一种方法叫做中点法(Midpoint Method)。
中点法(Midpoint Method)是一种数值微分的计算方法,它可以像其它方法一样有效地计算函数的导数。
在这种方法中,先计算函数在两点之间的中点,然后计算两点之间函数值的差值,并除以两个点之间的间距。
首先,我们以函数f(x)=x2为例来说明这种方法。
首先,我们定义函数f(x),在Matlab中可以用以下代码表示:f=@(x) x.^2;接下来,我们定义两个点 a b在 Matlab 中可以用以下代码表示:a=0;b=2;然后,定义中点 c,在 Matlab 中可以用以下代码表示:c=(a+b)/2;接下来,利用中点法,可以计算出函数f(x)在点 a b 之间的导数,即斜率,在 Matlab 中可以用以下代码表示:slope=(f(b)-f(a))/(b-a);最后,输出结果,在 Matlab 中可以用以下代码表示:disp(slope);以上就是利用 Matlab算数值微分的中点法,也就是计算函数的导数的基本思路。
除了中点法,还有其他的方法用来计算函数的导数,比如梯形法(Trapezoidal Rule)、改进梯形法(Improve Trapezoidal Rule)和拉格朗日插值法(Lagrange Interpolating Polynomial),这些方法在 Matlab 中也都可以实现。
梯形法就是在一段区间内,以同等距离分割出多个点,然后用分割出的每一小段梯形结合积分计算函数导数。
进梯形法(Improve Trapezoidal Rule)与梯形法类似,只是利用了三点梯形,即将这段区间分成三部分,每部分用一个梯形来进行积分计算。
matlab求导方法Matlab中求导是非常常用的操作,因为它是一个数学和科学计算的工具。
在Matlab中,我们可以使用不同的方法来求导,例如数值方法和符号方法。
本文将详细介绍Matlab中常用的求导方法,并进行详细的演示和讨论。
首先,我们来介绍一下Matlab中的数值求导方法。
数值求导方法是通过计算函数在离散点上的差分来近似求解函数的导数。
在Matlab中,常用的数值求导方法有前向差分、后向差分和中心差分。
前向差分法是通过计算函数在当前点和下一个点的差值来近似求解导数。
具体的计算公式如下:```matlabdfdx = (f(x+h) - f(x)) / h```其中,`f(x)`是要求导的函数,`h`是步长,`dfdx`是函数在`x`处的导数。
可以看到,前向差分法是通过斜线法线方向的差值来近似导数。
在Matlab中,我们可以使用`diff`函数来快速计算前向差分法的导数。
后向差分法与前向差分法类似,只是差值的方向相反。
具体的计算公式如下:```matlabdfdx = (f(x) - f(x-h)) / h```与前向差分法一样,后向差分法也可以使用`diff`函数来计算。
中心差分法是通过计算函数在当前点和前后点的差值来近似求解导数。
具体的计算公式如下:```matlabdfdx = (f(x+h) - f(x-h)) / (2*h)```可以看到,中心差分法是通过两个斜线法线方向的差值来近似导数。
在Matlab中,也可以使用`diff`函数来计算中心差分法的导数。
除了数值求导方法,Matlab还提供了符号求导方法。
符号求导方法通过利用符号计算的能力来直接求解函数的导数。
在Matlab中,通过定义符号变量和符号函数,可以使用`diff`函数来快速求解函数的导数。
下面是一个简单的例子:```matlabsyms xf = x^2 + sin(x);dfdx = diff(f, x);```在上面的例子中,我们首先定义了一个符号变量`x`,然后定义了一个符号函数`f`,最后使用`diff`函数来计算函数`f`关于变量`x`的导数`dfdx`。
matlab 求导函数
Matlab是一种强大的计算机程序,可以用于求导数。
在Matlab 中,有许多不同的函数可以用于求导数,包括diff函数、gradient 函数、diff函数、diff2函数和polyder函数等等。
这些函数都可以用于计算一个函数的导数,并且有不同的优点和适用场景。
其中,diff 函数可以计算一个向量或矩阵的差分,gradient函数可以计算一个函数在某一点处的梯度,diff2函数可以计算一个向量或矩阵的二阶差分,而polyder函数可以计算一个多项式的导数。
在Matlab中,有多种方法可以使用这些函数来求导数,包括使用符号计算工具箱、使用数值计算方法和手动计算。
使用这些方法,可以快速有效地求出一个函数的导数,从而在数学、物理、工程等领域中得到广泛应用。
- 1 -。
MATLAB导数的计算1.符号求导法符号求导是使用MATLAB中的符号计算工具箱进行求导的一种方法。
首先,需要定义符号变量,然后再使用diff函数对符号表达式进行求导。
例如,假设要求函数f(x) = x^2的导数,可以按照以下步骤进行:```matlabsyms xf=x^2;df = diff(f, x);disp(df);```上述代码中,首先使用syms命令定义了一个符号变量x,然后定义了函数f(x) = x^2,最后使用diff函数对f进行求导,并将结果保存在df变量中。
最后,使用disp函数输出导数df的值。
2.数值求导法数值求导是一种通过计算函数在其中一点的左右两个邻近点的函数值来估计导数的方法。
在MATLAB中,可以使用diff函数来实现数值求导。
例如,假设要计算函数f(x) = x^2在x = 1处的导数,可以按照以下步骤进行:```matlabx=1;h=0.001;df = (f(x+h)-f(x-h))/(2*h);disp(df);```上述代码中,首先定义了要计算导数的点x = 1,然后定义了一个小的步长h,在此示例中,h的值为0.001、然后通过定义一个匿名函数f来表示要计算的函数f(x),最后使用数值求导公式计算导数df的近似值,并使用disp函数输出导数的值。
3.数值微分法数值微分是使用数值方法估计离散数据集的导数。
在MATLAB中,可以使用gradient函数来实现数值微分。
例如,假设有一组数据点(x, y),要计算y关于x的导数,可以按照以下步骤进行:```matlabx=[1,2,3,4,5];y=[1,4,9,16,25];dy = gradient(y, x);disp(dy);```上述代码中,首先定义了一组数据点x和y,然后使用gradient函数对y关于x进行数值微分,并将结果保存在dy变量中。
最后,使用disp函数输出导数的值。
4.使用符号求导的数值计算方法在MATLAB中,还可以将符号计算与数值计算相结合,使用符号求导的结果计算数值导数。
MATLAB求导数的方法1.数值导数的计算[问题]求正弦函数的一阶导数和二阶导数y = sin x[数学模型]函数的一阶导数为y' = cos x函数的二阶导数为y'' = -sin x[算法]求差分函数为diff,对于数值向量,其功能是求后一元素与前一元素之差,如果数值间隔取得足够小,就能表示导数的近似值。
对于符号函数,可用同样的函数diff计算符号导数。
[程序]zyq3_1diff.m如下。
%正弦函数的导数clear %清除变量a=0:5:360; %度数向量x=a*pi/180; %弧度向量dx=x(2); %间隔(第1个值为零)y=sin(x); %正弦曲线dy=diff(y)/dx; %用差分求导数的近似值dy=[dy(1),(dy(1:end-1)+dy(2:end))/2,dy(end)];%求平均值figure %创建图形窗口%plot(x,cos(x),x(1:end-1),dy,'.') %画导数曲线(数值导数偏左)%plot(x,cos(x),x(2:end),dy,'.') %画导数曲线(数值导数偏右)plot(x,cos(x),x,dy,'.') %画导数曲线(数值导数适中)s=sym('sin(x)'); %定义符号函数sdy=diff(s); %符号导数ssdy=subs(sdy,'x',x); %替换数值hold on%保持图像plot(x,ssdy,'ro') %画导数曲线legend('公式解','数值解','符号解',4) %加图例title('正弦函数的一阶导数') %标题d2y=diff(dy)/dx; %用差分求导数的近似值d2y=[d2y(1),(d2y(1:end-1)+d2y(2:end))/2,d2y(end)];%求平均值figure %创建图形窗口plot(x,-sin(x),x,d2y,'.') %画导数曲线(数值导数适中)sd2y=diff(s,2); %符号二阶导数ssd2y=subs(sd2y,'x',x); %替换数值hold on%保持图像plot(x,ssd2y,'ro') %画导数曲线legend('公式解','数值解','符号解',4) %加图例title('正弦函数的二阶导数') %标题[图示]2.函数极值的计算[问题]求如下函数的极值y = x3– 3x2 + x(1) [数学模型]求导数y' = 3x2– 6x + 1 (2) 令y' = 0,解得1x==1.8165,0.1835 (3)(36)3[算法]将自变量设计为向量,函数设计为内线函数,用max函数和min函数求极大值和极小值。
数学实验五 用Matlab 软件求多元函数的偏导数和极值一、多元函数的偏导数1.调用格式一:diff('多元函数','自变量',n)其中,n 为所求偏导数的阶数.例1 已知y x z 2cos 2=,求x z ∂∂、x y z ∂∂∂2和22y z ∂∂. 解 打开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)即y x x z 2cos 2=∂∂,y x x y z 2sin 42−=∂∂∂,y x yz 2cos 4222−=∂∂. 2.调用格式二:syms x y z …diff(f,自变量,n)例2 已知)5sin(32z y x u +−=,求x u ∂∂、x y z u ∂∂∂∂3和33z u ∂∂. 解 在命令行中依次输入:syms x y zu=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)*xuxyz =30*cos(x^2-y^3+5*z)*y^2*xuz3 =-125*cos(x^2-y^3+5*z)即)5cos(232z y x x xu +−=∂∂,)5cos(303223z y x xy x y z u +−=∂∂∂∂, )5cos(1253233z y x zu +−−=∂∂. 二、隐函数的导数在Matlab 中没有直接求隐函数导数的命令,但可调用Maple 中求隐函数导数的命令,调用格式如下:maple('implicitdiff(f(u,x,y,z,…,)=0,u,x)')例3 求由多元方程xyz z y x =++222所确定的隐函数dxz ∂. 解 在命令行中输入:pzpx=maple('implicitdiff(x^2+y^2+z^2-x*y*z=0,z,x)')运行结果是:pzpx =(2*x-y*z)/(-2*z+x*y)即 zxy yz x x z 22−−=∂∂. 三、多元函数的极(或最)值在Matlab 中同样有求多元函数的极(或最)小值的函数,但由于多元函数的形式比较复杂,不同情况用到不同的Matlab 函数.若要求多元函数u 在某一区域的极(或最)大值,可转化为求u −在该区域内的极(或最)小值.1.非线性无约束情形求极(或最)小值点或极(或最)小值的调用格式是:[x,fval]=fminsearch(‘f ’,x0)f 是被最小化的目标函数名,x0是求解的初始值向量.例4 求二元函数2331042),(y xy xy x y x f +−+=的最值点和最值.解 打开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,fminXmax,fmax取名为exa10保存,再在命令窗口中输入命令exa10,程序运行结果如下:Xmin =1.0016 0.8335fmin =-3.3241Xmax =-1.0000 1.0000fmax =2.非线性有约束情形非线性有约束优化问题的数学模型如下:式中,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)<=0和非线性等式约束ceq(x)=0.例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,再击保存.⑵ 建立非线性约束函数文件yceqfunction [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.00001.00001.0000Vmax =ubx lb beqx Aeq bx A x ceq x c x f Min ≤≤≤⋅≤⋅=≤0)(0)()(四、上机实验1.用help命令查看函数diff,fminsearch和fmincon等的用法.2.上机验证上面各例.3.作相关小节练习中多元函数的偏导数,极(或最)值.。
matlab求导数的命令
**MATLAB 求导数命令**
1、diff:即求一阶导数,即在自变量发生变化情况下,伴随而发生的因变量变化量,可称为一阶偏导数,就是该函数的导数。
2、gradient:求向量梯度(多元函数的梯度),是一阶偏导数的矢量形式构成,表示多元函数的变化最快的方向,同时也表示多元函数的曲面的最陡的方向。
3、d3dx3:即求三阶导数,是函数在自变量发生变化时,因变量第二阶导数变化量,是因变量改变率变化率。
4、jacobian:求多元函数的雅可比矩阵,向量求导时,函数有多个自变量,每
个自变量对向量有独立的影响,可以使用雅可比矩阵来表示。
5、divergence:求函数散度,是一种和梯度相关的量,表示函数随着自变量增加,气体运动量如何改变。
6、laplacian:求拉普拉斯算子,表示函数在自变量发生变化时,什么样的变化。
是空间坐标系中的概念,拉普拉斯算子表示了一个函数在每个点处的导数变化情况。
7、IntensityGradient:求函数强度梯度(函数部分最大值处),表示函数自变
量发生变化时,函数的部分最大值处的变化情况。
在图像模糊处理中,这也可以用于计算物体的边缘。
matlab中多元函数求偏导在Matlab中,多元函数求偏导是一项常见的任务。
通过求取函数在不同自变量方向上的偏导数,可以获得函数在该点的斜率或变化率。
这在优化、最小二乘法、机器学习等领域中都有广泛的应用。
要求多元函数求偏导,首先需要了解什么是偏导数。
偏导数指的是在多元函数中,将函数关于某个自变量求导,而将其他自变量视为常数的过程。
通过求取各个自变量的偏导数,可以获得函数在不同自变量方向上的变化率。
在Matlab中,多元函数求偏导可以使用符号计算工具箱来实现。
符号计算工具箱可以将变量定义为符号对象,并进行符号运算,从而得到精确的结果。
下面将介绍一些常用的符号计算函数来实现多元函数求偏导。
1. `syms`函数:用于定义符号变量。
例如,`syms x y`可以定义`x`和`y`为符号变量。
2. `diff`函数:用于求导数。
例如,`diff(f, x)`表示对函数`f`关于变量`x`求导。
可以通过连续调用`diff`函数来求取高阶导数。
3. `subs`函数:用于替换符号变量的值。
例如,`subs(f, x, a)`表示将函数`f`中的变量`x`替换为值`a`。
下面通过一个具体的例子来说明如何在Matlab中进行多元函数求偏导。
假设我们有一个二元函数f(x, y) = x^2 + 2xy + y^2,并需要求取其关于x和y的偏导数。
我们使用`syms`函数定义符号变量x和y:```matlabsyms x y```然后,我们定义函数f并求取其关于x和y的偏导数:```matlabf = x^2 + 2*x*y + y^2;df_dx = diff(f, x);df_dy = diff(f, y);```我们可以通过`subs`函数将x和y替换为具体的值,并计算偏导数的数值结果:```matlaba = 1;b = 2;df_dx_value = subs(df_dx, [x, y], [a, b]);df_dy_value = subs(df_dy, [x, y], [a, b]);```在这个例子中,我们得到了函数f关于x和y的偏导数分别为2x + 2y和2x + 2y。
Matlab中求导数的命令1. 简介求导数是数学中一项重要的运算,它用于确定函数在某一点的变化率。
在科学计算和数据分析中,求导数也是一项常见的操作。
Matlab作为一种强大的数值计算和可视化工具,提供了多种用于求导数的命令和函数。
本文将介绍Matlab中常用的求导数命令,以及如何使用它们进行求导数操作。
2. diff函数:求导数在Matlab中,diff函数是常用的求导数命令。
它可以计算一个函数的符号导数、数值导数和复合函数的导数。
diff函数的语法如下:dy = diff(y)dy = diff(y,n)dy = diff(y,x)dy = diff(y,x,n)其中,y表示输入的函数,x表示自变量,n表示求导的阶数。
下面我们将分别介绍这几种用法。
2.1. 符号导数符号导数是指根据函数的解析表达式,求得其导数的表达式。
符号导数不需要数值计算,可以保持高精度。
示例1:求函数 y = x^2 的导数。
syms xy = x^2;dy = diff(y)上述代码中,通过syms函数声明了一个符号变量x,然后定义了函数y = x^2。
最后使用diff函数求y的导数,得到结果dy = 2*x。
2.2. 数值导数数值导数是指通过有限差分方法,利用离散的函数值来近似计算函数的导数。
数值导数适用于无法通过解析表达式求得导数的情况。
示例2:求函数 y = sin(x) 在 x = pi/4 处的导数。
x = pi/4;y = sin(x);dy = diff(y)上述代码中,直接将x赋值为pi/4,然后计算y = sin(x)在x = pi/4处的导数。
最后得到结果dy ≈ 0.7071。
2.3. 复合函数的导数复合函数是由两个或多个函数组成的函数。
在Matlab中,我们可以使用符号导数和chainrule函数来求解复合函数的导数。
示例3:求复合函数 y = sin(x^2) 的导数。
syms xy = sin(x^2);dy = diff(y)上述代码中,通过syms函数声明了一个符号变量x,然后定义了函数y =sin(x^2)。
matlab中多元函数求偏导多元函数是指在数学中,有多个自变量的函数。
求多元函数的偏导数是研究多元函数的重要方法之一。
在MATLAB中,可以通过使用符号计算库来求解多元函数的偏导数。
我们需要定义一个多元函数。
假设我们要求解的多元函数为f(x,y),其中x和y是自变量。
在MATLAB中,我们可以使用符号变量来定义函数和自变量。
例如,我们可以使用以下代码定义一个二元函数f(x,y) = x^2 + y^2:syms x y;f = x^2 + y^2;接下来,我们可以使用diff函数来求解这个多元函数的偏导数。
diff 函数的基本语法为:diff(f, x)表示对函数f关于自变量x的偏导数。
例如,要求解函数f关于x的偏导数,可以使用以下代码:df_dx = diff(f, x);同样地,要求解函数f关于y的偏导数,可以使用以下代码:df_dy = diff(f, y);通过这样的方式,我们可以求解多元函数的任意阶偏导数。
例如,要求解二阶偏导数,可以多次使用diff函数。
以下代码演示了如何求解函数f的二阶偏导数:df2_dx2 = diff(df_dx, x);df2_dy2 = diff(df_dy, y);除了求解偏导数,MATLAB还提供了其他一些函数用于处理多元函数。
例如,我们可以使用gradient函数来计算函数的梯度向量。
梯度向量是一个向量,它的每个分量都是函数在相应自变量方向上的偏导数。
以下代码演示了如何计算函数f的梯度向量:gradient_vector = gradient(f, [x, y]);MATLAB还提供了hessian函数用于计算函数的海森矩阵。
海森矩阵是一个方阵,它的每个元素都是函数的二阶偏导数。
以下代码演示了如何计算函数f的海森矩阵:hessian_matrix = hessian(f, [x, y]);通过使用这些函数,我们可以方便地求解多元函数的偏导数、梯度向量和海森矩阵。
matlab二阶导数
Matlab 二阶导数是指应用数学中函数或者变量的第二次导数。
Matlab 是一种用于计算和绘图的技术计算机程序语言,它使用一组编程功能来完成许多数学任务。
二阶导数是在处理多元函数曲面上可以运用到的高级技术。
二阶导数表达式是一个函数曲面的一阶导数的另一种表达,它表示函数变化率的变化率。
二阶导数的物理意义是曲线沿着第一次导数的方向变化的变化率。
它有助于更好的理解函数的变化趋势。
二阶导数能够帮助我们更加清楚的识别函数曲面的极大值,极小值,拐点,拐点和图像上的夹点。
在 Matlab 中,可以使用diffcommand 和symscommand 来求解函数的二阶导数。
同样,Ginput command 可以帮助我们在图像上挑选鼠标设定的点并且绘制函数。
在 Matlab 中,还有一种 join command 可以使图像中的点可以链接起来,使得函数曲线更加明显。
使用 Matlab 计算二阶导数的另一种方法是使用Simulink,它是Matlab 的可视化开发工具,它可以帮助我们更好的观察和理解函数的变化趋势。
使用 Simulink,我们可以计算函数的第二个导数,也可以观察曲线在不同变量空间中的变化。
总之,Matlab 二阶导数是一种非常好的数学技术,它可以帮助我们深入了解函数变化趋势。
它不仅可以用于多元函数,它也可以用于复杂函数上,可以让我们更加清晰的观察函数的特性。
实验六 多元函数的极值【实验目的】1. 多元函数偏导数的求法。
2. 多元函数自由极值的求法 3. 多元函数条件极值的求法.4. 学习掌握MATLAB 软件有关的命令。
【实验内容】求函数32824-+-=y xy x z 的极值点和极值【实验准备】1.计算多元函数的自由极值对于多元函数的自由极值问题,根据多元函数极值的必要和充分条件,可分为以下几个步骤:步骤1.定义多元函数),(y x f z =步骤2.求解正规方程0),(,0),(==y x f y x f y x ,得到驻点步骤3.对于每一个驻点),(00y x ,求出二阶偏导数,,,22222yzC 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 矩阵。
可以用help diff, help jacobian 查阅有关这些命令的详细信息【实验方法与步骤】练习1 求函数32824-+-=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 yz 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')结果如图6.1图6.1 函数曲面图可在图6.2种不容易观测极值点与鞍点,这是因为z的取值范围为[-500,100],是一幅远景图,局部信息丢失较多,观测不到图像细节.可以通过画等值线来观测极值.>>contour(X,Y,Z, 600)>>xlabel('x'),ylabel('y')结果如图6.2图6.2 等值线图由图6.2可见,随着图形灰度的逐渐变浅,函数值逐渐减小,图形中有两个明显的极小值点-P和)2,4(Q.根据提梯度与等高线之间的关系,梯度的方向是等高线的法方向,且指(-,4)2Q周围没有等高线环绕,不向函数增加的方向.由此可知,极值点应该有等高线环绕,而点)0,0(是极值点,是鞍点.练习2 求函数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')得,21,21,21-===λy x 进过判断,此点为函数的极大值点,此时函数达到最大值.练习3 抛物面22y x z +=被平面1=++z y x 截成一个椭圆,求这个椭圆到原点的最长与最短距离.这个问题实际上就是求函数222),,(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 zL 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')得.32,231,33117,3353 =±-==±-=±-=z y x μλ 上面就是Lagrange 函数的稳定点,求所求的条件极值点必在其中取到。
由于所求问题存在最大值与最小值(因为函数f 在有界闭集}1,:),,{(22=++=+z y x z y x z y x ,上连续,从而存在最大值与最小值),故由359.)32,231,231(=±-±-f 求得的两个函数值,可得椭圆到原点的最长距离为359+,最短距离为359-。
练习4 求函数72422+--+=y x y x z 在上半圆0,1622≥≤+y y x 上的最大值和最小值。
首先画出等高线进行观测,相应的MATLAB 程序代码为:>>clear;>>x=-4:0.1:4; y=-4:0.1:4; >>[X,Y]=meshgrid(x,y); >>Z=X.^2+Y.^2-4*X-2*Y+7; >>contour(X,Y,Z,100) >>xlabel('x'),ylabel('y')结果如图6.3观测图6.3可看出,在区域D 内部有唯一的驻点,大约位于)1,2(在该点处汉书趣的最小值。
在圆弧与直线的交点处取得最大值,大约位于)2,4(-。
下面通过计算加以验证。
求函数在区域D 内的驻点,计算相应的函数值。
求z 关于x,y 的偏导数>>clear; syms x y; >>z=x^2+y^2-4*x-2*y+7; >>diff(z,x) >>diff(z,y)结果得,22,42-=∂∂-=∂∂y yz x x z 解正规方程 >>clear; [x,y]=solve('2*x-4=0','2*y-2=0','x','y')得驻点为(2,1),相应的函数值为2。
求函数在直线边界44,0≤≤-=x y 上的最大值和最小值。
将0=y 代入原函数,则二元函数变为一元函数.44,742≤≤-+-=x x x z首先观测此函数图形,相应的MATLAB 程序代码为:>>x=-4:0.01:4; y=x.^2-4*x+7; >>plot(x,y);>>xlabel('x'),ylabel('z')结果如图6.4所示由图6.4可看出,当4-=x 时函数取得最大值,2=x 时函数取得最小值。
下面用计算验证。
对函数求导>>clear; syms x ; >>z=x^2-4*x+7; diff(z,x) 得42-=x dxdz,可知驻点为2=x ,而边界点为4±=x ,计算着三个点上的函数值可得当4-=x 时函数取得最大值39,2=x 时函数取得最小值3。
求函数在圆弧边界线上0,1622≥≤+y y x 的最大值和最小值。
此边界线可用参数方程π≤≤==t t y t x 0,sin 4,cos 4表示。