Matlab优化(求极值)
matlab计算多元函数极值极其极值点

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计算两个极值点的方法

matlab计算两个极值点的方法摘要:一、引言二、Matlab计算极值点的原理1.导数法2.二次规划法3.梯度下降法三、具体操作步骤1.导入数据2.计算导数3.寻找极值点四、实例演示1.简单的二维函数2.复杂的三维函数五、总结与展望正文:一、引言在工程实践中,经常会遇到需要求解极值点的问题。
Matlab作为一款强大的数学计算软件,为我们提供了多种求解极值点的方法。
本文将详细介绍如何在Matlab中计算两个极值点,以及具体的操作步骤。
二、Matlab计算极值点的原理1.导数法求解极值点的一种常用方法是利用函数的导数。
Matlab中提供了求导函数`fprintf`,可以方便地对函数进行求导。
找到函数的零点,即为极值点。
2.二次规划法二次规划法是一种求解无约束优化问题的方法。
通过构建一个目标函数和相应的约束条件,利用Matlab中的优化工具箱求解。
找到目标函数的极值点。
3.梯度下降法梯度下降法是一种迭代算法,通过不断更新变量值,使目标函数值逐步逼近极值。
Matlab中的梯度下降函数`fminbnd`可以用于求解极值点。
三、具体操作步骤1.导入数据首先,我们需要导入所需的函数和数据。
例如,我们可以使用`load`函数导入一个已经保存的矩阵或使用`x=1:10`创建一个区间数据。
2.计算导数对于简单的函数,我们可以直接使用`fprintf`函数求导。
例如,假设我们有函数`f(x)=x^3-6x^2+9`,可以计算其导数`df(x)=3x^2-12x`。
3.寻找极值点利用Matlab中的`zeros`函数找到导数为零的点,这些点即为极值点。
例如,求解方程`3x^2-12x=0`,得到极值点x=0和x=4。
4.对于复杂函数或三维函数,可以使用`fminbnd`函数求解极值点。
首先,定义目标函数和约束条件。
然后,调用`fminbnd`函数,得到极值点。
四、实例演示1.简单的二维函数假设我们有函数`f(x,y)=x^2+y^2-6x-8y+10`,在Matlab中可以按照以下步骤求解极值点:(1)计算导数:`df(x,y)=2x-6+2y-8`(2)寻找极值点:`zeros(2*10)`(3)求解极值点:使用`fminbnd`函数,设置初始猜测值`x0=y0=1`,得到极值点约为(2.24,3.24)。
基于MATLAB的鲍威尔法求极值问题

基于MATLAB的鲍威尔法求极值问题:xxx 学号:xxx(理工大学机械与车辆学院车辆工程,100081)摘要:无约束优化方法主要有七种,按照求导与否把这些方法分为间接法和直接法。
牛顿法的成败与初始点选择有极大关系,其可靠性最差;坐标轮换法、单纯形法和最速下降法对于高维优化问题计算效率很低,有效性差;由于编制变尺度法程序复杂,其简便性不足。
综合考虑后,鲍威尔法、共轭梯度法具有较好的综合性能。
本文首先对鲍威尔法的原理进行阐述,根据其迭代过程给出流程图,并编写MATLAB程序。
最后用此MATLAB程序求解实际的极值问题,并对求解结果进行简要分析。
1.鲍威尔法的基本思想1.1其他优化方法对鲍威尔法形成的影响通过对鲍威尔法的学习,可以很明显看出来其迭代思想中汲取了其他几种优化方法的核心思想。
为了更全面、更深入的学习鲍威尔法,很有必要对其他有影响的优化思想进行学习和梳理。
由最基本的数学基础知识可知,梯度方向是函数增加最快的方向,负梯度方向是函数下降最快的方向,于是,利用这个下降最快方向产生了最速下降法。
每次迭代都沿着负梯度方向进行一维搜索,直到满足精度要求为止。
其特点是相邻两个搜索方向互相正交,所以很明显的一个现象就是刚开始搜索步长比较大,愈靠近极值点其步长愈小,收敛速度愈慢,特别当二维二次目标函数的等值线是较扁的椭圆时,迭代速度更慢。
这时,倘若目标函数是等值线长、短轴都平行于坐标轴的椭圆形,则通过坐标轮换法可以很高效的解决问题。
通过两次分别沿坐标轴进行一维搜索,便可达到极值点。
但对于目标函数的等值线椭圆的长、短轴倾斜于坐标轴时,坐标轮换法的搜索效率也显得极低。
抛开这两种特殊情况,对于一般形态的目标函数,如果在某些明显可以直达最优点的情况下(一般为靠近极值点区域),迭代过程完全可以不沿负梯度方向搜索,取而代之的是找到直达最优点的方向,一步到位。
但这样的直达方向应该如何去找呢?共轭梯度法由此产生。
其基本原理是:任意形式的目标函数在极值点附近的特性都近似一个二次函数,其等值线在极值点附近为近似的同心椭圆簇,而同心椭圆簇有一个特性便是任意两条平行线与椭圆簇切点的连线必通过椭圆的中心。
matlab极值点

