文档介绍:软件求解
Matlab求解有约束规划函数
一般形式:
Matlab求解有约束非线性最小化
求解非线性规划问题的Matlab函数fmincon
、非线性约束均可
输入参数语法:
x = fmincon(fun,x0,A,b)
x = fmincon(fun,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...)
输入参数的几点说明
模型中如果没有A,b,Aeq,beq,lb,ub的限制,则以空矩阵[ ]作为
参数传入;
nonlcon:如果包含非线性等式或不等式约束,则将这些函数
编写为一个Matlab函数,
nonlcon就是定义这些函数的程序文件名;
不等式约束 c(x)<=0
等式约束 ceq(x)=0.
如果nonlcon=‘mycon’;
function [c,ceq] = mycon(x)
c = ...     % 计算非线性不等式约束在点x处的函数值
ceq = ...   %计算机非线性等式约束在点x处的函数值
对参数nonlcon的进一步示例
2个不等式约束,
2个等式约束
3个决策变量x1,x2,x3
如果nonlcon以‘mycon1’作为参数值,
function [c,ceq] = mycon1(x)
c(1) = x(1)*x(1)+x(2)*x(2)+x(3)*x(3)-100
c(2) = 60 - x(1)*x(1) + 10*x(3)*x(3)
ceq(1) = x(1) + x(2)*x(2) + x(3) - 80
ceq(2) = x(1)^3 + x(2)*x(2) + x(3) - 80
nonlcon的高级用法
允许提供非线性约束条件中函数的梯度
设置方法:
options = optimset('GradConstr', 'on')
如果提供非线性约束条件中函数梯度,
nonlcon的函数必须如下格式:
参数nonlcon的函数一般格式如下
function [c,ceq,GC,GCeq] = mycon(x)
c = ...          % 计算非线性不等式约束在点x处的函数值
ceq = ...     %计算机非线性等式约束在点x处的函数值
if nargout > 2   % nonlcon 如果四个输出参数   
GC = ...      % 不等式约束的梯度   
GCeq = ...    % 等式约束的梯度
end