赞
踩
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。