欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

灰色系统模型和matlab

程序员文章站 2022-07-14 10:02:31
...

灰色系统模型理论及其应用

1.关联分析

因素分析的一种,关联分析实际上就是动态过程发展态势的量化比较分析。

1.粗糙式:对于关联分析,一般用excel画出图表,几何形状越接近,关联程度就越大。

2.计算式:
灰色系统模型和matlab

题目的意思是要对铅球运动员的专项成绩进行因素分析,给出的信息是每年最好成绩及16项专项素质和身体素质的时间序列资料。

数据格式如下:

项目/时间 1982 1983
铅球专项成绩 13.6
Matlab代码块
clc,clear %清空
load x.txt  %必须命名为x
for i=1:15
    x(i,:)=x(i,:)/x(i,1); %标准化数据
end
for i=16:17
    x(i,:)=x(i,:); %标准化数据(后两行数据是分秒)
end
data=x;
n=size(data,2);  %求矩阵的列数,即观测时刻的个数
ck=data(1,:); %提出比较数列
bj=data(2:end,:); %提出比较数列
m2=size(bj,1);%求比较数列的个数
for j=1:m2
    t(j,:)=bj(j,:)-ck;
end
mn=min(min(abs(t')));%求最小差
mx=max(max(abs(t'))); %求最大差
rho=0.5; %设置分辨系数
ksi=(mn+rho*mx)./(abs(t)+rho*mx); %求关联系数
r=sum(ksi')/n %求关联度
[r,rind]=sort(r,'descend'); %对关联度进行排序

排名越靠前的项目越是主要因素。但是这边无法得知是正关联还是负关联,要想知道,需要计算:
灰色系统模型和matlab

2.优势分析

ri3>rij时,称x3为优势子因素。

例题2:

灰色系统模型和matlab

解析:这个表没截全哈~但是数据的形式和上面一题一样

clc,clear
load x.txt  %必须命名为x
for i=1:15
    x(i,:)=x(i,:)/x(i,1); %标准化数据
end
for i=16:17
    x(i,:)=x(i,:); %标准化数据(后两行数据是分秒)
end
data=x;
n=size(data,1);  %求矩阵的行数,即所有因素的个数
m=size(data,2);  %求矩阵的列数,即观测时刻的个数
m1=10;m2=7; %m1为母因数个数,m2为子因素个数
ck=data(m2+1:n,:); %提出母因素数据
bj=data(1:m2,:); %提出子因素数据
m2=size(bj,1);%求比较数列的个数
for i=1:m1
    for j=1:m2
        t(j,:)=bj(j,:)-ck(i,:);;
    end
    mn=min(min(abs(t')));%求母因素i的最小差
    mx=max(max(abs(t'))); %求母因素i的最大差
    rho=0.5; %设置分辨系数
    ksi=(mn+rho*mx)./(abs(t)+rho*mx); %求关联系数
    rt=sum(ksi')/m %求关联度
    r(i,:)=rt;
end
r; %得到各个子因素对母因素的关联度,得到一个关联矩阵
%从而可以通过数值得知对每个母因素影响最大的子因素(行数为母因素,列数为子因素)

注意此处是子因素位于数据上方,母因素位于数据下方,对m1m2要有清晰的认识。

下一块内容是生成数

生成数:基本方法有累加生成,累减生成,均值生成。通过挖掘和寻找新数的规律性来增加有用信息。

灰色模型GM

灰色系统理论是基于关联空间、光滑离散函数等概念定义灰导数与回微分方程,进而用离散数据列建立微分方程形式的动态模型。需要注意的是GM(1,1)和GM(1,1)的白化型。二者的区别是白化型富有连续性。前面一个1是表示一阶方程,后面的1表示1个变量,也存在GM(1,N)和他的白化型。

然后就是最常用到的灰色预测

就是用来预测的,实质上是将随机过程当做灰色过程,将随机变量当做灰变量。

步骤:

1.数据包的检验和处理
2.建立模型
3.检验预测值
4.预测预报

小姿势

灾变预测,将大于某个值的点组成新数列称为灾变数列,不是预测数据本身的大小,而是预测异常值出现的时间。

3.灾变预测

例题3:

灰色系统模型和matlab
灰色系统模型和matlab

解析:看代码吧

a=[390.6,412,320,559.2,380.8,542.4,553,310,561,300,632,540,406.2,313.8,576,587.6,318.5]';
%录入数据
t0=find(a<=320);n=length(t0);%找出灾变数列
t1=cumsum(t0); %累加运算
B=[-0.5*(t1(1:end-1)+t1(2:end)),ones(n-1,1)];Y=t0(2:end);
r=B\Y;  %固定的公式
y=dsolve('Dy+a*y=b','y(0)=y0');
y=subs(y,{'a','b','y0'},{r(1),r(2),t1(1)});
yuce1=subs(y,'t',[0,n+1]);
%为提高精确度,先计算预测值,再显示微分方程的解
y=vpa(y,6)  %显示6位数字
yuce=diff(yuce1);%差分运算,还原数据
yuce=[t0(1),yuce];
yuce_new=yuce(n+1:end)  %求得两个预测值?这个我也没看懂,有英雄愿意回答甚好

4.灰色预测

例题4:灰色预测计算实例

灰色系统模型和matlab
灰色系统模型和matlab

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;
x=dsolve('Dx+a*x=b','x(0)=x0');
x=subs(x,{'a','b','x0'},{u(1),u(2),x1(1)});
yuce1=subs(x,'t',[0:n-1]);
%为提高精确度,先计算预测值,再显示微分方程的解
y=vpa(x,6);  %显示6位数字
yuce=[x0(1),diff(yuce1)];%差分运算,还原数据
epsilon=x0'-yuce;  %计算残差
delta=abs(epsilon./x0');  %计算相对误差
rho=1-(1-0.5*u(1))/(1+0.5*u(10)*lamda'; %计算级比偏差值

脚注

资料来自网络,我只是归纳1.


  1. 来自《灰色模型理论及应用matlab》