灰色系统理论的应用(含代码)
灰色系统模型在现金流量预测中的应用
在本节我们选取伊利集团的2000—2007年财务报表的现金流量表中的“经营活动产生的净现金流”作为分析预测的对象。伊利集团是我国著名的奶业生产集团,知名度较高,且长期以来生产经营较为规范,其报表可信度较高,所以,用该公司的财务报表的数据,可以较好的反映实际情况,有利于我们进行分析和验证。而2008年出现的儿童奶粉事件,给乳制品产业带来了致命的打击,所以不采用2008年的财务报表。
在使用GM(1,1)时, 首先要对实际的原始数据进行一定的处理或假设: 1. 企业在长期来看, 不存在负现金流。尽管企业在短期, 例如月现金流无法避免存在负现金流,但对于一个持续经营的企业来说,尽量保持正的现金流,是大多数的企业理财所应达到的目标。当然, 当企业的实际数据出现负现金流时,也可用适当的办法进行处理。
2. 企业在一定时期内的经营条件和外部环境不存在大的波动。即企业在相似的外部环境和促销手段下进行。这种假设避免了现金流大的波动,从而避免预测失真。由于对于一般的销售型企业来说,经营活动的现金流量是主要的资金来源,筹资活动和投资活动并不是经常发生的项目。而且,经营活动产生的现金流量通常情况下较稳定,不会产生大的波动,也很少有负值的出现,即使在短时期内可能出现应收账款较多,资金周转不开的情况,但从一年时间来看,在一年内的现金收入通常会大于现金流出。对于一个健康的正在成长的企业来说,经营活动现金流量应该是正数。
所以,以下选择的伊利集团现金流量表中2000-2007的数据符合前述假设和模型的要求,见下表:
表3.1.1伊利集团2000年至2007年的现金流量
们作为异常数据,剔除掉,再得到原始序列:
X
(0)
=(x
(0)
(1),x
(0)
(2)⋅⋅⋅x
(0)
(6))=(3067.03,4211.81, 5099.5, 6700.01, 4953.75, 7781.31)
首先应用原来未改进的方法进行预测,X 的 1-AGO为:
X
(1)
=(x
(1)
(1),x
(1)
(2),x
(1)
(3),x
(1)
(4),x
(1)
(5),x
(1)
(6))
=(3067.03,7278.84,12378.34,19078.35, 24032.1, 31813.41)
对X (1)作紧邻均值生成z (1)(k ) =构造 B矩阵和 Y矩阵。 采用matlab 编程完成解答:
12
(x
(1)
(k ) +x
(1)
(k -1))
k =2, 3⋅⋅⋅6
得Z (1)=(5172.935,9828.59,15728.345, 21555.225, 27922.755) 于是
⎡-⎡x (1)(1)+x (1)(2)⎤/2⎣⎦⎢
⎢-⎡x (1)(2)+x (1)(3)⎤/2
⎦B =⎢⎣
⋅⋅⋅⎢
⎢(1)(1)-⎡x (5)+x (6)⎤⎢⎦/2⎣⎣
1⎤⎡-5172.935
⎥⎢-9828.591⎥⎢
⎥=⎢-15728.345⋅⋅⋅⎥⎢
-21555.225⎥⎢
1⎥⎢-27922.755⎦⎣
1⎤⎡4211.81⎤(0)
⎡x (2)⎤⎢⎥⎥
15099.5⎢⎥(0) ⎥⎢⎥x (3)⎥=⎢6700.01⎥ 1⎥,Y =⎢
⎢⋅⋅⋅⎥⎢⎥⎥
1⎥⎢(0) ⎥⎢4953.75⎥
⎣x (6)⎦⎢⎥1⎦⎣7781.31⎥⎦
ˆ进行最小二乘估计,采用matlab 编程完成解答如下: 对参数α
⎡-0.122⎤T -1T
ˆ则α=(B B ) B Y =⎢⎥
⎣3785.238⎦
估计参数:a =-0.122, b =3785.238
则GM(1,1)白化方程为
dx
(1)
dt
-0.122x
(1)
=3785.238
⎧x ˆ(1)(k +1) =34093.571e 0.122k -31026.541
响应时间式为:⎨(0) (1)(1)
ˆ(k +1) =x ˆ(k +1) -x ˆ(k ) ⎩x
采用matlab 编程完成解答
由此得模拟序列:
ˆ(0) =(x ˆ(0) (1),x ˆ(0) (2)⋅⋅⋅x ˆ(0) (6))=(3067.03,4423.78, 4997.78, 5646.27, 6378.89, 7206.58) X
相对误差序列:
∆=(
ε
x
(0) (0)
(1)(1)
,
ε
x
(0) (0)
(2)(2)
⋅⋅⋅
1
ε
x
6
(0) (0)
(n ) (n )
) =(0,0.0503, 0.0199, 0.1573, 0.2877, 0.0739)
平均相对误差:∆=
∆∑6
k =1
k
=0.0982≈0.1 精度为三级。
X
ˆ的灰色关联度:ε=与X
ˆ1+s +s ˆ+s ˆ-s 1+s +s
=0.9914>0.90关联度为一级。
采用VC 编程完成均方差比值C 的解答
程序:#include
#include void main() { int i;
double x[6]={3206.03,4211.81,5099.5,6700.01,4953.75,7781.31};//x为初始序列 double y[6]={3067.03,4423.78,4997.78,5646.27,6378.89,7206.58};//y为模拟序列 double b[6];
double a=0.00,s,c=0.00,d,e=0.00,f,w;//f为S2,s 为s1,w 为均方差比值C for(i=0;i
{a+=(x[i]-5302.235)*(x[i]-5302.235);} s=sqrt(a/6);
printf("a=%f,s=%f\n",a,s); for(i=0;i
{b[i]=x[i]-y[i];printf("b[%d]=%f\n",i,b[i]);c+=b[i];} d=c/6;
printf("c=%f,d=%f\n",c,d); for(i=0;i
printf("f=%f,w=%f\n",f,w); } 运行结果:
则C =
S 2S 1
=0.505
小误差概率检验: 0.6475S 1=636.875
所以p =P (ε(k ) -) 0.95,小概率误差检验是一级。
该模型并非所有检验都合格, 且较为重要的相对误差检验是三级, 误差较大,
如
直接应用于实际, 会导致较大的误差, 造成预测的失真。所以用计算出来的模型直接进行预测时应当慎重。
二、 对已建模型进行改进
下面应用改进的模型:
X
(0)
[10]
=(x
(0)
(1),x
(0)
(2)⋅⋅⋅x
(0)
(6))=(3067.03,4211.81, 5099.5, 6700.01, 4953.75, 7781.31)
引入一阶弱化算子D ,令X (0) D =(x (0) (1)d , x (0) (2)d ⋅⋅⋅x (0) (n ) d ) 其中,x (0) (k ) d =
16-k +1
(x (k ) +x (k +1) +⋅⋅⋅x (6))
k =1, 2, 3, 4, 5, 6
于是X (0) D =(5302.24,5749.28, 6133.64, 6478.36, 6367.53, 7781.31) 作为改进后的新序列并按照原来的步骤进行计算。 X 的1-AGO 为:
X
(1)
=(x
(1)
(1),x
(1)
(2),x
(1)
(3),x
(1)
(4),x
(1)
(5),x
(1)
(6))
=(5302.24,11051.52,17185.16,23663.52, 30031.05, 37812.36)
ˆ作紧邻均值生成. 构造B 矩阵和Y 矩阵。 对X z
(1)
(k ) =
12
(x
(1)
(k ) +x
(1)
(k -1)), k =2, 3⋅⋅⋅n
采用matlab 编程完成解答
⎡-⎡x (1)(1)+x (1)(2)⎤/2
⎣⎦⎢
⎢-⎡x (1)(2)+x (1)(3)⎤/2
⎦且B =⎢⎣
⋅⋅⋅⎢
⎢(1)(1)
⎡-x (n -1) +x (n ) ⎤⎢⎦/2⎣⎣
1⎤⎡-8176.88
⎥⎢-14118.341⎥⎢
⎥=⎢-20424.34⋅⋅⋅⎥⎢
-26847.29⎥⎢
1⎥⎢-33921.71⎦⎣
1⎤⎡5749.28⎤(0)
⎡⎤x (2)⎥⎢⎥
16133.64⎢⎥(0) ⎥⎥x (3)⎥⎢⎢Y ==⎢6478.36⎥1⎥,
⎢⎥⋅⋅⋅⎢⎥⎥
1⎥⎢(0) ⎥⎢6367.53⎥
⎣x (n ) ⎦⎢
1⎥⎣7781.31⎥⎦⎦
(1)
设
dx
dt
+ax
(1)
ˆ进行最小二乘估计 =b ,对参数α
⎡a ⎤⎡-0.0677⎤T -1T
ˆα=⎢⎥=(B B ) B Y =⎢⎥ b 5100.93⎣⎦⎣⎦
采用matlab 编程完成解答
所以a =-0.0677, b =5100.93 可得GM(1,1)白化方程 时间响应式为:
⎧x ˆ(1)(k +1) =80648.326e 0.0677k -75346.086
⎨(0) (1)(1)
ˆ(k +1) =x ˆ(k +1) -x ˆ(k ) ⎩x
dx
(1)
dt
-0.0677x
(1)
=5100.93
采用matlab 编程完成解答 由此得模拟序列:
ˆ(0) =(x ˆ(0) (1),x ˆ(0) (2)⋅⋅⋅x ˆ(0) (5))=(5302.24,5648.95, 6044.63, 6468.02, 6921.07, 7405.85) X
相对误差序列:
∆=(
ε
x
(0) (0)
(1)(1)
,
ε
x
(0) (0)
(2)(2)
⋅⋅⋅
ε
x
(0) (0)
(n ) (n )
) =(0,0.01745, 0.0145, 0.0016, 0.0869, 0.0483)
采用matlab 编程完成解答
1
6
平均相对误差:∆=
X
ε(k ) =0.00512
k =1
ˆ的灰色关联度, 采用matlab 编程完成解答: 与X
n -1
所以 s =
∑
k =2
X
(0)
(k ) +
12
5
X
(0) 0
(n ) =
∑[x (k ) -x (1)]+[x (6)+x (1)]
k =2
1
2
=31270.585
n -1
ˆ=s
∑
k =2
X
(0)
1
(k ) +
12
3
X
(0) 1
(n ) =
ˆ(k ) -x ˆ(1)]+[x ˆ(4)+x ˆ(1)]∑[x
k =2
1
2
=31436.715
ε=
ˆ1+s +s ˆ+s ˆ-s 1+s +s
=0.9974>0.90 关联度为一级。
采用VC 编程完成均方差比值 C的解答 程序如下:
#include #include void main() { int i;
double x[6]={5302.24,5749.28,6133.64,6478.36,6367.53,7781.31};//x为初始序列 double y[6]={5302.24,5648.95,6044.63,6468.02,6921.07,7405.85};//y为模拟序列 double b[6];
double a=0.00,s,c=0.00,d,e=0.00,f,w;//f为S2,s 为s1,w 为均方差比值C for(i=0;i
{a+=(x[i]-6298.46)*(x[i]-6298.46);} s=sqrt(a/6);
printf("a=%f,s=%f\n",a,s); for(i=0;i
{b[i]=x[i]-y[i];printf("b[%d]=%f\n",i,b[i]);c+=b[i];} d=c/6;
printf("c=%f,d=%f\n",c,d); for(i=0;i
printf("f=%f,w=%f\n",f,w);
}
结果:
所以 C =
S 2S 1
=0.362
,均方差比值为二级。
计算小误差概率:0.6475S 1=498.560755
所以p =P (ε(k ) -) 0.95,小概率误差检验是一级。 所以该模型所有检验都合格,且精度较高,可用计算出来的模型进行预测。 从而得出该集团接下来四个时间段的预测值:
7924.58 8479.66 9073.61 9709.16
表3.1.2 两种方法的具体参数比较
由此可见,灰色理论应用于企业的实际,并且可以作为企业未来的生产和决策的依据。