灰色系统模型
监测灰色系统模型,主要解决少样本情况下的建模和预报问题。
其基本思路为:先将离散的带有随机性的大坝监测数据经“生成”处理后变为随机性被削弱的“生成数”,然后再通过微分方程来建立数学模型,建模后经过“逆生成”还原后得到结构数据。
本文贴出灰色模型实现的程序源码:程序是使用sas统计软件编写的!
DATA a1 ; /* 建立原始数据集a1 */
INPUT t year xt @@; /* 读入原始数据序列*/
yt + xt ;/* 生成一阶累加序列*/
index=1 ;zt =-(yt+ LAG(yt))/2 ; /* 为数据矩阵B 准备数据*/
cards;
1 1990 24395 2 1991 25286
3 1992 26901 4 1993 27339
5 1994 27871 6 1995 28721
7 1996 29728 8 1997 30067
9 1998 30791 10 1999 31284
11 2000 33716 12 2001 34558
;
PROC IML ; /* 调用IML 模块*/
USE a1 ; /* 打开已有的SAS 数据集a1 */
READ ALL VAR{zt index} INTO B WHERE(zt^=.) ; /* 将a1中变量zt 和index 值(不含第读入矩阵B */
READ ALL VAR{xt} INTO Yn WHERE(zt^= .) ; /* 将a1 中变量xt 矩阵Yn */
ahat=INV(B`*B)*B`*Yn; /* 计算参数矩阵^a = [ a , u ] T= [ B TB ] - 1 B T Yn*/
ahatt=ahat`;
na ={a u}; /* 将参数矩阵转置*/
CREATE a2 FROM ahatt[COLNAME=na] ; /* 用转置后的参数矩阵数据建立SAS 数据集a2 */
APPEND FROM ahatt; /* 将数据读入到数据集*/
QUIT ; /* 退出IML 模块*/
DATA a3 ;
SET a2 ;
index=1 ;
DATA a4;
SET a1;
IF _N_=1;
xt0=xt;
KEEP xt0 index ;
DATA a5 ;
MERGE a1 a3 a4 ;
BY index ;
IF _N_= 1 THEN xp=xt; /* ^x (0) (1) = x (0) (1)*/
ELSE DO
yt1=(xt0-u/a)*EXP(-a*(t-1))+u/a ; /* 计算^x(1)(k)=[x(0)(k)-u/a]*exp(-a(k-1))+u/a */
yt0=(xt0-u/a)*EXP(-a*(t-2))+u/a ; /* 计算^x(1)(k-1)=[x(0)(k)-u/a]*exp(-a(k-2))+u/a */
xp=yt1-yt0; /* 计算预测值^x(0)(k)=[^x(1)(k)]-^x(1)(k-1) */
END ;
error=xp- xt; /* 计算绝对误差*/
rerror = error/xt*100 ; /* 计算相对误差*/
DROP yt index zt yt1 yt0 xt0 ;
PROC PRINT DATA = a5 ; /* 输出计算结果*/
RUN ; /* 运行上述程序*/
保护作者权利,转载请注明出处: http://www.jianceren.cn 监测人网站
全部回复(1 )
只看楼主 我来说两句 抢板凳回复 举报