MATLAB极值点一、引言MATLAB是一种强大的数学建模和仿真软件,广泛应用于科学研究、工程设计和数据分析等领域。
在MATLAB中,寻找极值点是一项常见的任务,它对于优化问题的求解和函数的分析具有重要意义。
本文将详细介绍MATLAB中寻找极值点的方法和应用。
二、MATLAB中的极值点寻找方法2.1 梯度下降法梯度下降法是一种常用的优化算法,它通过迭代的方式逐步逼近函数的极小值点。
在MATLAB中,可以使用fminunc函数来实现梯度下降法。
该函数需要提供一个目标函数和初始点,然后通过迭代计算来寻找极小值点。
2.2 全局优化方法全局优化方法是一种寻找函数全局极小值点的算法。
MATLAB中提供了fmincon函数来实现全局优化。
该函数需要提供一个目标函数和约束条件,然后通过迭代计算来寻找全局极小值点。
2.3 网格搜索法网格搜索法是一种简单但有效的寻找函数极值点的方法。
在MATLAB中,可以使用gridsearch函数来实现网格搜索法。
该函数需要提供一个目标函数、搜索范围和步长,然后通过遍历搜索来寻找极值点。
三、MATLAB中极值点的应用3.1 函数优化在许多实际问题中,需要寻找一个函数的最优解。
例如,在工程设计中,需要找到一个函数的最小值点来满足设计要求。
MATLAB中的优化工具箱提供了丰富的函数和方法来解决这类问题。
3.2 数据分析在数据分析中,寻找极值点可以帮助我们理解数据的特征和趋势。
例如,我们可以通过寻找时间序列数据的极大值点来找到数据的峰值。
MATLAB中的统计工具箱提供了各种函数和方法来进行数据分析和极值点的寻找。
3.3 图像处理在图像处理中,寻找图像的极值点可以帮助我们定位图像的边缘和特征点。
例如,在边缘检测中,我们可以通过寻找图像的极小值点来找到图像的边缘。
MATLAB中的图像处理工具箱提供了各种函数和方法来进行图像处理和极值点的寻找。
四、总结本文介绍了MATLAB中寻找极值点的方法和应用。
Matlab中如何求一个序列的极值

Matlab中如何求一个序列的极值?我们知道,在Matlab中有专门求序列最大值和最小值的函数,分别是Max 和Min,但是有时候我们不满足于求整个序列的最值,而是对序列的极值,也就是局部的最值感兴趣。
对于解析函数,这个比较简单,只要令一阶倒数为零求出对应的自变量就行了。
然而对于离散的序列,这种方法显然不可行,一个比较费劲或者说比较笨的方法就是手工查找,仔细考察序列的每一个值,用手工的方法将极值逐一挑出来。
然而对于比较长的序列,这种方法显然不可行。
我们期望有一个自动判断序列中某个点是极值点的函数,把这个艰巨的任务交给Matlab,让Matlab帮我们去找,这样可以节省我们宝贵的时间,把更多的时间放在更有意义的事情上面。
假设我们有一个长度为N的序列v(N,1),下面就是Matlab中实现求v的极值点的命令,其中用到了逻辑数组下标的方法:N = 100;v = rand (N,1);t = 0:length(v)-1;Lmax = diff(sign(diff(v)))== -2; % logic vector for the local max value Lmin = diff(sign(diff(v)))== 2; % logic vector for the local min value % match the logic vector to the original vecor to have the same lengthLmax = [false; Lmax; false];Lmin = [false; Lmin; false];tmax = t (Lmax); % locations of the local max elementstmin = t (Lmin); % locations of the local min elementsvmax = v (Lmax); % values of the local max elementsvmin = v (Lmin); % values of the local min elements% plot them on a figureplot(t,v);xlabel('t'); ylabel('v');hold on;plot(tmax, vmax, 'r+');plot(tmin,vmin, 'g+');hold off;结果如图所示:红色十字代表极大值,绿色十字代表极小值。
matlab求导和极值

