【Matlab数学建模】灰色预测模型

一、灰色预测的概念

  1982年我国学者邓聚龙教授发表第一篇中文论文《灰色控制系统》标志着灰色系统这一学科诞生。

  白色系统是指一个系统的内部特征已知的,即系统的信息是完全充分的。黑色系统是指一个系统的内部信息对外界来说是一无所知的,只能通过它与外界的联系来加以观测研究。

  灰色系统则介于二者之间。

二、灰色关联度与优势分析

  选取参考数列
【Matlab数学建模】灰色预测模型
  假设有m个比较数列
【Matlab数学建模】灰色预测模型
  则称:
【Matlab数学建模】灰色预测模型
  为比较数列Xi对参考数列X0在k时刻的关联系数。其中【Matlab数学建模】灰色预测模型分辨系数,一般情况下【Matlab数学建模】灰色预测模型

  关联系数【Matlab数学建模】灰色预测模型在每一时刻都有一个,过于分散,不利于比较,为此我们给出:
【Matlab数学建模】灰色预测模型
  为比较数列Xi对参考数列X0关联度

  然而关联系数公式中的【Matlab数学建模】灰色预测模型并不能去别处因素关联是正关联还是负关联,可采用以下方法解决该问题,记:
【Matlab数学建模】灰色预测模型

  则当【Matlab数学建模】灰色预测模型,则Xi和Xj正关联,否则为负关联

  代码实现:

function [zeta, r] = func(x, x_0, rho)
	
	[m, ~] = size(x);

	if nargin < 3
		rho = 0.5;
	end
	
	if nargin < 2
		x_0 = max(x);
	end
	
	x_abs = abs(x_0 - x);
	mn = min(min(x_abs));
	mx = max(max(x_abs));
	
	zeta = (mn + rho * mx) ./ (abs(repmat(x_0, m, 1) - x) + rho * mx);
	r = mean(zeta, 2);
	
end

三、灰色生成数列

  累加生成
【Matlab数学建模】灰色预测模型
  累减生成
【Matlab数学建模】灰色预测模型

function res = func(a, r)
	% a为原始数列
	% 若r为正数,则res为a的+r次累加数列
	% 若r为负数,则res为a的-r次累减数列

	if r == 0
		res = a;
		return
	end
	
	n = length(a);
	
	if r > 0
		a = func(a, r - 1);
		res = cumsum(a);
		return
	end
	
	if r < 0
		a = func(a, r + 1);
		res = a - [0, a(1 : length(a) - 1)];
		return
	end
	
end

  加权邻值生成
【Matlab数学建模】灰色预测模型
  称【Matlab数学建模】灰色预测模型为原始数列的任意一对邻值。【Matlab数学建模】灰色预测模型为后邻值,【Matlab数学建模】灰色预测模型为前邻值。对于常数【Matlab数学建模】灰色预测模型,设有:
【Matlab数学建模】灰色预测模型
  将数列【Matlab数学建模】灰色预测模型称为数列【Matlab数学建模】灰色预测模型在权【Matlab数学建模】灰色预测模型下的邻值生成数【Matlab数学建模】灰色预测模型被称为生成系数

  特别地,若【Matlab数学建模】灰色预测模型,则称:
【Matlab数学建模】灰色预测模型
  为均值生成数,也称等权邻值生成数

function z = func(x, alpha)
	
	if nargin < 2
		alpha = 0.5;
	end
	
	a = alpha * x;
	b = [0, (1 - alpha) * x(1 : length(x) - 1)];
	z = a + b;
	
end

四、灰色模型GM(1, 1)

① 灰色预测的相关概念

  G代表grey(灰色),M代表model(模型)

  设原始数列:
【Matlab数学建模】灰色预测模型
  【Matlab数学建模】灰色预测模型的一次累加数列:
【Matlab数学建模】灰色预测模型
  定义【Matlab数学建模】灰色预测模型灰导数为:
【Matlab数学建模】灰色预测模型
  令【Matlab数学建模】灰色预测模型为数列【Matlab数学建模】灰色预测模型的邻值生成数列,即:
【Matlab数学建模】灰色预测模型
  于是定义GM(1, 1)的灰微分方程模型为:
【Matlab数学建模】灰色预测模型
  其中【Matlab数学建模】灰色预测模型称为灰导数,a称为发展系数【Matlab数学建模】灰色预测模型称为白化背景值,a称为灰作用量

  取【Matlab数学建模】灰色预测模型由灰微分方程可得:
【Matlab数学建模】灰色预测模型
  引入矩阵:
【Matlab数学建模】灰色预测模型
【Matlab数学建模】灰色预测模型
【Matlab数学建模】灰色预测模型
  于是GM(1, 1)模型可以表示为:
【Matlab数学建模】灰色预测模型
【Matlab数学建模】灰色预测模型
  对于GM(1, 1)的灰微分方程,如果将【Matlab数学建模】灰色预测模型的时刻k换成连续变量t,则对应的白微分方程即是:
【Matlab数学建模】灰色预测模型
实在是懒得自己写latex了

② 灰色预测的步骤

第一步:级比检验

  设原始数列为:
【Matlab数学建模】灰色预测模型
  计算数列的级比
【Matlab数学建模】灰色预测模型
  如果所有的级比都落在可覆盖区间【Matlab数学建模】灰色预测模型内,则原始数列【Matlab数学建模】灰色预测模型可以建立GM(1, 1)模型并进行灰色预测,否则需要对数据进行变化处理,如平移变化:
【Matlab数学建模】灰色预测模型

第二步:建立GM(1, 1)模型

  原始数列为:
【Matlab数学建模】灰色预测模型
  为它建立GM(1, 1)模型:
【Matlab数学建模】灰色预测模型
  对应的白化模型是:
【Matlab数学建模】灰色预测模型
  该微分方程的解是:
【Matlab数学建模】灰色预测模型
  于是便能得到预测值:
【Matlab数学建模】灰色预测模型

function [u, f] = func(x, alpha)
	% x是原始数列
	% alpha是生成系数,默认为0.5
	% f是预测数列的一次生成数列的函数

	if nargin < 2
		alpha = 0.5;
	end
	
	x_1 = cumsum(x);
	z = alpha * x_1(2 : end) + (1 - alpha) * x_1(1 : end - 1);
	u = [-z; ones(1, length(x) - 1)]' \ x(2 : end)';
	f = @(k) (x(1) - u(2) /u(1)) * exp(-u(1) * k + u(1)) + u(2) / u(1);
	
end
第三步:检验预测值

  ① 残差检验:

  称:
【Matlab数学建模】灰色预测模型
  为相对残差

  如果【Matlab数学建模】灰色预测模型,则认为达到较高的要求。否则,若【Matlab数学建模】灰色预测模型,则认为达到一般要求。

  ② 级比偏差值检验

  计算:
【Matlab数学建模】灰色预测模型

  如果【Matlab数学建模】灰色预测模型,则认为达到较高的要求。否则,若【Matlab数学建模】灰色预测模型,则认为达到一般要求。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2022年6月8日
下一篇 2022年6月8日

相关推荐