MATLAB中求的是最小值,如果要求最大值只需要在目标函数前面加一个负号就可以。
在MATLAB中求线性有标准库,需要有基本的规范
例题:
f:
标准形式min C^T*x,现在要求最大值,所以给他加负号就行
f=[-2;-3;-5];
a、b:
然后看标准式子里的Ax <=b
在这道题中
因为标准式里都是小于所以给第一个式子加负号
a=[-2,5,-1;1,3,1];
b=[-10;12];
Aeq、Beq:
看标准式里的Aeq * x=Beq
在这道题中
所以Aeq=[1,1,1];
Beq=7;
现在已经转换为MATLAB标准形式,可以用MATLAB来求最优解
[x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));
zeros(3,1)是生成一个三行一列的全是零的数据
x,y=-y:
此时求出的是最小值,现在再加一个负号就是最大值了
代码演示:
>> f=[-2;-3;5];
>> a=[-2,5,1;1,3,1];
>> b=[-10;12];
>> aeq=[1,1,1];
>> beq=7;
>>> [x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));
>> x,y=-y
x =
6.4286
0.5714
0
y =
14.5714
线性规划问题先把数学的式子转换为MATLAB的标准,然后再用linprog求最优解。
如果没有a没法求解,要考虑老板能接受的投资风险,
可以给老板列出每次增长0.001风险度的情况
代码运行结果如图:
可以看出收益率随着风险的上升逐渐上升,但是增长趋势逐渐平缓
建议选择风险度在0.025以下的产品