先定义一个myinvest.m函数:function y = myinvest(x);y = -[0 0 0 1.15 1.25 1.40 0 0 0 0 1.06]*x;然后运行命令行(最好新建在另外一个M文件里):clear all;% 这里是告诉你我的思路:设出每年年初的a,d,这样就有4个a, 5个d, b,c固定% X = [a1 a2 a3 a4 b c d1 d2 d3 d4 d5]% 其实就是要求1.15a4+1.25b+1.40c+1.06d5 的正值最大值,就等于是求其负值的最小值,因此用到fmincon函数% max([0 0 0 1.15 1.25 1.40 0 0 0 0 1.06]*X')% 不等约束,只有c一个A = [0 0 0 0 0 1 0 0 0 0 0]; B = 3;% 相等约束一共五个:下一年年初手中的现金,与上一年年末的结余相等 %a1 a2 a3 a4 b c d1 d2 d3 d4 d5Aeq = [1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 -1.06 1 0 0 0 -1.15 0 1 0 1 0 0 -1.06 1 0 0 0 -1.15 0 1 0 0 0 0 -1.06 1 0 0 0 1.15 0 0 0 0 0 0 1.06 -1]; Beq = [10 0 0 0 0]';options = optimset('LargeScale', 'off', 'MaxFunEvals', 1e4, 'MaxIter', 1e4);x = fmincon(@myinvest, zeros(11, 1), A, B, Aeq, Beq, 1e-6+zeros(11, 1), [], [], options)解出来的x就是相应的[a1 a2 a3 a4 b c d1 d2 d3 d4 d5] 7.1698 % 第一年砸进去A一笔,不要再投了。 0.0000 0.0000 0.0000 8.2453 % 第三年砸进B一笔 3.0000 % 第二年砸进C一笔 2.8302 % 第一年砸进D一笔,不要再投了。 0.0000 0.0000 0.0000 0.0000============================================================