matlab 无约束优化问题
信赖域算法matlab程序求解问题
信赖域算法matlab程序求解问题信赖域算法(Trust Region Algorithm)是一种用于求解无约束优化问题的数值优化算法。
它通过在当前解的局部区域内构建一个信赖域来逼近目标函数的局部性质,然后在该信赖域内求解近似问题,以寻找更优的解。
在MATLAB中,可以使用fminunc函数来实现信赖域算法。
该函数可以求解多元无约束优化问题的最小值。
其调用形式如下:```[x, fval, exitflag, output] = fminunc(fun, x0, options) ```其中,`fun`是目标函数的句柄,`x0`是初始解向量,`options`是优化选项的结构体。
返回值`x`是最优解向量,`fval`是最优解的目标函数值,`exitflag`是退出标志,`output`是优化过程的输出信息。
在使用fminunc函数时,需要定义一个目标函数。
目标函数是一个输入为解向量x,输出为目标函数值的函数。
例如,假设要求解的优化问题的目标函数为:```function f = objective(x)f = x(1)^2 + x(2)^2;end```然后,可以使用fminunc函数来求解最小值:```x0 = [0, 0]; % 初始解向量options = optimset('GradObj', 'on'); % 启用目标函数的梯度计算[x, fval, exitflag, output] = fminunc(@objective, x0, options);```在上述代码中,`optimset`函数用于设置优化选项,`'GradObj', 'on'`表示启用目标函数的梯度计算。
如果目标函数没有提供梯度计算,可以将该选项置为`'off'`。
信赖域算法在求解优化问题时,会自动进行迭代,不断更新解向量,直到满足收敛条件。
优化问题(Matlab)
一、无约束优化问题无约束极小化问题的标准性为:)(min x F 其中x 为n 维变元向量。
用MA TLAB 求解以上问题的基本步骤为:1、首先建立函数形式的M-文件fun.m:function f=fun(x)f=F(x) 2、命令的基本格式:(1)),,'min('21x x fun f x= (2)),'('min 0x fun u f x=;或),'('min 0x fun s f x = (3)),,'('min 0options x fun u f x =;或),,'('min 0options x fun s f x= (4) ),'('0x fun leastsq x =或),,'('0options x fun leastsq x =注:1)用于一元函数的无约束极小化问题,x1与x2分别为x 的下界和上界;2)、3)用于多元函数的无约束极小化问题,x0为迭代的初值;命令fmin 和fmins 可直接定义函数F(x),不一定非用m-文件,命令fminu 必须先用m-文件定义函数F(x);fmins 是用单纯形法寻优。
例1:Rosenbrock 函数21221221)1()(100),(x x x x x f -+-=的最优解(极小)为)1,1(=*x ,极小值为0=*f 。
试用不同算法求数值最优解。
初始值选为)2,2.1()0(-=x 。
二、线性规划问题(linprog)1、),,(b A c lp x =用于求解模型:b Ax t s cxz ≤=..min 2、),,,,(VUB VLB b A c lp x =用于求解模型:VUB x VLB bAx t s cxz ≤≤≤=..min3、),,,,,(0x VUB VLB b A c lp x =也用于求解模型2其中0x 表示初始点。
用MATLAB求解无约束优化问题-电子科技大学
-218.0000
注:有些实际问题可能会有一个约束条件:决策变量
只能取整数,如x1、x2取整数。这类问题实际上是整数线 性规划问题。如果把它当成一个线性规划来解,求得其最 优解刚好是整数时,故它就是该整数规划的最优解。若用 线性规划解法求得的最优解不是整数,将其取整后不一定 是相应整数规划的最优解,这样的整数规划应用专门的方 法求解(如割平面法、分支定界法)。
S.t.
0.4 0
1.1 0
1 0
0 0.5
0 1.2
10.3X 890000
x1
1 0 0
0 1 0
0 0 1
1 0 0
0 1 0
0 400 0X 600 1 500
x2
,X
x3
最速下降法是一种最基本的算法,它在最优化方法中占有重要地位.最
速下降法的优点是工作量小,存储变量较少,初始点要求不高;缺点是收敛
慢,最速下降法适用于寻优过程的前期迭代或作为间插步骤,当接近极值
点时,宜选用别种收敛快的算法.
2.牛顿法算法步骤:
(1) 选定初始点 X 0 E n ,给定允许误差 0 ,令 k=0;
s.t. AX b
命令:x=linprog(c,A,b)
2、模型:min z=cX
s.t. AX b Aeq X beq
命令:x=linprog(c,A,b,Aeq,beq)
注意:若没有不等式:AX b 存在,则令A=[ ],b=[ ].
3、模型:min z=cX
s.t. AX b Aeq X beq
x1 0, x2 0
解: 编写M文件如下:
实验10无约束优化
实验10 无约束优化实验目的1. 1. 掌握用MA TLAB 优化工具箱的基本用法,对不同算法进行初步分析、比较。
2. 2. 练习用无约束优化方法建立和求解实际问题模型(包括非线性最小二乘拟合)。
实验内容第2题:取不同的初值计算下列非线性规划,尽可能求出所有局部极小点,进而找出全局极小点,并对不同算法(搜索方向、步长搜索、数值梯度与分析梯度等)的结果进行分析、比较。
(4)c a a c a a x x x x z T T 222111)()(1)()(1min +---+---=,2R ∈x 。
其中)73.0,7.0(),(21=c c ,T a )4,4(1=,Ta )8.3,5.2(2=。
★问题分析:首先用数学方法计算出真实值,),(21'=x x x , 将T a )4,4(1=,T a )8.3,5.2(2=代入,化z 的表达式为:2222112221)8.3()5.2(1)4()4(1c x x c x x z +-+--+-+--=可见分母的值越小,z 越小。
当x1,x2的值在2.5—4之间时可能取最小值。
2.53 3.54 4.52.533.544.5可以看出,z 存在两个最小值。
对z 求导:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡+-+--++-+--+-+--++-+--=2122212212221221222112122211])8.3()5.2[()8.3(2])4()4[()4(2])8.3()5.2[()5.2(2])4()4[()4(2c x x x c x x x c x x x c x x x z ★ ★ Matlab 程序设计及结果: 下面用不同的算法进行计算:分别运行以上两程序,2222112221)8.3()5.2(1)4()4(1c x x c x x z +-+--+-+--=的求解无论用数值法还是分析法,无论用什么搜索方向,什么步长搜索都可以得到最优解和最优值。
最优化方法 powell法求解无约束优化问题
数学与计算科学学院实验报告
实验项目名称powell法求解无约束优化问题
所属课程名称最优化方法
实验类型算法编程
实验日期
班级
学号
姓名
成绩
附录1:源程序
附录2:实验报告填写说明
1.实验项目名称:要求与实验教学大纲一致。
2.实验目的:目的要明确,要抓住重点,符合实验教学大纲要求。
3.实验原理:简要说明本实验项目所涉及的理论知识。
4.实验环境:实验用的软、硬件环境。
5.实验方案(思路、步骤和方法等):这是实验报告极其重要的内容。
概括整个实验过程。
对于验证性实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作。
对于设计性和综合性实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明。
对于创新性实验,还应注明其创新点、特色。
6.实验过程(实验中涉及的记录、数据、分析):写明具体实验方案的具体实施步骤,包括实验过程中的记录、数据和相应的分析。
7.实验结论(结果):根据实验过程中得到的结果,做出结论。
8.实验小结:本次实验心得体会、思考和建议。
9.指导教师评语及成绩:指导教师依据学生的实际报告内容,给出本次实验报告的评价。
最优化方法matlab
最优化方法matlab最优化方法是数学和计算机科学中的一个分支,用于解决各种优化问题。
它涉及到在给定的约束条件下,寻找使目标函数取得最优值的变量值。
在MATLAB中,有多种方法可以用来解决最优化问题,包括无约束优化、线性规划和非线性规划等。
在MATLAB中,最常用的最优化方法之一是无约束优化。
这种方法适用于目标函数没有约束条件的情况。
在MATLAB中,可以使用fminunc函数来实现无约束优化。
该函数通过迭代的方式,不断尝试不同的变量值,以找到目标函数的最小值。
该函数的语法如下:[x,fval] = fminunc(fun,x0,options)其中,fun是要优化的目标函数的句柄,x0是初始变量值的向量,options是一个结构体,包含可选参数。
返回值x是最优解的变量值向量,fval是目标函数在最优解处的取值。
除了无约束优化之外,线性规划也是一个常见的最优化问题。
在线性规划中,目标函数和约束条件都是线性的。
在MATLAB中,可以使用linprog函数来解决线性规划问题。
该函数的语法如下:[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub)其中,f是目标函数的系数向量,A和b分别是不等式约束的系数矩阵和常数向量,Aeq和beq是等式约束的系数矩阵和常数向量,lb和ub是变量的上下界。
返回值x是最优解的变量值向量,fval是目标函数在最优解处的取值。
非线性规划是另一个常见的最优化问题。
在非线性规划中,目标函数和约束条件都是非线性的。
在MATLAB中,可以使用fmincon函数来解决非线性规划问题。
该函数的语法如下:[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)其中,fun是要优化的目标函数的句柄,x0是初始变量值的向量,A和b分别是不等式约束的系数矩阵和常数向量,Aeq和beq是等式约束的系数矩阵和常数向量,lb和ub是变量的上下界,nonlcon是一个函数句柄,用于定义非线性约束。
在Matlab中使用优化算法解决约束问题
在Matlab中使用优化算法解决约束问题导言优化算法在工程和科学领域中扮演着重要的角色。
优化问题旨在找到给定约束条件下的最优解。
而在Matlab中,有许多强大而高效的工具和函数可以帮助我们解决这些问题。
本文将介绍如何在Matlab中使用优化算法来解决约束问题,以及一些常用的技巧和方法。
一、优化问题概述优化问题可以被定义为找到使得目标函数取得极值的一组变量的取值。
在很多实际问题中,我们需要在满足一定的约束条件下寻找最优解。
这些约束条件可以是等式约束或者不等式约束。
在Matlab中,我们可以使用优化工具箱来解决这些问题。
Optimization Toolbox 提供了大量的函数和算法,包括线性规划、非线性规划、整数规划等等。
其中,非线性规划问题是最常见和复杂的问题之一。
下面将介绍如何使用这些工具来解决不同类型的优化问题。
二、线性规划问题在线性规划问题中,目标函数和约束条件都是线性的。
通过使用Matlab的线性规划函数linprog,我们可以轻松地解决这类问题。
假设我们要最小化一个目标函数,如下:minimize f(x) = c'x约束条件为:Ax ≤ bAeqx = beqlb ≤ x ≤ ub其中,c是一个向量,A和Aeq是矩阵,b和beq是向量,lb和ub是向量或者标量。
下面是一个实例,我们希望在满足一定约束条件下最小化目标函数:目标函数:f(x) = -2x1 - 3x2约束条件:3x1 + 4x2 ≤ 14, 2x1 + x2 ≤ 8, x1 ≥ 0, x2 ≥ 0首先,我们需要创建目标函数和约束条件的矩阵和向量。
c = [-2; -3]; % 目标函数系数A = [3, 4; 2, 1]; % 不等式约束矩阵b = [14; 8]; % 不等式约束常数lb = [0; 0]; % 变量下界然后,使用linprog函数求解线性规划问题。
[x, fval] = linprog(c, A, b, [], [], lb);最后,输出最优解和目标函数值。
matlab 最速下降法
matlab 最速下降法MATLAB 最速下降法最速下降法是一种求解无约束优化问题的基本方法,也是一种迭代算法。
该方法的基本思想是:在当前点处,沿着当前点到最优解的方向,走一步能够使目标函数值下降最快的方向,即负梯度方向。
因此,最速下降法也被称为梯度下降法。
MATLAB 是一种强大的数学计算软件,可以用于求解各种数学问题,包括最速下降法。
在 MATLAB 中,可以使用 fminunc 函数来实现最速下降法。
该函数的基本语法如下:[x,fval,exitflag,output] = fminunc(fun,x0,options)其中,fun 是目标函数,x0 是初始点,options 是选项参数。
该函数的返回值包括最优解 x、目标函数值 fval、退出标志 exitflag 和输出信息 output。
下面是一个使用 fminunc 函数求解 Rosenbrock 函数的例子:fun = @(x) 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;x0 = [-1.2,1];options =optimoptions('fminunc','Display','iter','Algorithm','quasi-newton');[x,fval,exitflag,output] = fminunc(fun,x0,options);在上面的例子中,Rosenbrock 函数是一个经典的无约束优化问题,其目标函数为:f(x) = 100*(x2-x12)2 + (1-x1)2该函数的最优解为 (1,1),最小值为 0。
使用 fminunc 函数求解该问题,可以得到最优解 x = (1,1),最小值 fval = 2.9387e-11。
需要注意的是,最速下降法是一种基本的优化方法,但其收敛速度较慢,容易陷入局部最优解。
实验五:无约束优化
实验五:无约束优化班级 姓名 学号一、实验目的:学会用matlab 软件求解单变量和多变量无约束优化问题。
二、实验要求:1. 熟悉一维搜索的方法:进退法、黄金分割法、抛物线插值法、Armijo 准则;2. 熟悉求解多变量无约束问题的方法:变量轮换法、最速下降法、牛顿法、共轭梯度法;3. 会用matlab 软件求解无约束优化问题。
三、实验内容:1、试用matlab 优化工具箱中的fmincon 函数求解下列非线性规划问题:2221232212323123212223123m in ()8020..2023,,0f x x x x x x x x x x s t x x x x x x x =+++⎧-+≥⎪++≤⎪⎪--+=⎨⎪+=⎪⎪≥⎩(1)给出matlab 源代码; (2)求解结果粘贴.2、(精确一维搜索) 用0.618法求函数2()sin f x x x =-在[]0,1上的极小点,取自变量的允许误差为410δ-=,函数变量的允许误差为510ε-=。
3、(不精确一维搜索) Armijo 准则是许多非线性规划算法求步长时都必须执行的步骤。
Armijo 准则是指给定()0,1,(0,0.5),βσ∈∈令步长因子km k αβ=,其中km 是满足下列不等式的最小非负整数()()()mmTk k k k k f x d f x g d βσβ+≤+*这里k g 是函数()f x 在当前迭代点k x 处的梯度函数,k d 是当前迭代点k x 处的搜索方向. 可以证明()f x 若是连续可微的且满足0T k k g d <,则准则是有限终止的,即存在正数σ,使得对于充分大的正整数m ,()*成立.为了程序实现的方便,我们把Armijo 准则描述成下列详细的算法步骤: 算法1(Armijo 准则)步0:给定()0,1,(0,0.5),βσ∈∈令:0m =;步1:若不等式()()m m T k k k k k f x d f x g d βσβ+≤+成立, 置:,k m m = 1:km k k k x x d β+=+,停止.否则,转步2;步2:令:1m m =+,转步1.(1)试将上述的Armijo 准则编制成可重复利用的matlab 程序模块。
matlab 中的优化算法
matlab 中的优化算法MATLAB提供了多种优化算法和技术,用于解决各种不同类型的优化问题。
以下是一些在MATLAB中常用的优化算法:1.梯度下降法:梯度下降法是一种迭代方法,用于找到一个函数的局部最小值。
在MATLAB中,可以使用fminunc函数实现无约束问题的梯度下降优化。
2.牛顿法:牛顿法是一种求解无约束非线性优化问题的算法,它利用泰勒级数的前几项来近似函数。
在MATLAB中,可以使用fminunc 函数实现无约束问题的牛顿优化。
3.约束优化:MATLAB提供了多种约束优化算法,如线性规划、二次规划、非线性规划等。
可以使用fmincon函数来实现带约束的优化问题。
4.最小二乘法:最小二乘法是一种数学优化技术,用于找到一组数据的最佳拟合直线或曲线。
在MATLAB中,可以使用polyfit、lsqcurvefit等函数实现最小二乘法。
5.遗传算法:遗传算法是一种模拟自然选择过程的优化算法,用于求解复杂的优化问题。
在MATLAB中,可以使用ga函数实现遗传算法优化。
6.模拟退火算法:模拟退火算法是一种概率搜索算法,用于在可能的解空间中找到全局最优解。
在MATLAB中,可以使用fminsearchbnd函数实现模拟退火算法优化。
7.粒子群优化算法:粒子群优化算法是一种基于群体智能的优化算法,用于求解非线性优化问题。
在MATLAB中,可以使用particleswarm函数实现粒子群优化算法。
以上是MATLAB中常用的一些优化算法和技术。
具体的实现方法和应用可以根据具体问题的不同而有所不同。
大学数学实验七_无约束优化1
0.4228 0.0000 1.1436e-011
表 1.2 分析方法计算梯度得到的结果
迭代 次数
4 4 18 4 4 18
目标函数引 用次数
6 6 37 6 6 37
比较分析方法计算梯度得到的结果和用数值方法计算梯度得到的结果,发现都能比较准 确的得到最优解 x2=0。但是,用分析方法计算梯度时,目标函数引用次数明显减小(减小 到原来的 1/3 左右),说明用分析方法计算梯度比较节省资源。
12
输出的图像如下。
图 1.5 局部极小点分布
从上图中可以看出,局部极小点集中在
或
或
三条直线上,以及第二
象限中的一条形似双曲线一支的一条曲线上。放大上图,在这条曲线上随机取 10 个点,输
出它们的最优值以判断它们是不是全局最小解。
x1
x2
f(x)
1
-0.9519
0.0689
8.1051e-010
2
三、对不同算法的结果进行分析比较(分析方法计算梯度) 首先计算 f(x)的梯度。
梯度 :
而
修改函数文件 fun21,将上面计算的梯度增加进去。
8
将 GradObj 参数设置为 on,具体程序与之前所示一样,修改部分如下。
程序运行后得到的结果整理在下表中。
情况
1 2 3 4 5 6
搜索方向
BFGS DFP 最速下降 BFGS DFP 最速下降
最优解 步长搜索
x1
最优解 x2
最优值
混合二三 次插值
0.4196 0.4197 0.4228
0.0000 0.0000 0.0000
5.8944e-015 5.5970e-015 1.1436e-011
matlab的bfgs拟牛顿法
在MATLAB中,BFGS(Broyden-Fletcher-Goldfarb-Shanno)算法是一种常用的拟牛顿法,用于解决无约束最优化问题。
它是基于牛顿法的一种改进方法,可以在不需要计算Hessian矩阵的情况下进行优化。
BFGS算法在理论和实际应用中都具有重要意义,对于复杂的优化问题具有较好的收敛性和有效性。
在BFGS算法中,通过不断迭代更新逆Hessian矩阵的估计来逼近Hessian矩阵的逆,从而实现对目标函数的优化。
该算法的核心思想是利用目标函数的梯度信息来不断调整逆Hessian矩阵的估计,以求得最优解。
与牛顿法相比,BFGS算法避免了计算和存储目标函数的Hessian矩阵,从而减少了计算的复杂度,提高了算法的效率。
针对BFGS算法的MATLAB实现,可以通过以下步骤进行展开:1. 导入目标函数和梯度计算:在MATLAB中,首先需要定义目标函数和梯度的计算方法。
这可以通过函数句柄或匿名函数的方式实现,以便在算法中进行调用。
2. 初始点设置与参数设定:根据优化问题的特点和要求,在MATLAB 中设置初始点和算法参数,如最大迭代次数、容许误差等。
3. BFGS算法实现:使用MATLAB内置的优化函数或自行编写BFGS 算法的迭代更新过程,在每次迭代中更新参数估计并计算新的搜索方向,直至满足停止条件为止。
4. 结果分析与可视化:分析优化结果,包括最优解、最优目标值以及迭代过程中的效果。
通过MATLAB的绘图功能,可视化优化过程,观察收敛性和效率。
在实际应用中,BFGS算法的MATLAB实现可以结合特定的优化问题进行定制和调整,以获得最佳的优化效果。
通过在MATLAB中灵活使用BFGS算法,可以解决各类复杂的优化问题,包括机器学习模型训练、参数估计、信号处理等领域的实际应用问题。
总结来说,BFGS算法在MATLAB中的应用是一项重要而又复杂的工作,需要对优化问题和算法本身有深入的理解和应用经验。
第九讲 最优化问题的MATLAB求解
得:x = 0.6111 -0.3055 可事先绘制图像,来获得初始搜索点。 可事先绘制图像,来获得初始搜索点。首先较为随意 地给出一个绘图区域: 地给出一个绘图区域: >>x=0:0.2:5;y=0:0.2:5;[xx,yy]=meshgrid(x,y); >>zz=(xx.^2-2*xx).*exp(-xx.^2-yy.^2-xx.*yy);mesh(xx,yx —— 自变量,是由若干分量组成的列向量; 自变量,是由若干分量组成的列向量; f —— x的各分量前的系数构成的向量; 的各分量前的系数构成的向量; 的各分量前的系数构成的向量 f﹒x —— 目标函数(即求该函数的最小值),是 f 与 x 目标函数(即求该函数的最小值), ),是 ﹒ 的数量积。 数量积。
0.2
0
-0.2
-0.4
-0.6 6 4 2 0 1 0 3 2 5 4
根据上图,重新确定一个更为合理的绘图区域: 根据上图,重新确定一个更为合理的绘图区域: >>x=-3:0.2:3;y=-3:0.2:3;[xx,yy]=meshgrid(x,y); >>zz=(xx.^2-2*xx).*exp(-xx.^2-yy.^2-xx.*yy);mesh(xx,yy,zz)
反映求解过程中的迭代次数等信息 该值若为正,说明求解成功, 该值若为正,说明求解成功,否则表明求解 出现问题。 出现问题。 目标函数的最优解 求解结果(令目标函数取得最优解的 ) 求解结果(令目标函数取得最优解的x)
最简形式: 最简形式: x=linprog (f, A,B,C,D, xm, xM, x0) 注意:各参数的参数名可以变, 注意:各参数的参数名可以变,但位置必须 跟上述格式对牢。若相应的约束不存在, 跟上述格式对牢。若相应的约束不存在,应该用 空矩阵[ 占位 占位。 空矩阵 ]占位。 由于输入变量较多且往往较复杂, 由于输入变量较多且往往较复杂,一般需事 先定义。 先定义。
利用MATLAB求解无约束优化问题 ppt课件
[3] fminunc为中型优化算法的步长一维搜索提供了两种算法,
由options中参数LineSearchType控制:
LineSearchType=’quadcubic’(缺省值),
混合的二次和三次多项式插值;
LineSearchType=’cubicpoly’,三次多项式插值
利用MATLAB求解无约束
优化问题
3
例1 min f(x)=(4x12+2x22+4x1x2+2x2+1)*ex1
1、编写M-文件 fun.m: function f = fun (x) f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
2、输入M文件wliti.m如下: x0 = [-1, 1]; x=fminunc(‘fun’,x0); y=fun(x)
[2] fminunc为中型优化算法的搜索方向提供了3种算法,
由 options中的参数HessUpdate控制: HessUpdate=’bfgs’(默认值),拟牛顿法的BFGS公式; HessUpdate=’dfp’,拟牛顿法的DFP公式; HessUpdate=’steepdesc’,最速下降法
利用MATLAB求解无约束优化问题
matlab解多元函数无约束优化问题
标准型为:min F(X)
命令格式为: [x,fval,exitflag,output]= fminunc(fun, x0 ,options);
或 [x,fval,exitflag,output]= fminsearch(fun, x0 ,options);
(3)比较各种算法主程序compare.m
用Matlab解无约束优化问题
返回
用Matlab解无约束优化问题
1. 一元函数无约束优化问题:
min f(x)
x1 ≤ x ≤ x 2
常用格式如下: (1)x= fminbnd (fun,x1,x2) (2)x= fminbnd (fun,x1,x2 ,options) (3)[x,fval]= fminbnd(...) (4)[x,fval,exitflag]= fminbnd(...) (5)[x,fval,exitflag,output]= fminbnd(...) 其中(3)、(4)、(5)的等式右边可选用(1)或 (2)的等式右边。 函数fminbnd的算法基于黄金分割法和二次插值法,它 要求目标函数必须是连续函数,并可能只给出局部最优 解。
fval
exitflag
output
所
Options中常用的几个参数的名称、含义、取值如下:
(1) Display: 显示水平.取值为’off’时,不显示输出; 取值为’iter’时,显示每次迭代的信息;取值为’final’时, 显示最终结果.默认值为’final’. (2) MaxFunEvals: 允许进行函数评价的最大次数,取 值为正整数. (3) MaxIter: 允许进行迭代的最大次数,取值为正整数.
3. 优化函数的输出变量下表:
变量 x 描 述 由优化函数求得的值.若exitflag>0,则x 为解;否则,x不是最终解,它只是迭代制止 时优化过程的值 解x处的目标函数值 描述退出条件: exitflag>0,表目标函数收敛于解x处 exitflag=0,表已达到函数评价或迭代 的最大次数 exitflag<0,表目标函数不收敛 包含优化结果信息的输出结构. Iterations:迭代次数 Algorithm:所采用的算法 FuncCount:函数评价次数 调用函数 所有优化函数 linprog,quadprog,fgoalattain, fmincon,fminimax,lsqcurvefit, lsqnonlin, fminbnd
工程计算MATLAB_优化设计_方法函数无约束最优化
(2)梯度法 在函数的导数可求的情况下,梯度法是一种更 优的方法。 常见的梯度法有最速下降法、Newton法、 Marquart法、共轭梯度法和拟牛顿法(QuasiNewton method)等。 在所有这些方法中,用的最多的是拟牛顿法
33/45
5.2 无约束最优化问题
5.2 无约束最优化问题
5.2.2 单变量最小化问题 2. 相关函数
(1)fminbnd 功能:找到固定区间内单变量函数的最小值。 语法: [x,fval] = fminbnd(...) 返回解x处目标函数的值。 [x,fval,exitflag] = fminbnd(...) 返回exitflag值描述fminbnd函数的退出条件。 [x,fval,exitflag,output] = fminbnd(...) 返回包含优化信息的结构输出。
13/45
5.1 优化函数
5.1.3 @(函数句柄)函数
>> x=0:0.001:1; >> y=humps(x); >> plot(x,y); >> .1.3 @(函数句柄)函数
>> x=fminbnd(@humps,0.3,1) x= 0.6370
15/45
28/45
2. 相关函数
5.2 无约束最优化问题
5.2.2 单变量最小化问题 2. 相关函数
(2)实例 例1:在区间(0,2π)上求函数sin(x)的最小值
>> x=fminbnd(@sin,0,2*pi)
x= 4.7124 >> y=sin(x) y= -1.0000
29/45
5.2 无约束最优化问题
Matlab7最优化问题求解
Matlab 最优化问题求解i. 无约束最优化问题无约束最优化问题一般描述为:min Kx)~~'I其中X jX ]怎严叫J ,该数学表示的含义是求一组 x ,使得目标函数 f(x)最小.这种问题也称为最小化问题Matlab 中提供了 3个求最小值的函数,调用格式为:• [x,fval]=fmi nbn d(@fname,x1,x2,options) 的极小值点x 和极小值fval ;• [x,fval]=fm in search(@fname,xO,options) 极小值点x 和极小值fval ;• [x,fval]=fmi nun c(@fname,xO,options) 点x 和极小值fval.:求一元函数在(x1,x2) 区间中:基于单纯形算法求多元函数的:基于拟牛顿法求多元函数的极小值量x1,x2 分别是研究区间的左右边界;fminsearch 和fminunc 的输入变量x0是-个向量,表示极值点的初值 .optio ns为优化参数,可以通过 optimset 函数来设置,当目标函数的阶数大于 2时,使用fminunc 比fminsearch 更有效;但是目标函数高 度不连续时,使用fminsearch 函数效果更好.Matlab 中没有专门求最大值的函数,只要 -f(x) 在(a,b) 上的最小值就是 f(x)在(a,b)上最大值的相反数.因此用fminbnd(-f,x1,x2)返回函数f(x)在(x1,x2) 上的最大值的相反数•例如:求函数■'x -,x 〔在区间[0,5]fun cti on fx=mymi n(x)fx=x.A 3-2*x-5;[x,fval]=fmi nbn d(@mymi n,0,5) x = 0.8165 fval = -6.0887因此极小值点为 x=0.8165 ,极小值为-6.0887例如:设22 寸y z ZIbf.y.z) = x + — + —- 了 4K y z求函数 f(x,y,z) 在(0.5,0.5,0.5)fun cti on f=fxyz(p)X=p(1);这里讨论的是局域极值问题,fname 是定义函数 m 文件的文件名, fminbnd的输入变内的极小值和极小值点附近的最小值y=p (2);z=p (3); f=x+y A2/4/x+z A2/y+2 /z;[U,mi n]=fmi nsearch(@mymi n,[0.5,0.5,0.5])U =0.5000 1.0000 1.0000min =4.00002. 有约束最优化问题求解有约束最优化问题一般描述为:mill心)x Gp<) < 0其中P-I该数学表示的含义是求一组X,使得目标函数f(x)最小,且满足约束条件G(x)小于或等于0.这种问题也称为最小化问题.2.1约束条件分类•线性不等式约束:' -■•线性等式约束:匕川-讪•非线性不等式约束:•非线性等式约束:= 0• x的上界和下界:百^b>idMatlab 提供了fmincon 函数,用于求解各种约束下的最优解问题,调用格式为:[x,fval]=fm incon(@fn ame,x0,A,b,Aeq,beq,Lb nd,Ub nd,N onf ,opti ons)X,fname,fval,x0 和options 含义与求最小值函数相同,其余参数为约束条件,参数NonF为非线性约束函数的M文件名,如果该约束不存在则用空矩阵表示例如:求解有约束最优化问题f 2 2 1 3min f(x) = 0.4X2 + x14- - x(x2+ 岂亍]x1 + 0 .Ex., > 0.405x( f 0.5x1 > 0 卷 > 0fun cti on f=fop(x)f=0.4*x (2)+x(1)A2+x (2)A2-x(1)*x(2)+1/30*x(1)A3;-1.0000 -0.5000 -0.5000 -1.0000 b b = -0.4000 -0.5000 lb lb = 0 0 x0 x0 = 0.5000 0.5000[x,f]=fmi neon (@fop,x0,A,b,[],[],lb,[],[],optio ns) x = 0.3400 0.3300 f =0.2456注意线性不等式约束全部是小于号, 如果出现大于号要将不等式两端取相反数转换成小于号再列写A ,b 矩阵.rtiinV =bKlLbnd < Ubml Matlab 中求解线性规划问题的函数是lin prog[x,fval]=li nprog(f,A,b,Aeq,beq,Lb nd,Ub nd)其中x 是最优解,fval 是目标函数的最优值.函数中各项参数是线性规划问题标准形式中的 对应项,x,b,beq,Lbnd,Ubnd是向量,Aeq,A 是矩阵,f 为目标函数的系数向量例如:求解线性规划问题 mln —+ Xj3^ > 3x乩口 + 3叫芒61 Xj > > 0f=[2;1];A=[-3,-1;-4,-3;-1,-2]; b=[-3;-6;-2]; lb=[O;O];optio ns=optimset('Display','off'); [x,f]=li nprog(f,A,b,[],[],lb,[]) Optimization terminated.3.线性规划问题求解 线性规划问题的标准形式是:A s t.,调用格式为:x =0.60001.20002.40004. 详细介绍用matlab优化工具箱解无约束优化问题控制参数的设置控制参数options 包含了优化程序中控制精度要求、输出形式、算法选择、迭代次数等Optio ns 中常用的几个参数的含义如下:•Display: 显示水平.取值为’off '时不显示输出;取值为’iter '时显示每次迭代的信息;取值为’final '时,显示最终结果,默认值为’final '.•MaxFu nEvals: 允许进行函数评价的最大次数,取值为正整数•MaxIter: 允许进行迭代的最大次数,取值为正整数控制参数options 可以由optimset 函数创建或修改:•options=optimset( optimfun ')创建一个含有所有参数名,并与优化函数optimfu n 相关的默认值的选项结构optio ns.•options=optimset( paraml ' ,value1, ' param2 ' ,value2 ••)创建一个名称为options 的优化选项参数,其中指定的参数具有指定值,所有未指定的参数取默认值.•options=optimset(oldops, ' paraml ' ,value1, ' param2 ' ,value2 ••)创建一个名称为oldops的参数的拷贝,用指定的参数值修改ildops 中的相应参数.4.3用matlab工具箱求解无约束优化问题4.3.1 一元函数的无约束优化问题解一元函数的无约束优化问题:min l(x)沟使用的函数是fminbnd ,其常用格式:•x=fm inbn d(@fname,x1,x2)•x=fmi nbn d(@fname,x1,x2,optio ns)•[x,fval]=fmi nbn d(@fname,x1,x2,optio ns)•[x,fval,exitflag]=fmi nbn d(@fname,x1,x2,optio ns)•[x,fval,exitflag,output]=fm inbn d(@fname,x1,x2,opti ons)Fminbnd算法基于黄金分割法和二次插值法,要求目标函数必须是连续函数,并可能给出局部最优解.例如:求函数:八山」在0<x<8区间内的最大值和最小值fun cti on fx=fun(x)fx=2*exp(-x).*s in (x);[xmi n,y mi n]=fmi nbn d(@fu n,0,8)xmin =3.9270ymin =-0.0279fun cti on fx=fun(x)fx=-2*exp(-x).*s in (x);[x,fval]=fmi nbn d(@fu n, 0,8);xmax=x; ymax=abs(fval); xmax xmax =0.7854ymaxymax =0.6448432多元函数的无约束优化问题多元函数无约束最小化问题的标准型为:minF(X)其中X 为n 维变元向量.可以使用fminunc 函数或fminsearch 函数.调用格式为:• x =fm inunc(fun, xO)/x=fmin search(fu n, xO)• x =fmi nun c(fun ,x0,optio ns)/x=fmi nsearch(fu n,x0,optio ns) • [x,fval]=fmi nun c(fun ,x0,optio ns)/[x,fval]=fmi nsearch(fu n,x0,optio ns)• [x,fval,exitflag]=fmi nun c(fu n,x0,optio ns)/[x,fval,exitflag]=fmi nsearch(fu n,x0,optio ns)• [x,fval,exitflag,output]=fm inunc(fun, x0,opti on s)/[x,fval,exitflag,output]=fm in search(fu n, x0,opti ons)注意:fminsearch以单纯的形法寻最优值,fminunc 的算法受options参数控制:•fminunc 为无约束优化提供了大型优化算法和中型优化算法,由optio ns 的LargeScale 控制:LargeScale= ' on '(默认),使用大型算法 LargeScale= 'off ',使用中型算法 •fminunc 为中型优化算法的搜索方向提供了4种算法,由options 的HessUpdate控制:HessUpdate= ' bfgs '(默认),拟牛顿法的 BFGS 公式HessUpdate= ' dfp ',拟牛顿法的DFP 公式 HessUpdate= ' steepdesc ',最速下降法•fminunc 为中型优化算法的步长一维搜索提供了2种算法,由options 的Lin eSearchType 控制: LineSearchType= ' quadcubic '(缺省值),混合的二次和三次多项式插值 LineSearchType=' cubicpoly',三次多项式插值min =(4# + 2Xj + 4巧勺 + 2x 2 + 1 je 1编写m 文件:fun cti on f=fun 1(x)f=exp(x(1))*(4*x(1)A 2+2*x (2) A 2+4*x(1)*x (2)+2*x(2)+1);编写m 文件:x0=[-1,1];is例如:求x=fm inunc( 'funl' ,xO); y=fu n1(x);执行结果:0.5000 -1.0000yy =3.6609e-015例如:Rose nock函数-,用不同算法算出其数值最优解,初值选为』V',为直观表示Rosenbrock 函数的图像,制作如下指令m文件输出Rosenbrock 函数的图像.[x,y]=meshgrid(-2:0.1:2,-1:0.1:3);z=100*(y-x.A2).A2+(1-x).A2;surf(x,y,z)con tour(x,y,z,20)hold onplot(-1.2,2, 'o');text(-1.2,2, 'start poi nt' );plot(1,1, 'o');text(1,1, 'solutio n' )制作Rose nbrock 函数的等高线图,编写如下M文件_■执行结果:fun2 f =100*(x(2)-x(1)A2)A2+(1-x(1))A2 x =1.9151e-010exitflag =1 output =iteratio ns: 108 fun cCou nt: 202algorithm: 'Nelder-Mead simplex direct search' message: [1x196 char] (2)使用fminunc 函数用3种搜索方向(BFGSQFP 和最速下降法)及两种步长搜索(混合二、三次插值和三 次插值) 先建立函数文件:fun cti on f=fun 2(x)f=100*(x (2)-x(1)A2)A2+(1-x(1))A2;编写主函数文件:%fmi nunc 函数缺省选项1.0000 fval =1.0000(1)使用 fminsearch函数编写m 文件如下:f= '100*(x (2)-x(1)A 2)A 2+(1-x(1))A 2' [x,fval,exitflag,output]=fmi nsearch(f,[-1.2 2])oldoptions=optimset( 'fminunc' ); %采用中型优化算法options=optimset(oldoptions, 'LargeScale' %DFF 法、混合二、三次插值 options11=optimset(options,'HessUpdate'[x11,fval11,exitflag11,output11]=fminunc( 2],options11);%DFP 法、三次插值options12=optimset(options, 'HessUpdate' 'cubicpoly' ); [x12,fval12,exitflag12,output12]=fminunc( 2],options12);%BFGS 法、混合二、三次插值options13=optimset(options, 'HessUpdate'[x13,fval13,exitflag13,output13]=fminunc( 2],options13); %BFGS 法、三次插值options14=optimset(options, 'HessUpdate' , 'cubicpoly' ); [x14,fval14,exitflag14,output14]=fminunc( 2],options14); %最速下降法、混合二、三次插值options15=optimset(options, 'HessUpdate'[x15,fval15,exitflag15,output15]=fminunc( 2],options15); %最速下降法、混合二、三次插值迭代次数8000options16=optimset(options, 'HessUpdate' 000, 'MaxFunEvals' ,8000);[x16,fval16,exitflag16,output16]=fminunc( 2],options16); %最速下降法、混合二、三次插值迭代次数9000options17=optimset(options, 'HessUpdate' 000, 'MaxFunEvals' ,9000);[x17,fval17,exitflag17,output17]=fminunc( 2],options17)调用结果:x11 =-0.7476 0.5334 fval11 =3.1189 exitflag11 = 0 output11 =iterations: 60funcCount: 201 stepsize: 11.4698 firstorderopt: 11.1142algorithm: 'medium-scale: Quasi-Newton line search' message: [1x143 char] x12 =, 'off' ); , 'dfp' ); 'fun2',[-1.2, 'dfp' , 'lineSearchType','fun2',[-1.2, 'bfgs' ); 'fun2',[-1.2, 'bfgs' , 'LineSearchType' 'fun2',[-1.2, 'steepdesc' );'fun2',[-1.2, 'steepdesc', 'MaxIter' ,8'fun2',[-1.2, 'steepdesc', 'MaxIter',9'fun2',[-1.2-0.7476 0.5334 fval12 =3.1189 exitflag12 =0 output12 =iterations: 60funcCount: 201 stepsize: 11.4698 firstorderopt: 11.1142algorithm: 'medium-scale: Quasi-Newton line search' message: [1x143 char] x13 =1.0000 1.0000 fval13 =2.0352e-011 exitflag13 =1 output13 =iterations: 39funcCount: 144 stepsize: 1 firstorderopt: 4.6220e-007algorithm: 'medium-scale: Quasi-Newton line search' message: [1x440 char]x14 =1.0000 1.0000 fval14 =2.0352e-011exitflag14 =1 output14 =iterations: 39 funcCount: 144 stepsize: 1 firstorderopt: 4.6220e-007 algorithm: 'medium-scale: Quasi-Newton line search' message: [1x440 char]x15 =1.1169 1.2482 fval15 =0.0137 exitflag15 =0 output15 =iterations: 17funcCount: 201stepsize: 0.0018firstorderopt: 0.1287algorithm: 'medium-scale: Quasi-Newton line search' message: [1x143 char]x16 =1.0796 1.1660 fval16 =0.0064 exitflag16 = output16 =iterations: 667 funcCount: 8001stepsize: 0.0018firstorderopt: 0.0900algorithm: 'medium-scale: Quasi-Newt on line search' message: [1x144 char]x17 =1.0757 1.1572fval17 =0.0057exitflag17 =output17 =iterati ons: 750funcCount: 9000stepsize: 0.0017firstorderopt: 0.0826algorithm: 'medium-scale: Quasi-Newt on line search' message: [1x144 char] 由上述结果可以得到:Rose nbrock 函数不同算法的计算结果详解工具箱解非线性规划5.1 二次规划二次规划的标准型为:matlab 中提供了 quadprog函数求解二次规划问题.其调用格式为:• x=quadprog(H,C,A,b)• x=quadprog(H,C,A,b,Aeq,beq) • x=quadprog(H,C,A,b,Aeq,beq,vlb,vub) • x=quadprog(H,C,A,b,Aeq,beq,vlb,vub,X0)• x= quadprog(H,C,A,b,Aeq,beq,vlb,vub,XO,opti ons) • [x,fval]= quadprog(H,C,A,b,Aeq,beq,vlb,vub,X0,opti ons) • [x,fval,exitflag]=quadprog(H,C,A,b,Aeq,beq,vlb,vub,X0,opti ons)• [x,fval,exitflag,output]=quadprog(H,C,A,b,Aeq,beq,vlb,vub,X0,opti ons)mln (xpX^) = - ZX] - + xj -2x )x 2 + ZxJH=[1,-1;-1,2]; c=[-2;-6]; A=[1,1;-1,2]; b=[2;2]; vlb=[0;0];[x,z]=quadprog(H,c ,A, b,[],[],vlb,[])Optimizati on term in ated. x =0.6667 1.3333 z =-8.2222X 为n 维变元向量,G(X)和Ceq(X)都是非线性函数组成的向量,其他变量的含义例如:求5.2非线性规划的解法非线性规划的标准型为:min F(X)f AX<hylb < X < vub与线性规划和二次规划相同.用matlab解决问题的步骤为:-1- 建立M文件fun.m定义目标函数F(X)Fun cti on f=fun(X)F=F(X) -2-若约束条件中有非线性约束:冬0或唧“ =0,需要建立Ml文件nonlcon.m定义函数和Fun ctio n [G,Ceq]=nonlcon(X)G=''Ceq='';-3- 建立主程序,非线性规划求解的函数是fmin con ,命令的基本格式如下:X=fmincon( f un ' ,X0,A,b, Aeq,beq,vlb,vub, ' nonIcon ' ,options)红色的部分如果没有则使用空矩阵[]替代•Fmineon函数提供了大型优化算法,默认值在fun函数中提供了梯度(options 参数的GradObj设置’on '),并且只有上下界存在或只有等式约束,fmincon 将选择大型算法,既有等式约束也有梯度约束时使用中型算法Fmineon可能会给出局部最优解,其与X0的值有关系.例如:求1 212 mln f= 一巧一2勺+ .产]+f2x t+ 3x2< 6st. + 4x2<;5> 0先建立函数文件:fun cti on f=fu n4(x)f=-x(1)-2*x( 2)+(1 /2)*x(1)A2+(1 /2)*x(2)A2;x0=[1;1];A=[2,3;1,4];b=[6;5];vlb=[0;0];[x,fval]=fmi neon (@fu n4,x0,A,b,[],[],vlb,[])0.76471.0588fval =-2.0294例如求1X t4- X3= 054 -巧-JC/0-x y x2- 10 < 0先建立函数文件fun5.mfun cti on f=fu n5(x)f=exp(x(1))*(4*x(1f2+2*x (2) A2+4*x(1)*x (2)+2*x(2)+1);再建立m文件mycon 1.m定义非线性约束fun cti on [g,ceq]=myc on 1(x)g=[x(1)+x (2) ;1.5+x(1)*x (2)-x(1)-x (2) ;-x(1)*x (2)-10];ceq=[x(1)+x (2);[];[]];建立主函数m文件youh3.m进行函数fmincon 调用x0=[-1;1];A=[],b=[];Aeq=[1 1];beq=[0];VLB=[],VUB=[];[x,fval]=fmi ncon( 'fun 5' ,x0,A,b,Aeq,beq,VLB,VUB, 'myc on1' ) 结果-1.22471.2247fval =1.8951例如求min f = - | - X2必的=25-斗承0乩t«二7 - JT]+JC:A 00 < < 5,0 < Jt2< 10先建立函数文件fun 6.mfun cti on f=fu n6(x)f=-2*x(1)-x(2);再建立非线性约束条件文件myco n2.mfun cti on [g,ceq]=myc on 2(x)g=[x(1F2+x (2) A2-25;x(1)A2-x (2) A2-7;[]];ceq=[x(1F2+x(2)A2-25;x(1F2-x (2)人2-7;[]];再建立主函数m文件youh2.m调用fmincon 函数x0=[3;2.5];VLB=[0 0];VUB=[5 10];[x,fval,exitflag,output]=fmincon( 'fun6',x0,[],[],[],[],VLB,VUB , 'mycon2' )执行结果:x =4.00003.0000fval =-11.0000exitflag =1output =iterations: 4funcCount: 15lssteplength: 1stepsize: 1.3880e-006algorithm: 'medium-scale: SQP, Quasi-Newton,line-search'firstorderopt: 7.5563e-008constrviolation: 2.0002e-012message: [1x788 char]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八 无约束优化问题一.实验目的掌握应用matlab 求解无约束最优化问题的方法二.实验原理及方法1:标准形式:元函数为其中n R R f X f nR x n→∈:)(min2.无约束优化问题的基本算法一.最速下降法(共轭梯度法)算法步骤:⑴ 给定初始点n E X ∈0,允许误差0>ε,令k=0;⑵ 计算()k X f ∇;⑶ 检验是否满足收敛性的判别准则:()ε≤∇k X f ,若满足,则停止迭代,得点k X X ≈*,否则进行⑷; ⑷ 令()k k X f S -∇=,从k X 出发,沿k S 进行一维搜索, 即求k λ使得: ()()k k k k k S X f S X f λλλ+=+≥0min ;⑸ 令k k k k S X X λ+=+1,k=k+1返回⑵.最速下降法是一种最基本的算法,它在最优化方法中占有重要地位.最速下降法的优点是工作量小,存储变量较少,初始点要求不高;缺点是收敛慢,最速下降法适用于寻优过程的前期迭代或作为间插步骤,当接近极值点时,宜选用别种收敛快的算法..牛顿法算法步骤:(1) 选定初始点n E X ∈0,给定允许误差0>ε,令k=0; (2) 求()k X f ∇,()()12-∇kX f ,检验:若()ε<∇k X f ,则停止迭代,k X X ≈*.否则, 转向(3); (3) 令 ()()k k k X f X f S ∇∇-=-12][(牛顿方向); (4) k k k S X X +=+1,1+=k k ,转回(2).如果f 是对称正定矩阵A 的二次函数,则用牛顿法经过一次迭代 就可达到最优点,如不是二次函数,则牛顿法不能一步达到极值点, 但由于这种函数在极值点附近和二次函数很近似,因此牛顿法的收 敛速度还是很快的.牛顿法的收敛速度虽然较快,但要求Hessian 矩阵要可逆,要计算二阶导数和逆矩阵,就加大了计算机计算量和存储量. 三.拟牛顿法:为克服牛顿法的缺点,同时保持较快收敛速度的优点,利用第k 步 和第k+1步得到的k X ,1+k X ,)(k X f ∇,)(1+∇k X f ,构造一个正定 矩阵1+k G 近似代替)(2k X f ∇,或用1+k H 近似代替12))((-∇k X f ,将牛顿方向改为: 1+k G1+k S =-)(1+∇k X f ,1+k S =-1+k H )(1+∇k X f从而得到下降方向.通常采用迭代法计算1+k G ,1+k H ,迭代公式为:BFGS (Boryden-Fletcher-Goldfarb-Shanno )公式 kk T k kT k k k k T k T k k kk x G x G x x G x f f f G G ∆∆∆∆-∆∆∆∆+=+)()()()(1k T k T k k kT k kk T k k k x f x x x f f H f H H∆∆∆∆⎪⎪⎭⎫ ⎝⎛∆∆∆∆++=+)()()()(11kT k Tk k k k T k k xf x f H H f x ∆∆∆∆-∆∆-)()()( DFP (Davidon-Fletcher-Powell )公式:k T k Tk k k T k k k T k kk X f f f f X X G X G G ∆∆∆∆⎪⎪⎭⎫ ⎝⎛∆∆∆∆++=+)()()()(11kT k Tk k k k T k k fX f X G G X f ∆∆∆∆-∆∆-)()()( kk T k kT k k k k T k T k k kk f H f H f f H X f X X H H∆∆∆∆-∆∆∆∆+=+)()()()(1计算时可置I H =1(单位阵),对于给出的1X 利用上面的公式进行递推.这种方法称为拟牛顿法.3.Matlab 优化工具箱简介1. MATLAB 求解优化问题的主要函数2. 优化函数的输入变量4.控制参数options的设置Options中常用的几个参数的名称、含义、取值如下:(1) Display: 显示水平.取值为’off’时,不显示输出; 取值为’iter’时,显示每次迭代的信息;取值为’final’时,显示最终结果.默认值为’final’.(2) MaxFunEvals: 允许进行函数评价的最大次数,取值为正整数.(3) MaxIter: 允许进行迭代的最大次数,取值为正整数.控制参数options可以通过函数optimset创建或修改。
命令的格式如下:控制参数options可以通过函数optimset创建或修改。
命令的格式如下:(1) options=optimset(‘optimfun’)创建一个含有所有参数名,并与优化函数optimfun相关的默认值的选项结构options.(2)options=optimset(‘param1’,value1,’param2’,value2,...)创建一个名称为options的优化选项参数,其中指定的参数具有指定值,所有未指定的参数取默认值.(3)options=optimset(oldops,‘param1’,value1,’param2’,value2,...)创建名称为oldops的参数的拷贝,用指定的参数值修改oldops中相应的参数.例:opts=optimset(‘Display ’,’iter ’,’TolFun ’,1e-8)该语句创建一个称为opts 的优化选项结构,其中显示参数设为’iter ’, TolFun 参数设为1e-8.4.用Matlab 解无约束优化问题1. 一元函数无约束优化问题: min f (x ) 21x x x ≤≤ 常用格式如下:(1)x= fminbnd (fun,x 1,x 2) (2)x= fminbnd (fun,x 1,x 2 ,options)(3)[x ,fval]= fminbnd (...)(4)[x ,fval ,exitflag]= fminbnd (...)(5)[x ,fval ,exitflag ,output]= fminbnd (...)其中(3)、(4)、(5)的等式右边可选用(1)或(2)的等式右边。
函数fminbnd 的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优解。
例1 求 f = 2x e xsin -在0<x<8中的最小值与最大值 主程序为wliti1.m: f='2*exp(-x).*sin(x)'; fplot(f,[0,8]); %作图语句 [xmin,ymin]=fminbnd (f, 0,8) f1='-2*exp(-x).*sin(x)';[xmax,ymax]=fminbnd (f1, 0,8) 运行结果:xmin = 3.9270 ymin = -0.0279 xmax = 0.7854 ymax = 0.6448例2 对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如 何剪法使水槽的容积最大?先编写M 文件fun0.m 如下: function f=fun0(x) f=-(3-2*x).^2*x;主程序为wliti2.m:[x,fval]=fminbnd('fun0',0,1.5); xmax=xfmax=-fval 运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米.2、多元函数无约束优化问题标准型为:min F(X)命令格式为:(1)x= fminunc (fun,X 0 );或x=fminsearch (fun,X 0 ) (2)x= fminunc (fun,X 0 ,options );或x=fminsearch (fun,X 0 ,options )(3)[x ,fval]= fminunc (...);或[x ,fval]= fminsearch (...)设剪去的正方形的边长为x ,则水槽的容积为:x x )23(2- 建立无约束优化模型为:min y=-x x )23(2-, 0<x<1.5解:(4)[x,fval,exitflag]= fminunc(...);或[x,fval,exitflag]= fminsearch(5)[x,fval,exitflag,output]= fminunc(...);或[x,fval,exitflag,output]= fminsearch(...)说明:fminsearch是用单纯形法寻优. fminunc的算法见以下几点说明:[1] fminunc为无约束优化提供了大型优化和中型优化算法。
由options中的参数LargeScale控制:LargeScale=’on’(默认值),使用大型算法LargeScale=’off’(默认值),使用中型算法[2] fminunc为中型优化算法的搜索方向提供了4种算法,由options中的参数HessUpdate控制:HessUpdate=’bfgs’(默认值),拟牛顿法的BFGS公式;HessUpdate=’dfp’,拟牛顿法的DFP公式;HessUpdate=’steepdesc’,最速下降法[3] fminunc为中型优化算法的步长一维搜索提供了两种算法,由options中参数LineSearchType控制:LineSearchType=’quadcubic’(缺省值),混合的二次和三次多项式插值;LineSearchType=’cubicpoly’,三次多项式插使用fminunc和 fminsearch可能会得到局部最优解.例3 min f(x)=(4x12+2x22+4x1x2+2x2+1)*exp(x1)1、编写M-文件 fun1.m: function f= fun1 (x)f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);2、输入M文件wliti3.m如下:x0 = [-1, 1];x=fminunc(‘fun1’,x0);y=fun1(x)3、运行结果:x= 0.5000 -1.0000y = 1.3029e-10例4.Rosenbrock 函数 f(x1,x2)=100(x2-x12)2+(1-x1)2的最优解(极小)为x*=(1,1),极小值为f*=0.试用不同算法(搜索方向和步长搜索)求数值最优解.初值选为x0=(-1.2 , 21.为获得直观认识,先画出Rosenbrock 函数的三维图形,输入以下命令:[x,y]=meshgrid(-2:0.1:2,-1:0.1:3);z=100*(y-x.^2).^2+(1-x).^2;mesh(x,y,z)2. 画出Rosenbrock 函数的等高线图,输入命令:contour(x,y,z,20)hold onplot(-1.2,2,' o ');text(-1.2,2,'start point')plot(1,1,'o')text(1,1,'solution')3.用fminsearch 函数求解输入命令: f='100*(x(2)-x(1)^2)^2+(1-x(1))^2'; [x,fval,exitflag,output]=fminsearch(f, [-1.2 2]) 运行结果: x =1.0000 1.0000 fval =1.9151e-010 exitflag = 1 output = iterations: 108 funcCount: 202algorithm: 'Nelder-Mead simplex direct search三.实验内容1. 求下列函数的极小点:1) ()2123222118294x x x x x X f +-++=;2) ()212122212223x x x x x x X f -+-+=;3) ()()224121+-=x X f . 第1),2)题的初始点可任意选取, 第3)题的初始点取为()T X 1,00=.2. 梯子长度问题一楼房的后面是一个很大的花园. 在花园中 紧靠着楼房有一个温室,温室伸入花园2m,高3m, 温室正上方是楼房的窗台. 清洁工打扫窗台周围,他得用梯子越过温室,一头放在花园中,一头 靠在楼房的墙上. 因为温室是不能承受 a 梯子压力的,所以梯子太短是不行的.现清洁工只有一架7m 长的梯子, b 你认为它能达到要求吗? 能 满足要求的梯子的最小 长度为多少?。