说明:fmincon一般用来求解多元有约束非线性最优化问题,其中约束可以包含等式约束和非线性约束。其全调用格式为:
[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
【例1】求侧面积为常数150m2的体积最大的长方体体积,并求出各棱长。
解:设棱长分别为x1,x2,x3,根据题意有如下数学模型:
用MATLAB的fmincon函数求解
fun008.m
function f=fun008(x)
f=-x(1)*x(2)*x(3);
fun008TJ.m
function [ceq,c]=fun008TJ(x)
ceq=2*(x(1)*x(2)+x(1)*x(3)+x(2)*x(3))-150;
c=0;
主函数:fun008yunxing.m
clear;
tic;
format rat;
x0=[1 2 3];
[x z exitflag output lambda grad hessian]=...
fmincon(@fun008,x0,[],[],[],[],zeros(3,1),[],@fun008TJ);clc;
x
z=-z
fprintf('说明:当边长分别为%.2f、%.2f、%.2f时,最大体积为%.2f',x,z)
exitflag
if exitflag>0 disp('求解过程正常收敛')
elseif exitflag==0 disp('超过迭代次数限制')
else disp('收敛异常')
end
s='迭代次数:';disp(s)
disp(output.iterations)
td='梯度:';disp(td)
disp(grad)
hess='Hess矩阵:';disp(hess)
disp(hessian)
toc
解得:
x =
5 5 5
z =125
说明:当边长分别为5.00、5.00、5.00时,最大体积为125.00
exitflag = 1
求解过程正常收敛
迭代次数: 13
梯度:
-25
-25
-25
Hess矩阵:
1913/1130 -2135/2267 -931/1289
-2135/2267 1363/897 -879/1036
-931/1289 -879/1036 216/115
时间已过 0.043606 秒。