灰色预测MATLAB程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
灰色预测
作用:求累加数列、求a b的值、求预测方程、求残差
clc %清屏,以使结果独立显示
x=[71.1 72.4 72.4 72.1 71.4 72.0 71.6];
format long; %设置计算精度
if length(x(:,1))==1 %对输入矩阵进行判断,如不是一维列矩阵,进行转置变换 x=x';
end
n=length(x); %取输入数据的样本量
z=0;
for i=1:n %计算累加值,并将值赋予矩阵be
z=z+x(i,:);
be(i,:)=z;
end
for i=2:n %对原始数列平行移位
y(i-1,:)=x(i,:);
end
for i=1:n-1 %计算数据矩阵B的第一列数据
c(i,:)=-0.5*(be(i,:)+be(i+1,:));
end
for j=1:n-1 %计算数据矩阵B的第二列数据
e(j,:)=1;
end
for i=1:n-1 %构造数据矩阵B
B(i,1)=c(i,:);
B(i,2)=e(i,:);
end
alpha=inv(B'*B)*B'*y; %计算参数矩阵即a b的值
for i=1:n+1 %计算数据估计值的累加数列,如改为n+1为n+m可预测后m-1个值
ago(i,:)=(x(1,:)-alpha(2,:)/alpha(1,:))*exp(-alpha(1,:)*(i-1))+alpha( 2,:)/alpha(1,:);%显示输出预测值的累加数列
end
var(1,:)=ago(1,:) %显示输出预测值
for i=1:n %如改n为n+m-1,可预测后m-1个值
var(i+1,:)=ago(i+1,:)-ago(i,:); %估计值的累加数列的还原,并计算出下一预测值
end
for i=1:n
error(i,:)=x(i,:)-var(i,:); %计算残差
end
c=std(error)/std(x); %调用统计工具箱的标准差函数计算后验差的比值c
ago %显示输出预测值的累加数列
alpha %显示输出参数数列
var %显示输出预测值
error %显示输出误差
c %显示后验差的比值
作用:数据处理判断是否可以用灰色预测、求级比、求累加数列、求a b的值、求预测方程
clc,clear
x0=[71.1 72.4 72.4 72.1 71.4 72.0 71.6]'; %注意这里为列向量
n=length(x0);
lamda=x0(1:n-1)./x0(2:n) %计算级比
range=minmax(lamda') %计算级比的范围
x1=cumsum(x0) %累加运算
B=[-0.5*(x1(1:n-1)+x1(2:n)),ones(n-1,1)];
Y=x0(2:n);
u=B\Y %拟合参数u(1)=a,u(2)=b
x=dsolve('Dx+a*x=b','x(0)=x0'); %求微分方程的符号解
x=subs(x,{'a','b','x0'},{u(1),u(2),x0(1)}) %代入估计参数值和初始值yuce1=subs(x,'t',[0:n-1]); %求已知数据的预测值
y=vpa(x,6) %其中的6表示显示6位数字
yuce=[x0(1),diff(yuce1)] %差分运算,还原数据