求高人用matlab解这道最优化问题!!大括号里的是约束条件!谢谢!

如题所述

此类问题,可以用[x,fval,exitflag,output]=fmincon('myfun',x0,A,b,Aeq,beq,lb,ub,'mycon')求解。
初值
x0 =
0.1112 0.7803 0.3897
x1、x2、x3值
x =
77.5934 29.4027 -105.9961 %即x1、x2、x3
minf(x)最小值
fval =
-20.6378 %即minf(x)
验证:
x1+x2+x3=1
ans =
1.0000
180*x1+110*x2+150*x3+70*x1*x2-60*x1*x3+210*x2*x3≤0.01
ans =
0.0100追问

请问~为什么要设定初值呢?

追答

初值就是一开始计算时所取的初步值。没有初值就无法进行计算。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-06
function [X,f]=mainbdu()
clc;clear
X0=[0 1 0]';
Aeq=[1 1 1];
Beq=1;
A=eye(3);
B=[0 0 0]';
LB=[];
UB=[];
 X = FMINCON(@myfun,X0,A,B,Aeq,Beq,LB,UB);
 f=feval(@myfun,X);
 function f = myfun(x)      
  f =-(0.6*x(1)+0.2*x(2)+0.3*x(3));       
                                       
function [c,ceq] = mycon(x)
         c =-(180*x(1)+110*x(2)+150*x(3)+70*x(1)*x(2)-60*x(1)*x(3)+210*x(2)*x(3)-0.01);
         ceq = [];
         在command窗口运行[X,f]=mainbdu()得到
         X =

    0.3333
    0.3333
    0.3333


f =

   -0.3667
   No feasible solution found.无可行解,你这条件不能全部满足。

追问

谢谢!其实就是这道题的第三问,本来应该求最大值但我在目标函数前加了负号就变成求最小值了。你看可行吗?应该是有解的吧,就是期望收益为36%的情况下。

追答

在x1+x2+x3=1;x1,x2,x3>0约束下,求得的180*x(1)+110*x(2)+150*x(3)+70*x(1)*x(2)-60*x(1)*x(3)+210*x(2)*x(3)最小值为110,也就不会=2根号(180*150*x1*x3)>=2根号(180*150)*x1*x3;负数项只有60x1*x3,等式结果应该比较大正数。
也很容易证明180*x(1)+110*x(2)+150*x(3)+70*x(1)*x(2)-60*x(1)*x(3)+210*x(2)*x(3)最小值为110
上式=110(x1+x2+x3)+70*x1+40*x3-60x1*x3+70x1x2+210x2*x3>=110(均值不等式)当x1=x3=0,x2=1时等号成立,故最小值为110故不可能小于0.01.如果题目没错就是你这个约束条件列错了,自己检查,专业问题我就不晓得了。