当前位置:首页 » 操作系统 » matlab灰色算法

matlab灰色算法

发布时间: 2022-05-10 15:10:12

1. 求问如何在matlab上面进行灰色相对关联度的计算,因为论文的关系,需要用matlab计算,但对matlab并不熟练

function f=grayrelated(X,Y)
%这里X是标准化后的参考序列,Y是评价矩阵
Y=[
71.8 90.1 0.57 0.45 0
51 40.2 0.38 0.55 10.5
52 25 0.22 0.52 12
68 90 0.38 0.38 21
28 40 0.32 0.3 18.5
51 45 0.15 0.3 5
76 95 0.7 0.55 12
87 95 0.7 0.5 9.8
76 90 0.57 0.5 11
50 35 0.32 0.35 20
68 90 0.57 0.35 18.5
82 95 0.7 0.35 0
100 200 1 1 0
97.5 180 0.94 0.95 1.3
95 160 0.88 0.9 2.5
86.3 105 0.68 0.75 6.3
82.5 90 0.6 0.7 7.5
78.8 75 0.53 0.65 8.8
75 60 0.45 0.7 7.5
68.8 52.5 0.41 0.55 13.8
62.5 45 0.38 0.5 17.5
56.3 37.5 0.34 0.45 21.3
43.8 26.3 0.28 0.35 50.6
50 30 0.3 0.4 25
37.5 22.5 0.25 0.3 75
31.3 18.8 0.23 0.25 100
18.8 11.3 0.15 0.15 168.8
25 15 0.2 0.2 125
12.5 7.5 0.1 0.1 212.5
6.3 0.8 0.05 0.05 256.3

];%输入评价矩阵Y
X=[1 1 1 1 1];%X为参考序列,均为1,个数就是指标个数,情形不同要修改个数
Len=size(Y,2);%取Y矩阵的列数,也就是指标的个数
Wen=size(Y,1);%取行数,就是目标个数
%for i=1:Len
%Y(:,i)=(Y(:,i)-mean(Y(:,i)))/sqrt(var(Y(:,i))); %将Y矩阵用统计方法标准化标准化,
%end
for i=1:Len-1
S(:,i)=(Y(:,i)-min(Y(:,i)))./(max(Y(:,i))-min(Y(:,i)));%将Y矩阵标准化,适用于越大越好型,把该型指标放在一起,前n-1个,不同情形要修改
D=(max(Y(:,5))-Y(:,5))./(max(Y(:,5))-min(Y(:,5))); %将Y矩阵标准化,适用于越小越好型,把该型指标放在一起,第n个,不同情形要修改
end
SD=[S,D];%把两种不同类型的指标组合在一起
temp=SD;% 给temp变量分配空间,其实可以不分配,只是先分配编译的速度更快
for i=1:Wen
temp(i,:)=abs(SD(i,:)-X);%计算评价矩阵与参考序列的差的绝对值
end
p=0.5;%分辨系数
related=Y;%给关联系数related变量分配空间
Min=min(min(temp));
Max=max(max(temp));
for i=1:Wen
related(i,:)=(Min+p*Max)./(temp(i,:)+p*Max);
end
f=size(1,Wen);%给关联度分配空间
for i=1:Wen
f(i)=mean(related(i,:));
end
%w=[1/Len 1/Len 1/Len 1/Len 1/Len] %若已知各指标权重,可在此修改
%f=w*related'

2. matlab中灰色预测是什么

没有现成工具函数吧。前两天我做的时候是自己写的。照着建模书本上的公式自己写就行。要包含数据预处理、灰色预测函数、结果检验三部分。
下面贴上我的代码,你做一下参考(做的是上海生产总值的灰色预测,画图等细节按照题目不同,写法不同,但基本思路就是如下):
数据预处理:

function [x0 c]=firstDo(x0)
n=length(x0);
m=0;
minX=exp(-2/(n+1));
maxX=exp(2/(n+1));
for c=0:1:2*max(x0)
y0=x0+c;
for k=2:n
lan=y0(k-1)/y0(k);
if lan<minX||lan>maxX
m=m+1;
break;
end
end
if m==0
break;
end
m=0;
end
x0=y0;
if c~=0
disp(c);
end
灰色预测以及检验:

function myGM(x0,x00)
[x0 c]=firstDo(x0);%数据预处理
if size(x0,2)>1
x0=x0';
end
n=length(x0);
x1=zeros(n,1);
x1(1)=x0(1);
for i=2:n
x1(i)=x1(i-1)+x0(i);
end
for i=1:n-1
z(i)=0.5*(x1(i)+x1(i+1));
end
z=z';
y=x0;
y(1)=[];
B=[-z ones(n-1,1)];
au=inv(B'*B)*B'*y;
syms t;
a=au(1);u=au(2);
gmFun=(x0(1)-u/a)*exp(-a*t)+u/a;
gmFun1=vpa((x0(1)-u/a),2)*exp(-vpa(a,2)*t)+vpa(u/a,2);
funStr=latex(gmFun1);
fprintf('\n');
fprintf('函数表达式代码:\n');disp(funStr);
fprintf('\n');
X1(1)=x0(1);
X0(1)=x0(1);
for i=1:n
X1(i+1)=subs(gmFun,t,i);
X0(i+1)=X1(i+1)-X1(i);
end
X0(n+1)=[];X0=X0';X0true=X0-c;
er=X0-x0;
q=er./x0;
disp('方差比C:');C=std(er)/std(x0);disp(C);
disp('小误差概率P:');P=length(find(abs(er)<0.6745*std(x0)))/n;disp(P);

for i=n:(n+7)
X1(i+1)=subs(gmFun,t,i);
X0(i+1)=X1(i+1)-X1(i);
end
X0(n+8)=[];

X0true=X0-c;
disp('预测值');disp(X0true);

years=1990:2010;
x0true=[x0-c;x00];
figure,plot(years,x0true,'*',years,X0true);
xlabel('年份');
ylabel('亿元');
hold on ;

3. 各位朋友帮帮忙,用matlab求灰色预测模型,这道题完全符合灰色预测模型的做题步骤

我一直用这个程序你看看。。。。。
MATLAB实现灰色预测程序
function [y,p,e]=huise_1_1(X,k) %灰色模型的malab程序
%Example [y,p]=gm_1_1([200 250 300 350],2)
%接口描述: X的预测的初始数列,|X|>4,K是指向后进行预测的个数
%命令格式:程序保存的文件名,eg:huise.m 则命令是: huise([579.8 547.5 527.0 492.3 437.0],5)
if nargout>3;
error('Too many output argument.');
end
if nargin==1,k=1;x_orig=X;

elseif nargin==0|nargin>2
error('Wrong number of input arguments.');
end
x_orig=X;
predict=k; %AGO 处理,即是对初始数列进行一阶累加
x=cumsum(x_orig); %计算系数(a 和 u)------------------------
n=length(x_orig); %生成矩阵 B

for i=1:(n-1);
B(i)=-(x(i)+x(i+1))/2;
end
B=[B' ones(n-1,1)]; %生成矩阵 Y

for i=1:(n-1);
y(i)=x_orig(i+1);
end
Y=y'; %计算系数 a=au(1) u=au(2)

au=(inv(B'*B))*(B'*Y); %--------------------------------------------------------
%把huise模型公式转换成符号
coef1=au(2)/au(1);
coef2=x_orig(1)-coef1;
coef3=0-au(1);
costr1=num2str(coef1);
costr2=num2str(abs(coef2));
costr3=num2str(coef3);
eq=strcat(costr1,'+',costr2,'e^',costr3,'*(t-1))'); %计算每一个值

for t=1:(n+predict)
mcv(t)=coef1+coef2*exp(coef3*(t-1));
end
x_mcv0=diff(mcv);
x_mcve=[x_orig(1) x_mcv0] %输出图形中的各点
x_mcv=diff(mcv(1:end-predict));
x_orig_n=x_orig(2:end);
x_c_error=x_orig_n-x_mcv;
x_error=mean(abs(x_c_error./x_orig_n));

if x_error>0.2 %相对误差的均值
disp('model disqualification!');
elseif x_error>0.1
disp('model check out');
else
disp('model is perfect!');
end
plot(1:n,x_orig,'o',1:n+predict,x_mcve);
p=x_mcve(end-predict+1:end); %画出预测模型和初始数列的点
xlabel('年份(从第一个数据年份起)');
ylabel('产水量(万吨)');
title('灰度模型 GM(1,1)');
grid on
y=eq;
e=x_error;
p=x_mcve(end-predict+1:end);

4. 灰色预测matlab代码怎么写

这是我曾经写过的一个灰色预测的程序:第一个文件为函数,需要在调用时输入原始数据x0和预测周期T, 第二个文件用于计算灰色关联度,使用时直接修改相关参数和原始数据。

--------------------------------------------------------------------------

第一个文件(用于灰色建模):grymdl.m

--------------------------------------------------------------------------

functionGM=grymdl(x0,T)
%输入原始数据x0
%T为从最后一个历史数据算起的第T时点
x1=zeros(1,length(x0));B=zeros(length(x0)-1,2);
yn=zeros(length(x0)-1,1);Hatx0=zeros(1,length(x0)+T);
Hatx00=zeros(1,length(x0));Hatx1=zeros(1,length(x0)+T);
epsilon=zeros(length(x0),1);omega=zeros(length(x0),1);
fori=1:length(x0)
forj=1:i
x1(i)=x1(i)+x0(j);
end
end
fori=1:length(x0)-1
B(i,1)=(-1/2)*(x1(i)+x1(i+1));
B(i,2)=1;
yn(i)=x0(i+1);
end
HatA=(inv(B'*B))*B'*yn;%GM(1,1)模型参数估计
fork=1:length(x0)+T
Hatx1(k)=(x0(1)-HatA(2)/HatA(1))*exp(-HatA(1)*(k-1))+HatA(2)/HatA(1);
end
Hatx0(1)=Hatx1(1);
fork=2:length(x0)+T
Hatx0(k)=Hatx1(k)-Hatx1(k-1);%累计还原得到历史数据的模拟值
end
fori=1:length(x0)%开始模型检验
epsilon(i)=x0(i)-Hatx0(i);
omega(i)=(epsilon(i)/x0(i))*100;
end
x0;
HatA;
Hatx0;
epsilon;
omega;
c=std(epsilon)/std(x0);
p=0;
fori=1:length(x0)
ifabs(epsilon(i)-mean(epsilon))<0.6745*std(x0)
p=p+1;
end
end
p=p/length(x0);
ifp>=0.95
M1=1;
elseifp>=0.8
M1=2;
elseifp>=0.7
M1=3;
else
M1=4;
end

ifc<=0.35
M2=1;
elseifc<=0.5
M2=2;
elseifc<=0.65
M2=3;
else
M2=4;
end
M=max(M1,M2);
ifM==1
disp('Themodelisgood,andtheforecastis:'),
disp(Hatx0(length(x0)+T))
elseifM==2
disp('Themodeliseligibility,andtheforecastis:'),
disp(Hatx0(length(x0)+T))
elseifM==3
disp('Themodelisnotgood,andtheforecastis:'),
disp(Hatx0(length(x0)+T))
else
disp('Themodelisbadandtryagain')
disp(Hatx0(length(x0)+T))
end
fori=1:length(x0)
Hatx00(i)=Hatx0(i);
end
z=1:length(x0);
plot(z,x0,'-',z,Hatx00,'*:')%将原始数据和模拟值画在一个图上帮助观察
text(2,x0(2),'Historydata:realline')
text(length(x0)/2,Hatx00(length(x0))/2,'Simulationdata:brokenline')
GM=Hatx0(length(x0)+T);

--------------------------------------------------------------------------------

第二个文件(用于计算灰色关联度):grydgr.m

--------------------------------------------------------------------------------

x=[26.4,40.83,5,18.5,27,4.9;
32.56,50.36,6.5,23.8,34.9,5.97;
41.16,63.66,7.9,30.6,45,6.83;
51.82,80.15,9.6,39.43,60.76,8.21;
70.58,109.16,11.3,52.1,81.8,9.78;
111.47,136.12,15,73.92,118.12,12.3;
127.16,166.7,18,118.17,184.51,16.75;
165.99,196.91,20.66,156.65,240.83,21.49;
246.76,257.56,24.15,218.3,333.4,27.1];%原始数据
delta=zeros(size(x,1),size(x,2)-1);%初始化绝对差
yita=zeros(size(delta,1),size(delta,2));%初始化关联系数
fori=1:size(x,2)
x(:,i)=x(:,i)./x(1,i);%无量纲化处理
end
fori=1:(size(x,2)-1)
delta(:,i)=abs(x(:,1)-x(:,i+1));%求解delta
end
delta_min=min(min(delta,[],1));%求解最小二级差
delta_max=max(max(delta,[],1));%求解最大二级差
rou=0.5;%设定分辨系数为0.5
fori=1:size(delta,1)
forj=1:size(delta,2)
yita(i,j)=(delta_min+rou*delta_max)/(delta(i,j)+rou*delta_max);%计算关联系数
end
end
r=sum(yita)./size(yita,1);%计算灰色关联

5. matlab里画图怎么画成灰色的 灰色怎么调 黑色是k么 灰色呢

1、命令:直接选好,对应的颜色>> x=0:0.1:2*pi;>> plot(x,sin(x),'r')>> plot(x,sin(x),'r')。

6. 灰色预测的matlab代码怎么写

用matlab写灰色预测GM(1,1)的代码,应该包含下列几个内容:
1、已知基本数据序列;
2、根据数据,计算灰方程的系数(a、b);
3、根据灰方程的系数,对未来进行预测;
4、根据预测数据,计算相对误差,计算后验概率,预测精度

7. matlab 怎么做灰色预测

最后几行改两个地方就可以了:
for i=1:n+11 %计算数据估计值的累加数列,如改为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+10%如改n为n+m-1,可预测后m-1个值
var(i+1,:)=ago(i+1,:)-ago(i,:); %估计值的累加数列的还原,并计算出下一预测值
end

8. 灰色预测的matlab代码怎么写

clc

clearall

%本程序主要用来计算根据灰色理论建立的模型的预测值。

%应用的数学模型是GM(1,1)。

%原始数据的处理方法是一次累加法。

y=[1662.872163.41965.352472.482900.663034.932755.532073462];%已知数据

n=length(y);

yy=ones(n,1);

yy(1)=y(1);

fori=2:n

yy(i)=yy(i-1)+y(i);

end

B=ones(n-1,2);

fori=1:(n-1)

B(i,1)=-(yy(i)+yy(i+1))/2;

B(i,2)=1;

end

BT=B';

forj=1:n-1

YN(j)=y(j+1);

end

YN=YN';

A=inv(BT*B)*BT*YN;

a=A(1);

u=A(2);

t=u/a;

t_test=4;%需要预测个数

i=1:t_test+n;

yys(i+1)=(y(1)-t).*exp(-a.*i)+t;

yys(1)=y(1);

forj=n+t_test:-1:2

ys(j)=yys(j)-yys(j-1);

end

x=1:n;

xs=2:n+t_test;

yn=ys(2:n+t_test);

plot(x,y,'^r',xs,yn,'*-b');

det=0;

fori=2:n

det=det+abs(yn(i)-y(i));

end

det=det/(n-1);

disp(['百分绝对误差为:',num2str(det),'%']);

disp(['预测值为:',num2str(ys(n+1:n+t_test))]);

输出结果:

百分绝对误差为:228.3113%

预测值为:3710.1523978.21424265.64424573.8413

热点内容
linux只读文件修改 发布:2024-10-09 01:13:08 浏览:82
安卓机电脑用什么检测 发布:2024-10-09 01:10:20 浏览:670
有关数据库的工作 发布:2024-10-09 00:52:12 浏览:732
代码分析算法 发布:2024-10-09 00:47:11 浏览:160
芯片写程序需要配置哪些文件 发布:2024-10-09 00:38:39 浏览:934
存储储存搬运 发布:2024-10-09 00:28:42 浏览:717
吃鸡电脑适合什么配置 发布:2024-10-09 00:18:24 浏览:229
java线程实例 发布:2024-10-09 00:05:34 浏览:193
文档放在安卓手机哪里 发布:2024-10-08 23:35:00 浏览:439
我的世界服务器拔刀强化 发布:2024-10-08 22:59:37 浏览:431