非线性规划问题的求解方法
Click here to modify the text , you may post text here . Click here to modify the text . Click here to mod个非线性最优化问题
% min f(x)=2*x1^2+x2^2
global x0
x0=[ 1 1 ];
yefi=;
k=1;
d=-fun1gra(x0);
lamada=1;
(续)
while sqrt(sum(d.^2))>=yefi
lamada=fminsearch(‘fungetlamada’,lamada);%求最优步长lamada
x0=x0-lamada*fun1gra(x0);%计算x0
d=fun1gra(x0);%计算梯度
k=k+1;%迭代次数
end
disp('x='),disp(x0),disp('k='),disp(k),disp('funobj='),disp(2*x0(1)^2+x0(2)^2)
三、Matlab求解有约束非线性规划
1. 用fmincon函数求解形如下面的有约束非线性规划模型
一般形式:
用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
输出参数语法:
[x,fval] = fmincon(...)
[x,fval,exitflag] = fmincon(...)
[x,fval,exitflag,output] = fmincon(...)
[x,fval,exitflag,output,lambda] = fmincon(...)
[x,fval,exitflag,output,lambd
非线性规划问题的求解方法 来自淘豆网m.daumloan.com转载请标明出处.