@数学建模
数学建模——灰色预测
灰色预测理论
灰色理论认为信息不完全系统的行为现象尽管是朦胧的,数据是复杂的,但它具备一定的潜在规律,是有整体功能的。灰色预测就是从杂乱中寻找出规律,从而对系统进行预测。
灰色模型(Grey Models,GM)
通过离散随机数经过生成变为较有规律的生成数,进而直接转化成微分方程的模型。常用模型有GM(1,1)模型、GM(1,N)模型、Verhulst模型、GM(2,1)模型,DGM模型和灰色波形预测。
1. GM(1,1)模型
知识点
例题
代码实现
上机课作业,可人为输入数据与预测年数,并作出图来。
% GM(1,1)模型
clc,clear
x0 = input('请输入一个列向量数组:')
k = input('请输入预测年数:')
% x0 = [124761 125786 126743 127627 128453 129227 129988 130756 131448]' 输入数据 注意这里为列向量
n = length(x0) %n=9
lamda = x0(1:n-1)./x0(2:n) % 级比 ——8个数据
range = minmax(lamda') %级比范围
if range(1,1) < exp(-2/(n+2)) | range(1,2)>exp(2/(n+2))
error('级比没有落入灰色模型的范围内')
else
%空行输出
disp(' ');
disp('可以用GM(1,1)建模')
end
x1 = cumsum(x0) %累加运算
B=[-0.5*(x1(1:n-1)+x1(2:n)),ones(n-1,1)]
Y=x0(2:n);
u=inv(B'*B)*B'*Y %拟合参数
%上述语句可替换为 u=B\Y 【有点不太理解】
% k=10;
forecast1 = (x1(1)-u(2)./u(1)).*exp(-u(1).*([0:n-1+k]))+u(2)./u(1);
%白化方程的离散响应
exchange = diff(forecast1)%最后10个为预测的数据
epsilon=x0(2:n)'-exchange(1:n-1) %计算残差
delta=abs(epsilon./x0(2:n)') %计算相对误差
rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda' %计算级比偏差值
t1=1998:2006;
t2=1999:2006+k;
plot(t1,x0,'bo--');
hold on
plot(t2,exchange,'go-')
hold on;
title('预测结果');
legend('真实值','预测值');
2. GM(1,n)模型
知识点
例题
代码实现
%GM(1,N)
clc,clear
x0 = [4383 7625 10500 11316 17818
83 131 180 195 306
146 212 233 259 404]; % 录入数据
[m,n] = size(x0);
x1_d = cumsum(x0,2); %累加序列
x11 = x1_d(1,:);
z11=0.5*(x11(1:end-1)+x11(2:end));%紧邻均值生成
b = [-z11' x1_d(2,2:end)' x1_d(3,2:end)'];
y = x0(1,2:end)';
u = b\y %参数矩阵
%%引入条件
x20 = [x0(2,:),400];
x30 = [x0(3,:),500];
x21 = cumsum(x20);x31 = cumsum(x30);
for k = 0:length(x21)-1
x1(k+1) = (x0(1,1)-u(2)/u(1)*x21(k+1)-u(3)/u(1)*x31(k+1)).*exp(-u(1)*k)+u(2)/u(1)*x21(k+1)+u(3)/u(1)*x31(k+1);
end
x10hat = [x1(1),diff(x1)]; %进行差分运算
epsilon = x0(1,:) - x10hat(1:end-1); %计算残差
delta = abs(epsilon./x0(1,:)); %计算相对误差
xhat = x10hat(end) % 预测最终值
3. 灰色Verhulst模型
知识点
例题
代码实现
%灰色verhulst
clc,clear
x0 = [2.119 2.070 2.442 2.485 2.507 2.496 2.640 2.710] % 输入数据
n = length(x0)
year = 0:n-1
x1 = cumsum(x0) %累加运算
for i = 2:n
z1(i) = 0.5*(x1(i)+x1(i-1)); % 紧邻均值序列
end
z1
B=[-z1(2:end)',z1(2:end)'.^2]
Y=x0(2:end)';
u=B\Y %拟合参数
forecast1 = (u(1)*x0(1))./(u(2)*x0(1)+(u(1)-u(2)*x0(1))*exp(u(1).*([2:n])))
exchange = diff(forecast1)
epsilon=x0(2:n-1)-exchange %计算残差
delta=abs(epsilon./x0(2:n-1)) %计算相对误差
统一思路
4. 灰色波形预测
知识点
例题
灰色模型的检验
5. GM(2,1)模型
6. DGM模型
7.案例分析