线性规划的matlab实现
初始区间为[a,b]=[-1,1].
[x,fval,exitflag,output]=fminbnd('2*x^2-x-1',-1,1)
x = 0.2500 fval = -1.1250 exitflag = 1 output = iterations: 5 funcCount: 6 algorithm: 'golden section search, parabolic interpolation' message: [1x112 char]
x=fminunc(fun,x0):给定初值x0,求fun函数的局部极小值点x。x0可以是标量、矢量或矩阵. x=fminunc(fun,x0,options):用options参数中指定的优化参数进行最小化。 x=fminunc(fun,x0,options,P1,P2,…):将问题参数P1,P2等直接输给目标函数 fun,将 options参数设置为空矩阵,作为options参数的默认值。 [x,fval]=fminunc(…):将解x处目标函数值返回到fval参数中。 [x,fval,exitflag]=fminunc(…):返回exitflag值,描述函数的退出条件。 [x,fval,exitflag,output]=fminunc(…):返回包含优化信息的结构输出。
无约束非线性最优化问题
用MATLAB优化工具箱解非线性规划
一、无约束非线性最优化问题
1、基本数学原理 求解无约束最优化问题的方法主要有两类,即直接搜索法(Direct search method)和梯度法(Gradient method)。 直接搜索法适用于目标函数高度非线性,没有导数或导数很难计算的 情况。由于实际工作中很多问题都是非线性的,故直接搜索法不失为一种 有效的解决办法。常用的直接搜索法为单纯形法,此外还有Hooke-Jeeves 搜索法、Pavell共轭方向法等,其缺点是收敛速度慢。 在函数的导数可求的情况下,梯度法是一种更优的方法。该法利用函 数的梯度(一阶导数)和Hess(二阶导数)构造算法,可以获得更快的收 敛速度。函数 的负梯度方向 即反映了函数的最大下降方向。当搜索方向 取为负梯度方向时称为最速下降法。 常见的梯度法有最速下降法、Newton法、Marquart法、共轭梯度法和 拟牛顿法(Quasi-Newton method)等。在所有这些方法中,用得最多的是 拟牛顿法。
一、无约束非线性最优化问题
3 、应用实例 例1 最小化函数: f ( x) 3x 2 2 x x x 2 1 1 2 2
解:创建目标函数 程序(文件名为example1.m): %创建目标函数 function f=example1(x) f=3*x(1)*x(1)+2*x(1)*x(2)+x(2)*x(2); 调用fminunc函数,求[1,1]附近的极小值点、极小值。 x0=[1,1]; [x,fval,exitflag]=fminunc(@example1,x0) 运行结果: x = 1.0e-006 * 0.2541 -0.2029 fval = 1.3173e-013 exitflag = 1
ቤተ መጻሕፍቲ ባይዱ
output 该函数包含下列优化信息: output.iterations 迭代次数 output.aIgorithm 所采用的算法 output.funcCount 函数评价次数 output.cgiterations PCG迭代次数(只适用于大型规划问题) output.stepsize 最终步长的大小(只适用于中型问题) output.firstorderopt 一阶优化的度量;解x处梯度的范数
令 x k 1 x k t k p k , k : k 1 ,转第 2 步。
例5
用最速下降法求解无约束非线性规划问题
2 min f ( x) x12 25 x2
x 其中 ,要求选取初始点 (2,2) 解:(i) 编写M文件detaf.m如下 function [f,df]=detaf(x); f=x(1)^2+25*x(2)^2; df(1)=2*x(1); df(2)=50*x(2);
4.5 MATLAB求解一维极值问题
MATLAB中用于求解一维极值问题的函数为fminbnd,
[x,fval]=fminbnd(fun,x1,x2):为求解一维极值问题的一般形式,x为最优解, fval为最优值,fun为目标函数,x1和x2代表变量x的约束区间x1<x<x2.
[x,fval,exitflag,output]=fminbnd(fun,x1,x2):exitflag返回求解结果,得到极值 为1,无法找到极值为0. output返回求解信息:迭代次数,所用算法等。
采用黄金分割算法和抛物线算法,迭代次数为5次,求解函数次数为6次。
14
opt=optimset(‘Display’,’iter’); [x,fval]=fminbnd('2*x^2-x-1',-1,1,opt) Func-count x f(x) Procedure 1 -0.236068 -0.652476 initial 2 0.236068 -1.12461 golden 3 0.527864 -0.970583 golden 4 0.25 -1.125 parabolic 5 0.249967 -1.125 parabolic 6 0.250033 -1.125 parabolic Optimization terminated: the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-004 显示每步的迭代结果,以及最终结果。
一、无约束非线性最优化问题
2、有关函数介绍 MATLAB优化工具箱中用于求解无约束非线性规划问题的函数有fminunc和 fminsearch。
⒈ fminunc函数 用该函数求多变量无约束函数的最小值。多变量无约束函数的数学模型为:
min
x
f ( x)
式中,x是矢量,f(x)为函数,返回标量。 fminunc函数在给定初值的情况下,求多变量标量函数的最小值。常用于无约束非线 性最优化问题。其调用格式为:
0
T
,终止误差 10
6
。
一、无约束非线性最优化问题
(ii)编写M文件zuisu.m clc x=[2;2]; [f0,g]=detaf(x); while norm(g)>0.000001 p=-g'/norm(g); t=1.0;f=detaf(x+t*p); while f>f0 t=t/2;f=detaf(x+t*p); end x=x+t*p [f0,g]=detaf(x) end
⒉ fminsearch函数 fminsearch求解多变量无约束函数的最小值。该函数常用于无约束非线性最 优化问题。其调用格式为:
x=fminsearch(fun,x0):初值为x0,求fun函数的局部极小值点x。x0可以是标量、矢量或矩 阵。 x=fminsearch(fun,x0,options):用options参数中指定的优化参数进行最小化。 x=fminsearch(fun,x0,options,P1,P2,…):将问题参数P1,P2等直接输给目标函数 fun,将 options参数设置为空矩阵,作为options参数的默认值。 [x,fval]= fminsearch(…):将解x处目标函数值返回到fval参数中。 [x,fval,exitflag]= fminsearch(…):返回exitflag值,描述函数的退出条件。 [x,fval,exitflag,output]= fminsearch(…):返回包含优化信息的输出结构output。 fminsearch函数使用单纯形法进行计算。 对于求解二次以上的问题,fminsearch函数比fminunc函数效率低。但是,当问题为高 度非线性时,fminsearch函数更具稳健性。
一、无约束非线性最优化问题
调用fminsearch函数,求[1,1]附近的极小值点、极小值。 x0=[1,1]; [x,fval,exitflag]=fminsearch(@example1,x0) 运行结果: x = 1.0e-004 * -0.0675 0.1715 fval = 1.9920e-010 exitflag = 1
一、无约束非线性最优化问题
[x,fval,exitflag,output,grad]=fminunc(…):将解x处fun函数的梯度值返回到grad参数。 [x,fval,exitflag,output,grad,hessian]=fminunc(…):将解x处目标函数的Hessian矩阵信 息返回到hessian参数中。
一、无约束非线性最优化问题
例3.画旋转抛物面 z x2 y2 >>x=-3:3; >>y=x; >> [X,Y]=meshgrid(x,y); >>z=X.^2+Y.^2; >>mesh(X,Y,z) .
一、无约束非线性最优化问题
例4、 使一维函数f(x)=sin(x)+3 最小化。 首先创建M 文件myfun3m: function f=myfun3(x) f=sin(x)+3; % 目标函数 然后调用 fminsearch函数求2附近函数的最小值。 >> x=fminsearch(@myfun3,2) x = 4.7124 下面使用命令行使该函数最小化: >> f=inline('sin(x)+3'); >> x=fminsearch(f,2) x = 4.7124