matlab 灰色系统预测 GM(1,1) 数学建模
2016-01-26 17:01
507 查看
本文代码主要是基于邓聚龙教授在20实际80年代提出的灰色系统理论。
GM0.m %该函数为GM(1,1)模型返回还原值 function f=GM0(x0,t) %数据数列 [M,N]=size(x0); %算出数据数列的大小 x1(1)=x0(1); %累加生成数列 for i=2:N; x1(i)=x1(i-1)+x0(i); end x2=[]; %累加生成数列均值生成数列 for j=1:(N-1); x2(j)=(x1(j)+x1(j+1))/2; end x=x0; %数据数列镜像 x(1)=[]; %删除第一个数据 Y=x'; %数据列向量 global a; global b; B(:,1)=-x2'; B(:,2)=1; A=inv(B'*B)*B'*Y; %求参量a,b组成的参数向量 a=A(1,1); %求参数a b=A(2,1); %求参数b f=(1-exp(a))*(x0(1)-b/a)*exp(-a*(t-1)); f GM1.m: %该函数为GM(1,1)模型中数据数列进行光滑比检验 function f=GM1(x0) %数据数列 N=max(size(x0)); %算出数据数列的大小 x1=cumsum(x0); %累加生成数列 global J; global J1; global J2; x0(1)=[]; x1(N)=[]; global r; r=x0./x1; for j=2:(N-1); %判断数据数列是否满足准光滑条件1 if(r(j)>=0.5||r(j)<0) J1=0; break; else J1=1; end end for l=1:(N-2); %判断数据数列是否满足准光滑条件2 if((r(l+1)/r(l))>=1) J2=0; break; else J2=1; end end J=J1+J2; if(J==2) %判断数据数列是否为准光滑数列 disp('数据为准光滑数列') else disp('数据不是准光滑数列') end GM2.m %该函数为GM(1,1)模型还原值参数计算 function f=GM2(x0) %数据数列 [M,N]=size(x0); %算出数据数列的大小 x1(1)=x0(1); %累加生成数列 for i=2:N; x1(i)=x1(i-1)+x0(i); end x2=[]; %累加生成数列均值生成数列 for j=1:(N-1); x2(j)=(x1(j)+x1(j+1))/2; end x=x0; %数据数列镜像 x(1)=[]; %删除第一个数据 Y=x'; %数据列向量 global a; global b; B(:,1)=-x2'; B(:,2)=1; A=inv(B'*B)*B'*Y; %求参量a,b组成的参数向量 a=A(1,1); %求参数a disp('参数a为:') a b=A(2,1); %求参数b disp('参数b为:') b GM3.m %该程序实现G(1,1)模型的精度检验 %包括平均相对误差,绝对关联度,均方差比值,小误差概率检验 function f=GM3(x0) N=max(size(x0)); x=GM0(x0,1:N); %利用已有程序GM2得出数据列模型估计值 x(1)=x0(1); %更正第一个估计值 disp('模型模拟估计值为') x A=x-x0; %计算绝对残差序列 disp('模型估计值绝对残差序列为:') A G=abs(A); Amin=min(G); %计算最小绝对值绝对残差 Amax=max(G); %计算最大绝对值绝对残差 B=A./x0; %计算相对误差序列 disp('模型估计值相对误差序列为:') B P=sum(abs(B))/N; %计算平均相对误差 disp('模型估计值平均相对误差为:') P for i=1:1:N %通过循环计算关联系数序列 D(i)=(Amin+0.5*Amax)/(G(i)+0.5*Amax); end R=sum(D)/N; disp('关联度为:') R x_=sum(x0)/N; %计算数据的均值 S1=(sum((x0-x_).^2)/(N-1))^0.5; %计算数据序列方均差 A_=sum(A)/N; %计算残差平均值 S2=(sum((A-A_).^2)/(N-1))^0.5; %计算残差序列方均差 C=S2/S1; %计算方均差比值 disp('均方差比值为:') C S0=0.6745*S1; E=A-A_; F=find(E<S0); M=max(size(F)); %计算小残差个数 p=M/N; %计算小误差概率 disp('小误差概率为:') p
相关文章推荐
- MATLAB.NET混合编程之二~~由C#调用MATLAB编译生成的dll
- MATLAB GUI常用函数使用
- MATLAB GUI常用函数使用
- MATLAB.NET混合编程之一~~由MATLAB编译dll
- matlab画图,变长坐标轴
- matlab
- matlab出现Invalid file identifier. Use fopen to generate a valid file identifier错误
- Matlab矩阵基础
- 数字信号处理之经典谱估计与现代谱估计
- Matlab lugui
- matlab中关于fix(x),floor(x),ceil(x)的区别
- 关于Matlab中括号用法的总结
- Matlab基础
- Matlab字符串处理
- Matlab运算符与运算
- MATLAB入门基础
- MATLAB快捷键大全
- matlab读三维txt数据并绘图
- matlab---数组、矩阵
- [新手学Caffe之三]如何在Caffe中加入新的layer并利用Matlab进行调试