使用matlab解决收益和风险问题 数学建模算法与应用

使用matlab解决收益和风险问题 2021/1/25

解决一般数学建模问题的步骤

看完一道例题,感觉按照书上这样的步骤是挺好的。

1、问题提出
2、符号规定和基本假设
3、模型分析与建立
4、求解
5、结果分析

投资的收益和风险

市场上有n种资产si,(i=1,2,.,n)可以选择,现用数额为M的相当大的资金作一个时期的投资。这n种资产在这一时期内购买 si;的平均收益率为ri;,风险损失率为qi;,投资越分散,总的风险越少,总体风险可用投资的si;中最大的一个风险来度量。购买si;时要付交易费,费率为pi;,当购买额不超过给定值ui;时,交易费按购买u;计算。另外,假定同期银行存款利率是T0,既无交易费又无风险(r0 =5%)。

已知n=4时相关数据如下表所列。

siri/%qi/%pi/%ui/元
s1282.51103
s2211.52198
s3235.54.552
s4252.66.540

提出问题

试给该公司设计一种投资组合方案,即用给定资金M ,有选择地购买若干种资产或存银行利息,使净收益尽可能大,总体风险尽可能小。

符号规定和基本假设

si 表示第i种投资项目
ri,pi,qi分别表示si的平均收益率、交易费率、风险损失率
ui表示si的交易定额
xi表示投资项目si的资金
a表示投资风险度
Q表示总体收益

假设M=1
投资越分散,总风险越小
总风险用投资项目si中最大的风险来度量
n+1种资产是相互独立的
在投资的这一时期ri,pi,qi为定值
净收益和总体风险只受ri,pi,qi影响,不受其他因素影响

模型的分析与建立

(1)风险评估

max{ qixi | i = 1,2,…,n}。

(2)交易费
当 xi > ui 时,为 pixi。反之,为piui。
但由于交易金额巨大,这里ui偏小,所以,交易费的值为pixi。
这样净收益就为(ri-pi)xi。
(3)收益尽可能大,风险尽可能小
目标函数

max { (i=0,n)∑(ri-pi)xi} 
min{max{qixi}} ( i =1,2,…,n)

约束条件

(i=0,n) ∑(1+pi)xi=M,
xi>=0,i=0,1,2,…,n。

(4)模型简化
给定一共风险一个固定的界限a,使最大的一个风险率为a,即qixi/M<=a( i =1,2,…,n),这样把多目标规划变成一个目标的线性规划。

max (i=0,n)∑(ri-pi)xi,
qixi/M<=a,i=1,2,…,n,
(i=0,n)∑(1+pi)xi = M ,xi>=0, i=0, 1,…,n。

模型的求解

根据题目所给的数据

min f = [-0.05,-0.27,-0.19,-0.185,-0.185] · [x1,x2,x3,x4,x5]',
x0 + 1.01x1 + 1.02x2 + 1.045x3 + 1.065x4 = 1,
0.025x1 <= a,
0.015x2 <= a,
0.055x3 <= a,
0.026x4 <= a,
xi >= 0, i = 0, 1, 2, 3, 4。

这里设置初始a为0,步长为0.001,最大为0.065。

clc,clear;
a = 0;
hold on
while a < 0.065
   c = [-0.05,-0.27,-0.19,-0.185,-0.185];
   % 解释一下这里为什么是 4x5的矩阵,因为矩阵的乘法法则
   % (a,b)x(b,c)=(a,c)
   % 因为这里的x的值为一个长度为5的一列矩阵   
   % (4,5)x(5,1)=(4,1)
   % 因此,为了保证数据的准确性,这里将第一列都设置为0。
   % 这样既保证了程序的鲁棒性,又不会对计算有什么影响。
   A = [zeros(4,1),diag([0.025,0.015,0.055,0.026])];
   b = a*ones(4,1);
   aeq = [1,1.01,1.02,1.045,1.065];
   beq = 1;
   lb = zeros(5,1);
   [x,Q] = linprog(c,A,b,aeq,beq,lb);
   plot(a,-Q,'*k');
   a = a + 0.001;
end
xlabel('a'),ylabel('Q');

得出数据图:
在这里插入图片描述

结果分析

这里根据图可以看出,若投资者追寻极致的收益,则,当第二个转折点a=0.025时,收益饱和。
但是若投资者对于风险和收益没有特殊偏好,应该选择第一个转折点,该店左边,收益增加很快,但是右边收益增加变缓慢。该点约是 a = 0.006, Q=0.2。代码中设置一下就可以得到比较精确的数值了。
在这里插入图片描述在这里插入图片描述

所以对应的投资方案为

风险度为 a = 0.006,收益 Q = 0.2019 
x0=0.0000,
x1=0.2400,
x2=0.4000,
x3=0.1091,
x4=0.2212
  • 22
    点赞
  • 192
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
数学建模算法应用是指应用数学模型来解决实际问题的过程。而MATLAB是一功能强大的数学计算软件,广泛用于科学计算和工程领域。 在数学建模中,我们通常需要通过MATLAB编写代码来实现模型的求解。MATLAB提供了丰富的函数库和工具箱,可以方便地进行数值计算、符号计算、数据可视化等操。 对于不同的数学建模问题,可以使用不同的算法解决。比如线性规划问题可以使用线性规划算法,优化问题可以使用优化算法,微分方程可以使用数值解法等。 在MATLAB中,我们可以使用线性规划工具箱中的linprog函数来求解线性规划问题。这个函数可以通过输入目标函数和约束条件,自动进行求解,并给出最优解。 对于优化问题,可以使用优化工具箱中的fmincon函数来进行求解。该函数可以通过输入目标函数、约束条件和初始值,来寻找最优解。 对于微分方程,可以使用ode45函数来进行数值解法。这个函数可以通过输入微分方程、初始条件和求解区间,来给出微分方程的解。 除了这些基本函数,MATLAB还提供了大量的工具和函数,可以用于数据处理、数据可视化、曲线拟合等操,帮助我们更好地进行数学建模。 总之,数学建模算法应用MATLAB代码密切相关。在实际应用中,我们可以通过编写MATLAB代码来实现各数学建模算法,更高效地解决实际问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值