matlab实验六 多元函数的极值
- 格式:doc
- 大小:87.50 KB
- 文档页数:5
matlab计算多元函数极值极其极值点《从简到繁,深入探讨matlab计算多元函数极值极其极值点》1. 引言在数学中,多元函数是一种以多个变量为自变量的函数,它与一元函数有着本质的区别。
而计算多元函数的极值及其极值点是数学分析中一个重要且复杂的问题。
本文将从简到繁地探讨如何利用matlab来计算多元函数的极值及其极值点,以帮助读者更深入地理解这一数学概念。
2. 多元函数的极值我们需要明确什么是多元函数的极值。
对于一个多元函数,如果在某一点处的函数值大于或小于其邻域内所有其他点处的函数值,那么这个点就是该多元函数的极大值点或极小值点。
而这个极值点所对应的函数值就是多元函数的极值。
在matlab中,可以通过最优化工具箱中的相关函数来计算多元函数的极值,比如fmincon函数用于求解约束极小化问题。
3. 计算多元函数的极值为了更具体地说明如何在matlab中计算多元函数的极值,我们以一个简单的二元函数为例:z = f(x, y) = x^2 + y^2。
我们希望找到这个函数的极值及其极值点。
我们需要定义这个函数并选定初始点,然后利用matlab中的优化函数进行计算。
具体的代码如下:```matlab% 定义目标函数fun = @(x) x(1).^2 + x(2).^2;% 设定初始点x0 = [1, 2];% 求解极小值[x, fval] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon);```在这段代码中,我们首先利用@(x)定义了目标函数f(x, y) = x^2 + y^2,然后设定了初始点x0 = [1, 2]。
最后利用fmincon函数计算了函数的极小值x和其对应的函数值fval。
通过这个简单的例子,读者可以初步了解如何在matlab中计算多元函数的极值。
4. 深入探讨除了简单的二元函数外,实际应用中常常遇到更复杂的多元函数,这时利用matlab计算极值就显得尤为重要。
利用MATLAB求多元函数的极值分两种情况,(1)无约束条件;(2)有约束条件。
(2)有约束条件下求极小值的方法:假设多变量非线性函数的数学模型为min f(x)c(x)<=0ceq(x)=0A·x<=bAeq·x<=x<=beqlb<=x<=ubX, b,beq,lb,ub为矢量,A,Aeq为矩阵,c(X),ceq(X)为函数(可非线性)。
命令格式:x = fmincon(fun,x0,A,b)x = fmincon(fun,x0,A,b,Aeq,beq)x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)[x,fval] = fmincon(...)[x,fval,exitflag] = fmincon(...)[x,fval,exitflag,output] = fmincon(...)[x,fval,exitflag,output,lambda] = fmincon(...)[x,fval,exitflag,output,lambda,grad] = fmincon(...) [x,fval,exitflag,output,lambda,grad,hessian]= fmincon(...) 例如求函数满足条件的极小值解:首先,编制M-file文件function f myfun(x)f=-x(1)*x(2)*x(3)然后重写约束条件为两个小于或等于一个常数的不等式,因为约束条件是线性的,用矩阵表示为Ax<=b 其中;其次,猜测估计提供一个起点,调用优化程序。
x0 = [10; 10; 10]; % 猜测可能的结果作为起点[x,fval] = fmincon(@myfun,x0,A,b)x =24.000012.000012.0000fval =-3.4560e+03A*x-b=-72当x1=24,x2=12,x3=12,时函数有极小值-3.4560e+03。
实验3 Matlab 符号运算及求函数极值一、实验目的和要求掌握用Matlab软件进行符号运算以及求函数的极值.二、实验环境Windows系列操作系统,Matlab软件。
三、实验内容1.用MATLAB进行符号运算;2.编程求函数的极值.四、实验步骤1.开启软件平台—-Matlab,开启Matlab编辑窗口;2.根据求解步骤编写M文件;3.保存文件并运行;4.观察运行结果(数值或图形);5.根据观察到的结果和体会写出实验报告。
五、示例1.计算一元函数的极值例1求223441x xyx x++=++的极值解首先建立函数关系:s yms xy=(3*x^2+4*x+4)/(x^2+x+1); 然后求函数的驻点:dy=diff(y);xz=solve(dy)xz=[0] [—2]知道函数有两个驻点x1=0和x2=—2,接下来我们通过考察函数的图形,则它的极值情况和许多其它特性是一目了然的.而借助MATLAB的作图功能,我们很容易做到这一点。
例2 画出上例中函数的图形解 syms xy=(3*x^2+4*x+4)/( x^2+x+1); 得到如下图形ezplot(y )2.计算二元函数的极值MATLAB 中主要用diff 求函数的偏导数,用jacobian 求Jacobian 矩阵。
diff (f,x ,n) 求函数f 关于自变量x 的n 阶导数.jacobian(f ,x ) 求向量函数f 关于自变量x(x 也为向量)的jacobian矩阵.可以用help diff , help jacobian 查阅有关这些命令的详细信息例1 求函数42823z x xy y =-+-的极值点和极值。
首先用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*yans =-8*x+4*y即348,84z z x y x y x y∂∂=-=-+∂∂再求解方程,求得各驻点的坐标。
用MATLAB求极值灵活的运用MATLAB的计算功能,可以很容易地求得函数的极值。
例3.6.1求223441x xyx x++=++的极值解首先建立函数关系:s ymss↙y=(3*x^2+4*x+4)/(x^2+x+1);↙然后求函数的驻点:dy=diff(y);↙xz=solve(dy)↙xz=[0][-2]知道函数有两个驻点x1=0和x2=-2,考察函数在驻点处二阶导数的正负情况:d2y=diff(y,2);↙z1=limit(d2y,x,0)↙z1=-2z2=limit(d2y,x,-2)↙z2=2/9于是知在x1=0处二阶导数的值为z1=-2,小于0,函数有极大值;在x2=-2处二阶导数的值为z2=2/9,大于0,函数有极小值。
如果需要,可顺便求出极值点处的函数值:y1=limit(y,x,0)↙y1=4y2=limit(y,x,-2)↙y2=8/3事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。
而借助MA TLAB的作图功能,我们很容易做到这一点。
例3.6.2画出上例中函数的图形解symsx↙y=(3*x^2+4*x+4)/(x^2+x+1);↙得到如下图形ezplot(y)↙如何用MATLAB求函数的极值点和最大值比如说y=x^3+x^2+1,怎样用matlab来算它的极值和最大值?求极值:symsxy>>y=x^3+x^2+1>>diff(y)%求导ans=3*x^2+2*x>>solve(ans)%求导函数为零的点ans=-2/3极值有两点。
求最大值,既求-y的最小值:>>f=@(x)(-x^3-x^2-1)f=@(x)(-x^3-x^2-1)>>x=fminunc(f,-3,3)%在-3;-3范围内找Warning:Gradientmustbeprovidedfortrust-regionmethod;usingline-searchmethodinstead.>Infminuncat354Optimizationterminated:relativeinfinity-normofgradientlessthanoptions.TolFun.x=-0.6667>>f(x)ans=-1.1481在规定范围内的最大值是1.1481由于函数的局限性,求出的极值可能是局部最小(大)值。
matlab 多元函数极值并标记多元函数是指含有多个自变量的函数,其极值问题是在一定的约束条件下寻找函数取得最大值或最小值的点。
在工程、经济学和数学等领域中,多元函数的极值问题经常出现,并且具有重要的理论和实际意义。
在本文中,我们将使用MATLAB软件来求解一个多元函数的极值问题,并通过标记标题的方式来展示结果。
我们需要定义一个多元函数,并给出其约束条件。
假设我们要求解的多元函数为f(x, y) = x^2 + y^2,约束条件为x + y = 1。
我们可以利用MATLAB的符号计算工具箱来定义这个函数,并使用solve 函数来求解约束条件。
我们需要在MATLAB中定义符号变量x和y:syms x y然后,我们可以定义多元函数f(x, y):f = x^2 + y^2接下来,我们可以定义约束条件:eqn = x + y == 1然后,我们可以使用solve函数来求解约束条件:sol = solve(eqn, x, y)solve函数将返回一个结构体sol,其中包含了约束条件的解。
我们可以通过访问sol.x和sol.y来获取解的值。
在本例中,我们可以得到x和y的解为x = 1/2,y = 1/2。
接着,我们可以将求解结果代入多元函数f(x, y)中,得到极值点的函数值:f_val = subs(f, [x, y], [sol.x, sol.y])通过代入求解结果,我们得到了f(x, y)在极值点上的函数值为f_val = 1/2。
我们可以使用MATLAB的plot函数来绘制多元函数的等高线图,并在极值点处标记出极值结果。
我们可以使用meshgrid函数来生成绘图所需的网格点,并使用contour函数来绘制等高线图。
我们需要生成绘图所需的网格点:[X, Y] = meshgrid(-1:0.1:1, -1:0.1:1)然后,我们可以计算多元函数f(x, y)在每个网格点上的函数值:Z = subs(f, [x, y], {X, Y})接着,我们可以使用contour函数来绘制等高线图:contour(X, Y, Z)我们可以使用hold on和plot函数来在等高线图中标记极值点的位置和函数值:hold onplot(sol.x, sol.y, 'ro', 'MarkerSize', 10)text(sol.x, sol.y, num2str(f_val), 'HorizontalAlignment', 'left', 'VerticalAlignment', 'bottom')通过以上步骤,我们可以得到一个带有等高线图和标记结果的图像。
Matlab求解方程和函数极值一.线性方程组求解1.直接解法①利用左除运算符的直接解法对于线性方程组Ax=b,可以利用左除运算符“\”求解:x=A\b例用直接解法求解下列线性方程组。
命令如下:A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]';x=A\b②利用矩阵的分解求解线性方程组矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积。
常见的矩阵分解有LU分解、QR分解、Cholesky分解,以及Schur分解、Hessenberg分解、奇异分解等。
(1) LU分解矩阵的LU分解就是将一个矩阵表示为一个交换下三角矩阵和一个上三角矩阵的乘积形式。
线性代数中已经证明,只要方阵A是非奇异的,LU分解总是可以进行的。
MATLAB提供的lu函数用于对矩阵进行LU分解,其调用格式为:[L,U]=lu(X):产生一个上三角阵U和一个变换形式的下三角阵L(行交换),使之满足X=LU。
注意,这里的矩阵X必须是方阵。
[L,U,P]=lu(X):产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PX=LU。
当然矩阵X同样必须是方阵。
实现LU分解后,线性方程组Ax=b的解x=U\(L\b)或x=U\(L\Pb),这样可以大大提高运算速度。
例用LU分解求解例7-1中的线性方程组。
命令如下:A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]';[L,U]=lu(A);x=U\(L\b)或采用LU分解的第2种格式,命令如下:[L,U ,P]=lu(A);x=U\(L\P*b)(2) QR分解对矩阵X进行QR分解,就是把X分解为一个正交矩阵Q和一个上三角矩阵R的乘积形式。
QR分解只能对方阵进行。
MATLAB的函数qr可用于对矩阵进行QR分解,其调用格式为:[Q,R]=qr(X):产生一个一个正交矩阵Q和一个上三角矩阵R,使之满足X=QR。
用MATLAB求极值灵活的运用MATLAB的计算功能,可以很容易地求得函数的极值。
例3.6.1 求223441x xyx x++=++的极值解首先建立函数关系:s yms sy=(3*x^2+4*x+4)/( x^2+x+1); ↙然后求函数的驻点:dy=diff(y); ↙xz=solve(dy) ↙xz=[0] [-2]知道函数有两个驻点x1=0和x2=-2,考察函数在驻点处二阶导数的正负情况:d2y=diff(y,2); ↙z1=limit(d2y,x,0) ↙z1=-2z2=limit(d2y,x,-2) ↙z2=2/9于是知在x1=0处二阶导数的值为z1=-2,小于0,函数有极大值;在x2=-2处二阶导数的值为z2=2/9,大于0,函数有极小值。
如果需要,可顺便求出极值点处的函数值:y1=limit(y,x,0) ↙y1=4y2=limit(y,x,-2) ↙y2=8/3事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。
而借助MA TLAB的作图功能,我们很容易做到这一点。
例3.6.2画出上例中函数的图形解syms x ↙y=(3*x^2+4*x+4)/( x^2+x+1); ↙得到如下图形ezplot(y) ↙如何用MATLAB求函数的极值点和最大值比如说y=x^3+x^2+1,怎样用matlab来算它的极值和最大值?求极值:syms x y>> y=x^3+x^2+1>> diff(y) %求导ans =3*x^2 + 2*x>> solve(ans)%求导函数为零的点ans =-2/3极值有两点。
求最大值,既求-y的最小值:>> f=@(x)(-x^3-x^2-1)f = @(x)(-x^3-x^2-1)>> x=fminunc(f,-3,3)% 在-3;-3范围内找Warning: Gradient must be provided for trust-region method;using line-search method instead.> In fminunc at 354Optimization terminated: relative infinity-norm of gradient less than options.TolFun.x =-0.6667>> f(x)ans =-1.1481在规定范围内的最大值是1.1481由于函数的局限性,求出的极值可能是局部最小(大)值。
实验六多元函数的极值【实验目的】1.了解多元函数偏导数的求法。
2.了解多元函数极值的求法。
3.了解多元函数条件极值的求法。
4.学习、掌握MATLAB软件有关的命令。
【实验内容】求函数42=-+-的极值点和极值。
823z x xy y【实验准备】1.计算多元函数的极值2.计算二元函数在区域D内的最大值和最小值3.求函数偏导数的MATLAB命令MATLAB中主要用diff求函数的偏导数,用jacobian求Jacobian 矩阵。
diff(f,x,n)求函数f关于自变量x的n阶导数。
jacobian(f,x)求向量函数f关于自变量x(x也为向量)的jacobian矩阵。
【实验重点】1、多元函数的偏导数计算2、多元函数极值的计算【实验难点】1、多元函数极值的计算【实验方法与步骤】练习1 求函数42823z x xy y =-+-的极值点和极值。
首先用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*yans=-8*x+4*y 即348,84z z x y x y x y∂∂=-=-+∂∂再求解正规方程,得各驻点的坐标。
一般方程组的符号解用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=12*x^2B=-8C=4由判别法可知P(-4,-2)和Q(4,2)都是函数的极小值点,而点Q(0,0)不是极值点。
实验六 函数极值及零点的求解一、实验目的熟悉函数极值及零点的求解方法及相关指令二、实验原理1. 函数的极值的求解全局极小值:绘制函数曲线,粗略观察全局极小值范围,然后在此范围内利用下面的局部极小值求解函数求极小值。
局部极小值:fminbnd 函数:只能用于一元函数极小值求解,调用格式为[x,fval,exitflag,output]=fminbnd(fun,x1,x2,options)fun 为待求解的函数,可以用字符串、内联对象、匿名函数或函数文件句柄表达,x1,x2为求解时自变量的取值区间。
x 为搜索到的最小值对应的自变量值,fval 为函数最小值,exitflag 返回是否搜索到最小值标志,output 给出优化算法及迭代次数等信息。
fminsearch :一元或多元函数极小值求解,调用格式为[x,fval,exitflag,output]=fminsearch(fun,x0,options)x0是由各变量构成的搜索起点,也可以是多个搜索起点构成的矩阵,每一列代表一个搜索起点,此时找到多个极值。
fval 为搜索到的单个极小值或多个极值中最小的那个函数值。
其他参量与fminbnd 函数参量含义相同。
2.函数零点的求解fzero 函数:只能用于求解一元函数零点,调用格式为[x,fval]=fzero(fun,x0)fun 是字符串、内联对象、匿名函数或函数文件句柄表达的函数式,求解函数式等于零时的解,x0为搜索范围或在其附近搜索解。
fsolve 函数:可用于求解一元或多元函数零点,调用格式为[x,fval]=fsolve(fun,x0)求解多元函数零点时,各变量需写成一个列向量作为一个变量。
参数与fzero 含义及使用方法一致。
三、实验内容及步骤1.求函数5.08.1)2cos(5.1))5(sin()(206.02++-=t t t e t t f t 在区间[-5,5]中的最小值点。
2. 求0))sin(sin(105.02.0=-+--t e t t 的实数解。
用MATLAB求极值灵活的运用MATLAB的计算功能,可以很容易地求得函数的极值。
例3.6.1 求223441x xyx x++=++的极值解首先建立函数关系:s yms s ↙y=(3*x^2+4*x+4)/( x^2+x+1); ↙然后求函数的驻点:dy=diff(y); ↙xz=solve(dy) ↙xz=[0] [-2]知道函数有两个驻点x=0和x=-2,考察函数在驻点处二阶导数的正负情况:d2y=diff(y,2); ↙z1=limit(d2y,x,0) ↙z1=-2z2=limit(d2y,x,-2) ↙z2=2/9于是知在x=0处二阶导数的值为z=-2,小于0,函数有极大值;在x=-2处二阶导数的值为z=2/9,大于0,函数有极小值。
如果需要,可顺便求出极值点处的函数值:y=limit(y,x,0) ↙y=4y=limit(y,x,-2) ↙y=8/3事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。
而借助MATLAB的作图功能,我们很容易做到这一点。
例3.6.2画出上例中函数的图形解syms x↙y=(3*x^2+4*x+4)/( x^2+x+1); ↙得到如下图形ezplot(y) ↙如何用MATLAB求函数的极值点和最大值比如说y=x^3+x^2+1,怎样用matlab来算它的极值和最大值?求极值:syms x y>> y=x^3+x^2+1>> diff(y) %求导ans =3*x^2 + 2*x>> solve(ans)%求导函数为零的点ans =-2/3极值有两点。
求最大值,既求-y的最小值:>> f=@(x)(-x^3-x^2-1)f =@(x)(-x^3-x^2-1)>> x=fminunc(f,-3,3)% 在-3;-3范围内找Warning: Gradient must be provided for trust-region method;using line-search method instead.> In fminunc at 354Optimization terminated: relative infinity-norm of gradient less than options.TolFun.x =-0.6667>> f(x)ans =-1.1481在规定范围内的最大值是1.1481由于函数的局限性,求出的极值可能是局部最小(大)值。
用MATLAB求极值灵活的运用MATLAB的计算功能,可以很容易地求得函数的极值。
例3.6.1 求223441x xyx x++=++的极值解首先建立函数关系:s yms s ↙y=(3*x^2+4*x+4)/( x^2+x+1); ↙然后求函数的驻点:dy=diff(y); ↙xz=solve(dy) ↙xz=[0] [-2]知道函数有两个驻点x=0和x=-2,考察函数在驻点处二阶导数的正负情况:d2y=diff(y,2); ↙z1=limit(d2y,x,0) ↙z1=-2z2=limit(d2y,x,-2) ↙z2=2/9于是知在x=0处二阶导数的值为z=-2,小于0,函数有极大值;在x=-2处二阶导数的值为z=2/9,大于0,函数有极小值。
如果需要,可顺便求出极值点处的函数值:y=limit(y,x,0) ↙y=4y=limit(y,x,-2) ↙y=8/3事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。
而借助MATLAB的作图功能,我们很容易做到这一点。
例3.6.2画出上例中函数的图形解syms x↙y=(3*x^2+4*x+4)/( x^2+x+1); ↙得到如下图形ezplot(y) ↙如何用MATLAB求函数的极值点和最大值比如说y=x^3+x^2+1,怎样用matlab来算它的极值和最大值?求极值:syms x y>> y=x^3+x^2+1>> diff(y) %求导ans =3*x^2 + 2*x>> solve(ans)%求导函数为零的点ans =-2/3极值有两点。
求最大值,既求-y的最小值:>> f=@(x)(-x^3-x^2-1)f =@(x)(-x^3-x^2-1)>> x=fminunc(f,-3,3)% 在-3;-3范围内找Warning: Gradient must be provided for trust-region method;using line-search method instead.> In fminunc at 354Optimization terminated: relative infinity-norm of gradient less than options.TolFun.x =-0.6667>> f(x)ans =-1.1481在规定范围内的最大值是1.1481由于函数的局限性,求出的极值可能是局部最小(大)值。
matlab 多元函数极值并标记Matlab是一个功能强大的数值计算软件,可以用于解决各种数学问题,包括寻找多元函数的极值。
本文将介绍如何使用Matlab来寻找多元函数的极值,并通过标记标题的方式来展示。
我们需要定义一个多元函数。
假设我们要求解的函数是一个二元函数,即具有两个自变量的函数。
我们可以将这个函数定义为f(x, y)。
为了简单起见,我们假设这个函数是一个二次函数,即f(x, y) = ax^2 + by^2 + cxy + dx + ey + f。
其中,a、b、c、d、e、f 是函数的系数。
在Matlab中,我们可以使用syms命令来定义符号变量。
然后,我们可以使用f(x, y) = ax^2 + by^2 + cxy + dx + ey + f来定义我们的函数。
接下来,我们可以使用diff命令来计算函数的偏导数。
偏导数可以告诉我们函数在某个点的斜率,从而帮助我们确定极值点的位置。
在计算偏导数之后,我们可以使用solve命令来求解方程组。
方程组的解将告诉我们函数的极值点的坐标。
注意,我们还需要计算二阶偏导数来确定这些极值点是极大值还是极小值。
如果二阶偏导数是正的,那么这些极值点是极小值;如果二阶偏导数是负的,那么这些极值点是极大值。
接下来,我们将通过一个具体的例子来演示如何使用Matlab来寻找多元函数的极值。
假设我们要求解的函数是f(x, y) = x^2 + y^2 + 2xy + 3x + 4y + 5。
我们可以使用Matlab的符号计算工具箱来进行计算。
我们需要定义符号变量x和y。
我们可以使用syms命令来定义这两个符号变量。
然后,我们可以使用f(x, y) = x^2 + y^2 + 2xy + 3x + 4y + 5来定义我们的函数。
接下来,我们可以使用diff命令来计算函数的偏导数。
我们需要计算关于x和y的偏导数。
我们可以使用diff(f, x)来计算关于x的偏导数,使用diff(f, y)来计算关于y的偏导数。
数学实验五 用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的计算功能,可以很容易地求得函数的极值。
例3.6.1 求223441x xyx x++=++的极值解首先建立函数关系:s yms s ↙y=(3*x^2+4*x+4)/( x^2+x+1); ↙然后求函数的驻点:dy=diff(y); ↙xz=solve(dy) ↙xz=[0] [-2]知道函数有两个驻点x1=0和x2=-2,考察函数在驻点处二阶导数的正负情况:d2y=diff(y,2); ↙z1=limit(d2y,x,0) ↙z1=-2z2=limit(d2y,x,-2) ↙z2=2/9于是知在x1=0处二阶导数的值为z1=-2,小于0,函数有极大值;在x2=-2处二阶导数的值为z2=2/9,大于0,函数有极小值。
如果需要,可顺便求出极值点处的函数值:y1=limit(y,x,0) ↙y1=4y2=limit(y,x,-2) ↙y2=8/3事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。
而借助MA TLAB的作图功能,我们很容易做到这一点。
例3.6.2画出上例中函数的图形解syms x ↙y=(3*x^2+4*x+4)/( x^2+x+1); ↙得到如下图形ezplot(y) ↙如何用MATLAB求函数的极值点和最大值比如说y=x^3+x^2+1,怎样用matlab来算它的极值和最大值?求极值:syms x y>> y=x^3+x^2+1>> diff(y) %求导ans =3*x^2 + 2*x>> solve(ans)%求导函数为零的点ans =-2/3极值有两点。
求最大值,既求-y的最小值:>> f=@(x)(-x^3-x^2-1)f =@(x)(-x^3-x^2-1)>> x=fminunc(f,-3,3)% 在-3;-3范围内找Warning: Gradient must be provided for trust-region method;using line-search method instead.> In fminunc at 354Optimization terminated: relative infinity-norm of gradient less than options.TolFun.x =-0.6667>> f(x)ans =-1.1481在规定范围内的最大值是1.1481由于函数的局限性,求出的极值可能是局部最小(大)值。
matlab多元函数求极值Matlab是一种强大的数学软件,它不仅可以进行数值计算,还可以进行符号计算、绘图等操作。
在Matlab中,我们可以使用多元函数求极值。
本文将介绍如何使用Matlab进行多元函数求极值的方法及其应用。
在Matlab中,求多元函数极值的方法有两种:一种是使用Matlab 自带的优化工具箱中的函数,另一种是使用Matlab的符号计算工具箱中的函数。
下面将分别介绍这两种方法。
1. 使用优化工具箱函数求多元函数极值Matlab的优化工具箱中提供了多个函数,可以用来求解多元函数的极值。
其中最常用的是fmincon函数,它可以用来求解有约束条件的多元函数极值问题。
使用fmincon函数求解多元函数极值的一般步骤如下:1) 定义目标函数和约束条件;2) 设定初始点;3) 调用fmincon函数求解极值。
以下是一个具体的例子,假设要求解以下目标函数的极值:f(x1, x2) = x1^2 + x2^2约束条件为:x1 + x2 = 1定义目标函数和约束条件:function f = objfun(x)f = x(1)^2 + x(2)^2;endfunction [c,ceq] = confun(x)c = [];ceq = x(1) + x(2) - 1;end然后,设定初始点:x0 = [0, 0];调用fmincon函数求解极值:options = optimoptions('fmincon','Display','iter');[x,fval] = fmincon(@objfun,x0,[],[],[],[],[],[],@confun,options);其中,options用于设定一些选项,如是否显示迭代过程等。
2. 使用符号计算工具箱函数求多元函数极值除了使用优化工具箱函数,Matlab的符号计算工具箱中也提供了一些函数,可以用来求解多元函数的极值。
实验六多元函数的极值
【实验目的】
1.了解多元函数偏导数的求法。
2.了解多元函数极值的求法。
3.了解多元函数条件极值的求法。
4.学习、掌握MATLAB软件有关的命令。
【实验内容】
求函数42
=-+-的极值点和极值。
823
z x xy y
【实验准备】
1.计算多元函数的极值
2.计算二元函数在区域D内的最大值和最小值
3.求函数偏导数的MATLAB命令
MATLAB中主要用diff求函数的偏导数,用jacobian求Jacobian 矩阵。
diff(f,x,n)求函数f关于自变量x的n阶导数。
jacobian(f,x)求向量函数f关于自变量x(x也为向量)的jacobian 矩阵。
【实验重点】
1、多元函数的偏导数计算
2、多元函数极值的计算
【实验难点】
1、多元函数极值的计算
【实验方法与步骤】
练习1 求函数42823z x xy y =-+-的极值点和极值。
首先用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 即348,84z z x y x y x y
∂∂=-=-+∂∂再求解正规方程,得各驻点的坐标。
一般方程组的符号解用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=12*x^2
B=-8
C=4
由判别法可知P(-4,-2)和Q(4,2)都是函数的极小值点,而点Q(0,0)不是极值点。
实际上,P(-4,-2)和Q(4,2)是函数的最小值点。
当然,我们可以通过画函数图形来观测极值点与鞍点。
>>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')
运行结果为
还可以通过画等值线来观察极值。
>>contour (X,Y ,Z,600)
>>xlabel ('x'),ylabel ('y')
运行结果为
练习2 求函数z xy =在条件1x y +=下的极值。
构造Lagrange 函数 (,,)(1)L x y xy x y λλ=++- 求Lagrange 函数的极值。
先求(,,)L x θλ关于,,x θλ的一阶偏导数,相应的MATLAB 代码为
>>clear;syms x y k
>>l=x*y+k*(x+y-1);
>>diff(l,x)
>>diff(l,y)
>>diff(l.k) 得L
y x λ∂=+∂,L
x y λ∂=+∂,1L
x y λ∂=+-∂,再解正规方程
>>clear;syms x y k
>>[x,y,k]=solve ('y+k=0','x+k=0','x+y-1=0','x','y','k') 得12x =-,12y =,1
2λ=。
经过判断,该点为函数的极大值点,此
时函数达到最大值。
【练习与思考】
1. 求1444+-+=xy y x z 的极值,并对图形进行观察。
2. 求函数222),(y x y x f +=在圆周122=+y x 的最大值和最小值。