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] = fmincon(…)
[x,fval,exitflag,output] = fmincon(…)
[x,fval,exitflag,output,lambda] = fmincon(…)
[x,fval,exitflag,output,lambda,grad]= fmincon(…)
[x,fval,exitflag,output,lambda,grad,hessian]= fmincon(…)
对于fmincon函数,其exitflag参数中的数字:
1、一阶最优性条件满足容许范围
2、X的变化小于容许范围
3、目标函数的变化小于容许范围
4、重要搜索方向小于规定的容许范围并且约束违背小于options.TolCon
5、重要方向导数小于规定的容许范围并且约束违背小于options.TolCon
0、到达最大迭代次数或到达函数评价
-1、算法由输出函数终止
-2、无可行点
实例:求解下式的最小值
%方式一:分成多个文件
function f=fminxy(t)
x=t(1);y=t(2);
f=x*x*x-y*y*y+2*x*x+x*y;
end
%%以上代码生成fminxy文件
function [c d]=fcontr(t)
x=t(1);y=t(2);
c=x*x+y*y-6;
d=x*y-2;
end
%%以上文件生成fcontr文件
>> [x,fval,exitflag]=fmincon('fminxy',[1 2],[],[],[],[],[],[],'fcontr')
%fmincon( fun, x0, A, b,Aeq,beq,lb,ub, nonlcon) A是初始值,fmincon的初始值x0可以任意取,只要保证为实数就行。
x =
0.8740 2.2882 %函数最小值时x,y的值
fval =
-7.7858 %函数最小值
exitflag =
1 %一阶最优性条件满足容许范围,既是结果正确
%方式二:整合成一个文件
function x= findOpt(a,b)
x=fmincon(@(t) fminxy(t),[a b],[],[],[],[],[],[],@(t) fcontr(t))
end
function f=fminxy(t)
x=t(1);y=t(2);
f=x*x*x-y*y*y+2*x*x+x*y;
end
function [c d]=fcontr(t)
x=t(1);y=t(2);
c=x*x+y*y-6;
d=x*y-2;
end
%以上代码生成findOpt文件
>> x=findOpt(2,2)
x =
0.8740 2.2882
该实例皆为在MATLAB R2014a运行所得,参考https://jingyan.baidu.com/album/6c67b1d69508b52787bb1edf.html?picindex=4