步骤:
1. 建立目标函数的mfun.m文件;
2. 建立非线性约束的mcon.m文件;
3. 调用fmincon函数进行计算
计算结果:
当x1=1,x2=0,x3=0.434285时,
最大值fmax=0.529371
已用lingo做过检验,结果为全局最优解,应该没错.
mfun.m文件:
mcon.m文件:
输入:
运行结果:
楼上正解无错
再给一种不同的形式
function zd0323
format long%改变格式,使更精确输出结果
%% 目标函数
function y=fun(x)
y=-(0.36*x(1)+0.25*x(2)+0.39*x(3));%求最大值,就是求负目标函数的最小值,然后取相反数即可
end
%% 非线性约束
function [c,ceq]=nonlcon(x)
c=12/5*x(1)+11/5*x(2)+10/3*x(3)-3/5*x(1)*x(2)-x(1)*x(3)-1/15*x(2)*x(3)-31/75*x(1)^2-1/25*x(2)^2-3;
ceq=[];
end
%% 线性约束
A =[5/9 1/3 7/9;5/9 4/9 2/3;1/3 1 0;1/3 0 1;...
-5/9 -1/3 -7/9;-5/9 -4/9 -2/3;-1/3 -1 0;-1/3 0 -1;];
b=[1 1 1 1 0 0 0 0]';
%% 自变量取值范围
lb=[0 0 0];
ub=[1 1 1];
%% 初值
x0=[0.1 0.1 0.1]
%% fmincon参数设定
options=optimset('Algorithm','active-set');
%% 计算非线性规划
[x,fval] = fmincon(@fun,x0,A,b,[],[],lb,ub,@nonlcon,options);
x=x
MAX=-fval
format short%恢复默认格式
end
保存运行即可
结果:
x =
1.000000000000000 0 0.434285714286495
MAX =
0.529371428571733