数学实验二 用Matlab 软件求一元函数的导数和极(或最)值一、一元函数的导数1.调用格式一:diff(‘f(x)','x',n)式中,)(x f 为函数,x 为自变量,若未指明,按默认的自变量.n 为导数的阶数,缺省时,求一阶导数.例1 已知x x x f cos )(2=,求)(x f ′.解 在命令行中输入:dydx=diff('x^2*cos(x)') %未指明自变量,按默认的自变量输出导数结果结果如下:dydx =2*x*cos(x)-x^2*sin(x)即x x x x x f sin cos 2)(2−=′.例2 已知)arcsin(xt t y =(x 为常数),求22dty d . 解 在命令行中输入:d2ydt2=diff('t*asin(x*t)','t',2) %若不指明对t 求导,则默认对x 求导结果如下:d2ydt2 =2*x/(1-x^2*t^2)^(1/2)+t^2*x^3/(1-x^2*t^2)^(3/2)即3223222])(1[)(12xt t x xt x dt y d −+−=. 2.调用格式二:syms xdiff(f(x),x,n)例3 已知)arcsin(xt t y =(t 为常数),求2dx y d . 解 在命令行中输入:syms x td2ydx2=diff(t*asin(x*t),x,2)输出结果是:d2ydx2 =t^4/(1-x^2*t^2)^(3/2)*x即32422])(1[xt xt dx y d −=. 二、隐函数的导数在Matlab 中没有直接求隐函数导数的命令,但可调用Maple 中求隐函数导数的命令,调用格式如下:maple('implicitdiff(f(x,y)=0,y,x)')例4 求由方程05=−−+y x e xy 所确定的隐函数dxdy . 解 在命令行中输入:dydx=maple('implicitdiff(x*y-exp(x+y)-5=0,y,x)')运行结果是:dydx =-(y-exp(x+y))/(x-exp(x+y))即 yx yx e x e y dx dy ++−−−=. 三、一元函数的极(或最)值在Matlab 中只有求极(或最)小值命令的函数.若要求函数)(x f 在),(21x x 内的极(或最)大值,可转化为求)(x f −在),(21x x 内的极(或最)小值.求极(或最)小值点和极(或最)小值的调用格式是:[x,fual]=fminbnd(‘fun ’,x1,x2)式中,fun 为函数,x1,x2为x 的取值范围,x 为极(或最)小点,fual 为极(或最)小值.例5 求函数x e x f x sin 2)(−=在)5,2(的最小值点和最小值.解 在命令行中输入:[xmin,fmin]=fminbnd('2*exp(-x)*sin(x)',2,5)输出结果如下:x min=3.9270fmin =-0.0279例6 求函数231)(x x x f −−=在]9,10[−的最值点和最值.解 在命令行中输入:[xmin,fmin]=fminbnd('1-3*x-x^2',-10,9); %求)(x f 的最小值点和最小值[xmax,zmin]=fminbnd('-1+3*x+x^2',-10,9); %转化为求)(x f −的最小值点和最小值 fmax=-zmin; %))((x f −−的最大值xmin,fmin,xmax,fmax %输出最小值点、最小值和最大值点、最大值运行结果为:xmin =9fmin =-107xmax =-1.5000fmax =3.2500四、上机实验1.用help命令查看函数diff,fminbnd等的用法.2.上机验证上面各例.3.作相关小节练习中函数的导数和求函数的极(或最)值.。
用MATLAB求极值

用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由于函数的局限性,求出的极值可能是局部最小(大)值。
matlab二元函数求极值 遗传所引发

Matlab二元函数求极值是一个常见的数学问题,而遗传算法作为一种优化方法,在解决这个问题上也发挥了重要作用。
在本文中,我将对matlab二元函数求极值和遗传算法的相互关系进行深度探讨,并共享我个人对这一主题的理解。
1. Matlab二元函数求极值的基本概念Matlab是一种用于数值计算和可视化的高级技术计算语言和交互式环境。
在数学建模和优化问题中,经常会遇到需要求解二元函数的极值的情况。
这就涉及到了寻找函数在给定范围内的最大值或最小值的问题。
通过利用Matlab中的优化工具箱和相关函数,我们可以高效地求解二元函数的极值点,从而得到函数在特定区域内的最优解。
2. 遗传算法在优化问题中的应用遗传算法是一种模拟自然选择与遗传机制的计算方法,常用于解决优化问题。
它通过模拟自然界中的进化过程,通过选择、交叉和变异等操作,逐步优化解的质量,最终找到问题的最优解。
在实际应用中,遗传算法被广泛应用于解决复杂的优化问题,包括函数极值求解、组合优化、参数优化等多个领域。
3. Matlab二元函数求极值中遗传算法的应用在Matlab中,我们可以利用遗传算法工具箱来解决二元函数的极值求解问题。
通过将二元函数极值求解问题转化为适应度函数的优化问题,我们可以使用Matlab中优化工具箱中的遗传算法求取最优解。
遗传算法能够在多样化的解空间中高效地搜索最优解,从而在众多解空间中找到最优的极值点。
4. 个人观点与理解我认为,Matlab二元函数求极值与遗传算法的结合,为解决复杂的优化问题提供了一种高效的方法。
遗传算法能够通过对解的多样性进行搜索,找到最优解的潜力非常大。
当我们将遗传算法与Matlab中强大的数值计算和优化工具箱相结合,就可以更快、更精确地求解二元函数的极值,从而解决实际问题中的优化难题。
在本文中,我对Matlab二元函数求极值和遗传算法的应用进行了探讨,并共享了个人观点和理解。
通过深入探讨这一主题,相信读者对于如何利用遗传算法来解决Matlab二元函数求极值问题会有更深入的理解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第七讲 Matlab 优化(求极值)理论介绍:算法介绍、软件求解. 一.线性规划问题1.线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小值的问题,Matlab 中规定线性规划的标准形式为min s.t.T xc xAx b Aeq x beq lb x ub ≤⎧⎪⋅=⎨⎪≤≤⎩其中c 和x 为n 维列向量,A 、Aeq 为适当维数的矩阵,b 、beq 为适当维数的列向量。
注意:线性规划问题化为Matlab 规定中的标准形式。
求解线性规划问题的Matlab 函数形式为linprog(c,A,b),它返回向量x 的值,它的具体调用形式为:[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,x0,OPTIONS)这里fval 返回目标函数的值,LB 、UB 分别是变量x 的下界和上界,x0是x 的初始值,OPTIONS 是控制参数。
例1 求解线性规划问题123123123123123max 23572510s.t.312,,0z x x x x x x x x x x x x x x x =+-++=⎧⎪-+≥⎪⎨++≤⎪⎪≥⎩ 程序:c=[2;3;5];>> A=[-2,5,-1;1,3,1];b=[-10;12]; >> Aeq=[1,1,1];beq=[7]; >> LB=[0;0;0];(zeros(3,1))>> [x,fval]=linprog(c,A,b,Aeq,beq,LB,[]) 练习与思考:求解线性规划问题12312312123min 23+428s.t.3+26,,0z x x x x x x x x x x x =+++≥⎧⎪≥⎨⎪≥⎩ 注意:若没有不等式:b AX ≤存在,则令A=[ ],b=[ ]. 若没有等式约束, 则令Aeq=[ ], beq=[ ].2.可以转化为线性规划的问题规划问题12min||+||++||s.t.,n x x x Ax b ≤L 其中1=[],T n x x x L ,A b 为相应维数的矩阵和向量。
注意到对任意的i x 存在,>0i i u v 满足=-,||=+i i i i i i x u v x u v ,事实上只要取+||||-=,=22i i i i i i x x x xu v 就可以满足上面的条件。
这样,记11=[],=[],T T n n u u u v v v L L 从而可以把问题变成=1min (+)(-)s.t.,0ni i i u v A u v b u v ≤⎧⎨≥⎩∑例2 求解规划问题min{max||}iii x y ε,其中=-.i i i x y ε对于这个问题,如果取0=lim||ii y x ε,这样,上面的问题就变换成01100min s.t.-,,-n n x x y x x y x ≤≤L这是我们通常的线性规划问题。
练习与思考:规划问题1234123412341234min ||2||+3||+4||--+=0s.t.-+-3=11--2+3=-2z x x x x x x x x x x x x x x x x =+⎧⎪⎪⎨⎪⎪⎩二.非线性一元函数的最小值对于求一元函数的最小值问题,Matlab 提供了一个命令函数fminbnd ,fminbnd 函数的调用格式为:X=fminbnd(fun,x1,x2)和[X,fval]=fminbnd(fun,x1,x2)其中fun 为目标函数,x1,x2为变量的边界约束,即12[,]x x x ∈,X 为返回的满足fun 取得最小值的x 的值,fval 为目标函数值。
例3 计算函数321()x x x x f x e e-+-=+的最小值和f(x)取最小值时x 的值,[5,5].x ∈-程序:>> clear>> fun='(x^3+x^2-1)/(exp(x)+exp(-x))'; >> ezplot(fun,[-5,5]) >> [X,fval]=fminbnd(fun,-5,5)练习与思考:如何求一元函数的最大值 三.无约束非线性多元变量函数的优化对于无约束非线性多元变量函数的优化问题,主要采用命令函数fminsearch 和fminunc ,其中fminsearch 比较适合处理低阶多间断点的函数,fminunc 则对高阶连续函数有效。
1.命令函数fminsearch函数fminsearch 求解目标函数fun 的最小值和fun 取最小值时变量x 的值,调用格式为:X=fminsearch(fun,X0)和[X,fval]=fminsearch(fun,X0)其中X0为声明变量的初始值,X 为返回的x 的值,fval 为返回的fun 的值。
例4 求12[,],x x 使目标函数12()sin cos f x x x =+取得最小值。
程序:>> clear >> X0=[0,0];>> [X,fval]=fminsearch('sin(x(1))+cos(x(2))',X0)说明:声明变量初始值对返回的x 的值的影响。
X0=[100,100] 2.命令函数fminunc函数fminunc 通过计算寻找多变量目标函数fun 的最小值,调用格式为:X=fminunc(fun,X0)和[X,fval]=fminunc(fun,X0)其中X0为优化的初始值,X 为返回的x 的值,fval 为返回的fun 的值。
例5 对函数12212122()(42421)x f x e x x x x x =++++进行最小值优化。
程序:>> clear>> fun='exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)'; >> x0=[0,0];>> [x,fval]=fminunc(fun,x0)注意:fminunc 函数只能处理实函数的优化问题,目标函数最好是连续函数,给出的解可能只是局部解。
四.有约束非线性多元变量函数的优化1.Matlab 命令函数fmincon 可以处理有约束的非线性多元变量的优化问题,有约束多元变量优化问题的数学模型为:求一组变量xi ,满足在给定的约束条件下,使目标函数f(xi)取得最小值。
目标函数一般为非线性函数,约束条件有线性不等式约束、线性等式约束、变量边界约束和非线性约束。
线性约束:i Ax B ≤,等式约束:i Aeq x Beq ⋅=,边界约束:i i i Lb x Ub ≤≤,fmincon 函数的调用格式为:[x,fval]=fmincon(fun,x0,A,B,Aeq,Beq,Lb,Ub,nonlcon,options)其中,nonlcon 表示非线性约束条件,options 为设置的控制优化过程的优化参数向量(可以用optionset 打开)。
非线性约束的表示形式为:把不等式和等式变换成小于号(或等号)左边是函数表达式右边为0的形式,然后以函数表达式作为元素分别组成不等式约束矩阵和等式约束矩阵。
当约束条件比较复杂时,常常先建立约束条件的M 文件。
例6求12[,],x x 使目标函数12212122()(42421)x f x e x x x x x =++++取得最小值,约束条件为:121212121.5*0;*10,0,0.x x x x x x x x +--≤-≤≥≥程序:(1)建立非线性约束的M 文件 function [c,ceq]=confun(x)c=[+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10]; ceq=[];end(2)建立优化命令 >> clear x0=[-1,1];fun='exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)'; lb=[0,0]; ub=[]; options=[];>> [x,fval,exitflag,output]=fmincon(fun,x0,[],[],[],[],lb,ub,'confun',options) 参数exitflag 有3种情况,exitflag>0表示优化结果收敛于解,exitflag<0表示优化结果不收敛于解,exitflag=0表示优化超过了声明的代入函数值的次数;output 包含优化过程的信息。
2.已知梯度条件的优化(例6的第二种解法)对于复杂的非线性优化问题,利用已知的梯度条件将会取得更加令人满意的结果。
例7利用梯度条件对12212122min ()(42421)x f x e x x x x x =++++进行优化,约束条件为:1212121.5*0;*10.x x x x x x +--≤-≤分析:(1)先写出目标函数和约束条件的梯度函数表达式:目标函数:12212122(42421)x objfun e x x x x x =++++ 目标函数的梯度:11122121221221[(42421)(84);(442)]x x x G e x x x x x e x x e x x =++++++++约束函数:121212[1.5*;*10]confun x x x x x x =+----梯度221111x x CG x x --⎧⎫=⎨⎬--⎩⎭程序:(1)编写目标函数及其梯度M 文件 function [f,G]=objfungrad(x)f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);t=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);G=[t+exp(x(1))*(8*x(1)+4*x(2)),exp(x(1))*(4*x(1)+4*x(2)+2)];end(2)编写约束函数及其梯度M文件function [c,ceq,dc,dceq]=confungrad(x)c=[+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10];ceq=[];dc=[x(2)-1,-x(2);x(1)-1,-x(1)];dceq=[];end(3)编写优化命令>> clear>> x0=[-1,1];>> options=[];[x,fval,exitflag,output]=fmincon('objfungrad',x0,[],[],[],[],[],[],'confungrad',options)。