Matlab非线性优化函数fmincon

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(problem)
    [x,fval] = fmincon(___)
    [x,fval,exitflag,output] = fmincon(___)
    [x,fval,exitflag,output,lambda,grad,hessian] = fmincon(___)

其中fun是待优化函数的函数文件;x0为初始值;A,b分别为非线性不等式的系数;Aeq,beq分别为非线性等式的系数;lb,ub分别为自变量的下界和上界;options是参数设置,可通过函数设置边界。

例如我们要求如下函数的最优值:

clc;clear all
[x,y]=fmincon("fun1",rand(3,1),[],[],[],[],zeros(3,1),[inf,inf,inf],"fun2")

其中fun1是待优化的函数文件,fun2是约束函数文件。由于题目没有给定三个自变量的初始值,我们可以生成三个随机数当作其初始值。如果对随机数抱有质疑可以多次运行代码对比结果。fun1和fun2的函数文件设置如下所示:

function f = fun1(x);
f = sum(x.^2)+8;
end
function [g,h] = fun2(x);
g = [-x(1)^2+x(2)-x(3)^2;
     x(1)+x(2)^2+x(3)^2-20];
h = [-x(1)-x(2)^2+2;
    x(2)+2*x(3)^2-3];
end

注意:

①如果要求最大值,可以在fun1中添加负号。在求函数值的时候再添加负号输出。

②在fun2中,g代表非线性不等式约束,h代表非线性等式约束。变量的声明和定义要一一对应。

代码运行结果如下:

 可见在约束条件下,x1、x2、x3分别取0.5522 1.2033 0.9478的时候,目标函数有最小值10.6511

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值