當前位置:首頁 » 操作系統 » 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

熱點內容
死歌腳本 發布:2024-10-09 03:11:55 瀏覽:85
企業內網搭建電影伺服器侵權嗎 發布:2024-10-09 03:07:14 瀏覽:105
python讀取jpg 發布:2024-10-09 02:50:22 瀏覽:154
王者榮耀的伺服器ip在哪 發布:2024-10-09 02:44:48 瀏覽:77
安卓怎麼下載李寧 發布:2024-10-09 02:31:37 瀏覽:343
配置不高pr哪個版本最好用 發布:2024-10-09 01:57:15 瀏覽:789
編譯OpenWrtipv6 發布:2024-10-09 01:51:40 瀏覽:124
python寫入位元組 發布:2024-10-09 01:24:22 瀏覽:650
如何設置超高難度密碼 發布:2024-10-09 01:19:05 瀏覽:180
linux只讀文件修改 發布:2024-10-09 01:13:08 瀏覽:87