当前位置:
文档之家› 最优化问题的MATLAB求解
最优化问题的MATLAB求解
2
T
基本函数名 x=fminbnd(‘F’,x1,x2) X=fminunc(‘F’,X0) X=fminsearch(‘F’,X0) X=linprog(c,A,b) X=quadprog(H,c,A,b) X=fmincon(‘FG’,X0) X=fgoalattain(‘F’,x,goal,w) X=fminimax(‘FG’,x0)
Matlab 最优化工具箱
Name : E-mail:
曾泰山 zengtsh@
最优化问题的一般算法
最优化问题的一般数学模型
s.t.
h ( x) = 0 i
m f ( x) in i = 1,2,L m , j = 1,2,Lp (P)
gj (x) ≥ 0
局部最优解
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 2 − y 2 − xy
(局部)最 局部)
>>x=fminsearch('(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))',[1,1])
格式2 首先编写M-函数文件如下 函数文件如下: 格式 —— 首先编写 函数文件如下: function y=ff2(x) y= (x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2)); 之后在命令窗口输入命令: 之后在命令窗口输入命令:>> x=fminsearch('ff2',[1,1]) 格式3 格式 —— 使用内联函数 >> g=inline('(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))', 'x'); >> x=fminsearch(g,[1,1])
点列{ xk }的产生,通常采取两步完成:
1 在可行域内 xk 点处求一个方向 pk , 称这个方向 为下降方向或搜索方向;
2 以 xk 为出发点,作射线 xk + α pk ,其中α > 0 , 在 此 射 线 上 求 一 点 xk +1 , xk +1 = xk + α k pk , 使 得 f ( xk +1 ) < f ( xk ) ,其中α k 称为步长。
1.5 1 0.5 0 -0.5 -1 5 4 0 -2 -5 -4 2 0
1.5
1
0.5
0
通过改变观察视角, 通过改变观察视角, 可以看出极小值点的横纵 坐标的大致值。 坐标的大致值。
-0.5
-1 5 0 y -5 -3 -2 -1 x 0 1
1.5
2 3
1
0.5
0
-0.5 0 5 0 y -5
最优化问题的求解
一、无约束最优化问题求解
问题的描述: 问题的描述:求 m f (x] —— 最优化变量 f ( x) —— 目标函数
的值, 该求解问题就是要求取 x 的值,使目标函数 f ( x)为最 为最 的最小值。 小。即求函数 f ( x)的最小值。 的最小值 除满足函数定义域的要求外,对自变量 无其他约束条 除满足函数定义域的要求外,对自变量x无其他约束条 因此称为无约束最优化问题。 件。因此称为无约束最优化问题。
局部)最小值点。 例1:求一元函数 y = ex – x 3 – 4 x2 的(局部)最小值点。 : 格式1 格式 —— >> x=fminsearch('exp(x)-x^3-4*x^2',1) 可使用ezplot 命令作出函数图象来验证上述结果。 命令作出函数图象来验证上述结果。 可使用 与fsolve 的情况类似,由于极值不一定唯一,改变初始 的情况类似,由于极值不一定唯一, 搜索点位置可能会得到不同的结果。 搜索点位置可能会得到不同的结果。 格式2 首先编写M-函数文件如下 函数文件如下: 格式 —— 首先编写 函数文件如下: function y=ff1(x) y=exp(x)-x^3-4*x^2; 之后在命令窗口输入命令: 之后在命令窗口输入命令:>>x=fminsearch('ff1',1) 格式3 格式 —— 使用内联函数 >>g=inline(‘exp(x)-x^3-4*x^2’,’x’); x=fminsearch(g,1)
二次规划 约束极小 (非线性规划) 达到目标问题
s.t. Ax<=b Min F(X) s.t. G(X)<=0 Min r s.t. F(x)-wr<=goal Min max {Fi(x)}
X {Fi(x)}
极小极大问题
s.t. G(x)<=0
工具箱的结构
2. 优化函数的输入变量
使用优化函数或优化工具箱中其它优化函数时, 输入变量见下表:
f(X)
整体最优解
求解( P ) 的基本方法(迭代算法) :
1 给定一个初始可行点 x0 ∈ D ;
2 产生可行点 x1 ,x2 ,…,xk ,…, 记为{ xk };
3 使得或者某个 xk 恰好是问题的一个最优 解,或者该点列{ xk } 收敛到问题的一个最优解 x* 。
下降算法: 在迭代算法中,若 f ( xk +1 ) ≤ f ( xk )
fval
exitflag
output
所有优化函数
模型输入时需要注意的问题
• (1)目标函数最小化 • 优化函数fminbnd、fminsearch、fminunc、fmincon、 fgoalattain、fminmax和lsqnonlin都要求目标函数最小化。 • (2)约束非正 • 优化工具箱要求非线性不等式约束的形式为Ci(x)≤0,通过 对不等式取负可以达到使大于零的约束形式变为小于零的 不等式约束形式的目的。
执行结果: 执行结果: = x 4.6123 结合函数图像来检验初始搜索点的确定是否合理: 结合函数图像来检验初始搜索点的确定是否合理: >> ezplot('exp(x)-x^3-4*x^2',[-10,10])
exp(x)-x 3-4 x 2 2000
从函数图像看, 从函数图像看,如 果初始搜索点改为负数, 果初始搜索点改为负数, 我们可能得到另一个结果。 我们可能得到另一个结果。 如:
命令: 命令:fminsearch 或 fminunc 用于求解无附加条件的极小值点。两命令的语法相同。 用于求解无附加条件的极小值点。两命令的语法相同。 语法: 语法:x=fminsearch(fun,x0)—— 最简形式 ( )
x0 ——向量,指搜索点初值,表示为列向量。x0较难确 向量, 向量 指搜索点初值,表示为列向量。 较难确 参数来把握求解过程的有效性。 定,所以最好使用flag参数来把握求解过程的有效性。 所以最好使用 参数来把握求解过程的有效性 fun —— 用内联函数,或M-函数文件(被引用时必须用 用内联函数, 函数文件( 函数文件 单引号括住函数名),或直接以单引号括起的函数表达 单引号括住函数名),或直接以单引号括起的函数表达 ), 式给出的方程( 式给出的方程(组)。 在求多元函数最值时,需在 的编写过程中将各变量写 在求多元函数最值时,需在fun的编写过程中将各变量写 成一个向量的各分量的形式, 成一个向量的各分量的形式,即x (1), x(2), …,并且方程 , 组要以多行一列的矩阵形式来表示。 组要以多行一列的矩阵形式来表示。
Matlab优化工具箱简介 Matlab优化工具箱简介
1.MATLAB求解优化问题的主要函数 1.MATLAB求解优化问题的主要函数
类 型
一元函数极小 无约束极小 线性规划
模 型 Min F(x)s.t.x1<x<x2 Min F(X) Min c X s.t.AX<=b T T Min 1 x Hx+c x
m in
f ⋅x
x —— 自变量,是由若干分量组成的列向量; 自变量,是由若干分量组成的列向量; f —— x的各分量前的系数构成的向量; 的各分量前的系数构成的向量; 的各分量前的系数构成的向量 f﹒x —— 目标函数(即求该函数的最小值),是 f 与 x 目标函数(即求该函数的最小值), ),是 ﹒ 的数量积。 数量积。
变量 f fun H A,b Aeq,beq vlb,vub X0 x1,x2 options 描 述 线性规划的目标函数f*X 或二次规划的目标函 数X’*H*X+f*X 中线性项的系数向量 非线性优化的目标函数.fun必须为行命令对象 或M文件、嵌入函数、或MEX文件的名称 二次规划的目标函数X’*H*X+f*X 中二次项的系 数矩阵 A矩阵和b向量分别为线性不等式约束: AX ≤ b 中的系数矩阵和右端向量 Aeq矩阵和beq向量分别为线性等式约束: Aeq ⋅ X = beq 中的系数矩阵和右端向量 X的下限和上限向量:vlb≤X≤vub 迭代初始点坐标 函数最小化的区间 优化选项参数结构,定义用于优化函数的参数 调用函数 linprog,quadprog fminbnd,fminsearch,fminunc, fmincon,lsqcurvefit,lsqnonlin, fgoalattain,fminimax quadprog linprog,quadprog,fgoalattain, fmincon, fminimax linprog,quadprog,fgoalattain, fmincon, fminimax linprog,quadprog,fgoalattain, fmincon,fminimax,lsqcurvefit, lsqnonlin 除fminbnd外所有优化函数 fminbnd 所有优化函数