2函数 matlab_(2)Matlab函数“fmincon”非线性优化问题

10ad6dfefb6971485f224e9a17eefd59.png

MATLAB中的优化工具箱具有线性和非线性求解器。“fmincon”是非常常见而又有效的solver。目标函数可以是代数方程,微分方程,连续变量,离散或整数变量等。

但是注意的是:在复杂问题里面,fmincon对initial guess特别敏感。

0a5b0970fa080c092a1986d77cd053eb.png

Step 1: Define非线性约束

function [c,ceq]=nlcon(x)
c = 25 - x(1)*x(2)*x(3)*x(4);
ceq = sum(x.^2) - 40;

Step 2:定义Objective function,initial guess,边界条件,等式约束、不等式约束等。Call “fmincon”函数,可以约束条件内的内的最小值。

objective = @(x) x(1)*x(4)*(x(1)+x(2)+x(3))+x(3);

% initial guess
x0 = [1,5,5,1];

% variable bounds
lb = 1.0 * ones(4);
ub = 5.0 * ones(4);

% show initial objective
disp(['Initial Objective: ' num2str(objective(x0))])

% linear constraints
A = [];
b = [];
Aeq = [];
beq = [];

% nonlinear constraints
nonlincon = @nlcon;

% optimize with fmincon
%[X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN] 
% = fmincon(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS)
x = fmincon(objective,x0,A,b,Aeq,beq,lb,ub,nonlincon);

% show final objective
disp(['Final Objective: ' num2str(objective(x))])

% print solution
disp('Solution')
disp(['x1 = ' num2str(x(1))])
disp(['x2 = ' num2str(x(2))])
disp(['x3 = ' num2str(x(3))])
disp(['x4 = ' num2str(x(4))])

Step 3: run code结果如下

Final Objective: 17.014
Solution
x1 = 1
x2 = 4.743
x3 = 3.8212
x4 = 1.3794
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值