做数模过程中使用的一些算法总结。
灰色系统
在实际问题中,会遇到一些“不明确”的系统,要么是因为缺少大量的数据,要么是因为其内部机理不明确,致使对整个系统进行建模并定量描述十分困难,这种系统就被称为灰色系统。灰色系统建模的理论最早是由华中科技大学的邓聚龙教授确立的。
灰色系统理论的重心在于尽管事物的表象很复杂,但是必定有其内在规律,只是被一些噪声因素“污染”。为此提出了一种新的分析方法——关联度分析,即根据事物发展态势的异同来衡量因素间的关联程度。
关联分析
为了描述两因素之间的关联程度,引入了关联系数指标。若存在参考数列,其中K表示K时刻。假设存在m个比较数列,。则式
即为比较数列Xi对参考数列X0在K时刻的关联系数,其中称ρ∈[0,1]为分辨系数。分辨系数越大,则分辨率越高,反之则越小。上式定义的是各个时刻的关联系数,不方便整体比较,因此引入关联度,即下式,
此外要注意的是,关联度的计算要求量纲相同。所以在此之前需要数据变换,以无量纲化。
数据变换
设有序列,存在映射
以下是几种基本的数据变换方式
- 初值化变换
- 均值化变换
- 百分比变换
- 倍数变换
- 归一化变换
,
其中X0为大于零的某个值。
- 极差最大值化变换
- 区间值变换
以下是关联分析的Matlab程序:
clc,clear
load x.txt %把原始数据存放在纯文本文件 x.txt 中
for i=1:17
x(i,:)=x(i,:)/x(i,1); %标准化数据
end
data=x;
n=size(data,1);
ck=data(1,:);m1=size(ck,1);
bj=data(2:n,:);m2=size(bj,1);
for i=1:m1
for j=1:m2
t(j,:)=bj(j,:)-ck(i,:);
end
jc1=min(min(abs(t')));jc2=max(max(abs(t')));
rho=0.5; %分辨系数ρ
ksi=(jc1+rho*jc2)./(abs(t)+rho*jc2);
rt=sum(ksi')/size(ksi,2);
r(i,:)=rt;
end
灰色预测
灰色系统理论把一切随机量都看作灰色数—即在指定范围内变化的所有白色数的全体。对灰色数的处理不是找概率分布或求统计规律,而是利用数据处理的办法去寻找数据间的规律。通过对原始数列中的数据进行处理,产生新的随机性被显著减弱的数列,建立微分方程形式的模型。数的生成方式有多种:累加生成、累减生成以及加权累加等。
序列生成算子
- 累加生成算子(AGO)
设原始数据数列为,经AGO算子可生成序列,其中累加生成算子为
对于原始数列,可以累加r次,记为r-AGO,但是实际中1-AGO最常用。注意这里的原始数列必须非负,否则会正负抵消,损失信息。
- 累减生成算子(IAGO)
IAGO即是累加的逆过程,其r-IAGO算子为
- 均值生成算子
设原始数据数列为,对于常数α∈[0,1],则称
为由原始数列在生成系数α下的邻值生成数。当α=0.5时,此时的生成数为紧邻均值生成数。
检验指标
由序列生成算子新生成的序列,弱化了原先的随机性,建立了以下指标,能初步定性分析规律。
- 光滑比
若,则称生成序列为准光滑序列。
- 级比
当满足指数规律时,即满足一阶线性微分方程。
由于数列的离散性
同时有以下结论:若为非负准光滑序列,则的一次累加生成序列具有准指数规律。
GM(1,1)
模型建立
灰色系统理论的微分方程称为GM模型,GM(1,1)表示1阶的、1个变量的微分方程模型。设原始数据数列为
,经过1-AGO算子作用生成数据序列,再令为的紧邻均值生成序列,即,则称
为GM(1,1)模型的基本形式,-a称为发展系数,b称为灰色作用量。
*注意
1.为了保证模型的可行性,先要对数据进行检验处理,这里要使用到上面提到的级比。如果所有的级比都在范围内,则可以使用GM(1,1)模型。否则必须对原始数列进行处理,可去适当的常数c,使
,处理后的数列满足上述条件。也有其他预处理方法如数据开n方、数据取对数、数据平滑和运用序列算子弱化或强化原始数据数列。
2.实际应用中:
1) 当-a ≤ 0.3 时,GM(1,1)模型可用于中长期预测;
2) 当0.3 ≤ -a≤ 0.5时,GM(1,1)模型可用于短期预测,中长期慎用;
3) 当0.5 ≤ -a ≤ 0.8时,GM(1,1)模型短期预测应谨慎;
4) 当0.8 ≤-a≤ 1时,应采用残差修正GM(1,1)模型;
5) 当1 ≤-a时,不宜采用GM(1,1)模型;
模型求解
- 求解a,b
参数的最小二乘估计满足,。
- 解微分方程
上式为GM(1,1)的白化方程。求解此方程的解为:
X0=[3941 3941 3941 3941 3941 3744 3567 3621 3621 3621 3621 3621 3621 3441 3613 3614 3614 3614 3614 3458 3438];
for i=1:21
X1(i)=sum(X0(1:i));
end
for k=2:21
Z(k)=0.5*X1(k)+0.5*X1(k-1);
end
for i=1:20
b(i,1)=-Z(i+1);
y(i)=X0(i+1);
end
b(:,2)=1;
y=y';
au=b\y;
yc1(1)=X0(1);
for k=1:21
c=X0(1)-au(2)/au(1);
yc1(k+1)=c*exp(-au(1)*k)+au(2)/au(1);
end
yc0(1)=X0(21);
for k=1:21
yc0(k+1)=yc1(k+1)-yc1(k);
end
disp(uint16(yc0(2:1:22)));
yco=uint16(yc0(1:1:21));
for i=1:21
e0(i)=X0(i)-yco(i);
end
maxl=max(abs(e0));
r=1;
for k=2:21
r=r+0.5*maxl/(abs(e0(k))+0.5*maxl);
end
除了GM(1,1)模型之外,还有GM(1,N)模型、GM(2,1)模型、Verhulst 模型等等。具体可以查看灰色系统理论及其应用。
参考资料:
数学建模(第二版),陈光亭,裘哲勇
灰色预测GM(1,1)模型的改进及应用,杨华龙
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。