无约束极值问题
单变量函数求最小值的标准形式为
函数 fminbnd
格式 x = fminbnd(fun,x1,x2) %返回自变量x在区间
上函数fun取最小值时x值,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。
函数fminbnd的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优解。
*
MATLAB求解非线性规划
*
x = fminbnd(fun,x1,x2,options) % options为指定优化参数选项
[x,fval] = fminbnd(…) % fval为目标函数的最小值
[x,fval,exitflag] = fminbnd(…) %xitflag为终止迭代的条件
[x,fval,exitflag,output] = fminbnd(…) % output为优化信息
说明 若参数exitflag>0,表示函数收敛于x,若exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag<0表示函数不收敛于x;若参数output=iterations表示迭代次数,output=funccount表示函数赋值次数,output=algorithm表示所使用的算法。
*
MATLAB求解非线性规划
*
例1 计算下面函数在区间(0,1)内的最小值。
解:[x,fval,exitflag,output]
=fminbnd('(x^3+cos(x)+x*log(x))/exp(x)',0,1)
x =
fval =
exitflag =
1
output =
iterations: 9
funcCount: 9
algorithm: 'golden section search, parabolic interpolation'
*
MATLAB求解非线性规划
*
:
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)
*
MATLAB求解非线性规划
*
二次规划可以直接利用 Matlab 来求解。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,X0,options);
*
MATLAB求解非线性规划
*
*
例1 min f(x1,x2)=-2x1-6x2+x12-2x1x2+2x22
. x1+x2≤2
-x1+2x2≤2
x1≥0, x2≥0
1、写成标准形式:
2、 输入命令:
H=[1 -1; -1 2];
c=[-2 ;-6];A=[1 1; -1 2];b=[2;2];
Aeq=[];beq=[]; VLB=[0;0];VUB=[];
[x,z]=quadprog(H,c,A,b,Aeq,beq,VLB,VUB)
3、运算结果为:
x = z = -
.
MATLAB求解非线性规划
*
*
1. ,定义目标函数F(X):
function f=fun(X);
f=F(X);
一般非线性规划
其中X为n维变元向量,G(X)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划、,基本步骤分三步:
MATLAB求解非线性规划
*
*
3. ,命令的基本格式如下:
(1) x=fmincon(‘fun’,X0,A,b)
(2) x=fmincon(‘f
MATLAB求解非线性规划专题课件 来自淘豆网m.daumloan.com转载请标明出处.