MATLAB学习系列29. 灰色预测

合集下载

Matlab+灰色预测模型模型GM(1,1)

Matlab+灰色预测模型模型GM(1,1)

GM(1,1)灰色预测模型IntroductionInitial给定原始序列:x(0) =(x(0)(1), x(0)(2), x(0)(3)…, x(0)(n))Step 1一次AGO(1-AGO)生成序列,以弱化原始序列的随机性和波动性:x(1) =(x(1)(1), x(1)(2), x(1)(3)…, x(1)(n)) Matlab Programclearsyms a b;c=[a b]';fid=fopen('.\Grey Model\test.txt');x0=fscanf(fid,'%f');x0=x0';fclose(fid);x1=cumsum(x0); %原始数据累加n=length(x0);for i=1:(n-1)z(i)=(x1(i)+x1(i+1))/2; %生成累加矩阵end%计算待定参数的值Y=x0;Y(1)=[];Y=Y';B=[-z;ones(1,n-1)];B=B';c=inv(B'*B)*B'*Y;c=c';a=c(1);b=c(2);%预测后续数据%预测之后10个时间单位的数据xx1=[];xx1(1)=x0(1);for i=2:(n+10)xx1(i)=(x0(1)-b/a)/exp(a*(i-1))+b/a; endxx0=[];xx0(1)=x0(1);Step 2(1) dx (1)dt+ax (1)(t )=u ,式中a, u 为待定系数。

灰微分方程模型为:x (0)(k )+az (1)(k )=u ,z 为背景值z (1)(k )=1/2(x (1)(k )+x (1)(k −1))(2) 构造矩阵B 和数据向量Y nY n =Ba ̂Y n =[ x (0)(2)x (0)(3)⋮x (0)(n )] , B =[ −1/2(x (1)(1)+x (1)(2)),−1/2(x (1)(2)+x (1)(3)),⋮−1/2(x (1)(n −1)+x (1)(n )), 1 1 ⋮ 1]a ̂=(au)=(B T B)−1B T Y nStep 3模型响应函数x ̂(1)(k +1)=(x (0)(1)−u a )e −ak +u ax ̂(0)(k +1)=x ̂(1)(k +1)−x ̂(1)(k )Step 4检验和判断GM(1,1)模型的精度 (1) 残差检验for i=2:(n+10)xx0(i)=xx1(i)-xx1(i-1); end%关联度检验 for i=1:ne(i)=abs(x0(i)-xx0(i)); endmmax=max(e); for i=1:nee(i)=0.5*mmax/(e(i)+0.5*mmax); endr=sum(ee)/n; %后验差检验x0bar=sum(x0)/n; s1=0; for i=1:ns1=s1+(x0(i)-x0bar)^2; ends1=sqrt(s1/n); s2=0;ebar=sum(e)/n; for i=1:ns2=s2+(e(i)-ebar)^2; ends2=sqrt(s2/n); C=s2/s1; p=0;for i=1:nif abs(e(i)-ebar)<0.6745*s1绝对误差:ε(k)=|x(0)(k)−x̂(0)(k)|相对误差:Φ(k)=ε(k)x(0)(k)(2) 关联度检验分辨率β一般取0.5,此时若关联度大于0.6则认为模型可接受(3) 后验差检验和小误差概率原始序列标准差:S1=√∑[x(0)(i)−x̅(0)]2n绝对误差序列标准差:S2=√∑[ε(i)−ε̅]2n计算方差比:C=S2S1小误差概率:P=P{|ε(i)−ε̅|<0.6745S1}p=p+1;endendp=p/n;Cpif p>0.95&C<0.35disp('预测精度好');else if p>0.8&C<0.5disp('预测合格');else if p>0.7&C<0.65disp('预测勉强合格'); elsedisp('预测不合格'); endendend%原始数据与预测数据进行比较t1=1:n;t2=1:(n+10);xx0plot(t1,x0,'o',t2,xx0)。

灰色预测MATLAB程序

灰色预测MATLAB程序

作用:求累加数列、求a b的值、求预测方程、求残差clc %清屏,以使结果独立显示x=[ ];format long; %设置计算精度if length(x(:,1))==1 %对输入矩阵进行判断,如不是一维列矩阵,进行转置变换 x=x';endn=length(x); %取输入数据的样本量z=0;for i=1:n %计算累加值,并将值赋予矩阵bez=z+x(i,:);be(i,:)=z;endfor i=2:n %对原始数列平行移位y(i-1,:)=x(i,:);endfor i=1:n-1 %计算数据矩阵B的第一列数据c(i,:)=*(be(i,:)+be(i+1,:));endfor j=1:n-1 %计算数据矩阵B的第二列数据e(j,:)=1;endfor i=1:n-1 %构造数据矩阵BB(i,1)=c(i,:);B(i,2)=e(i,:);endalpha=inv(B'*B)*B'*y; %计算参数矩阵即a b的值for i=1:n+1 %计算数据估计值的累加数列,如改为n+1为n+m可预测后m-1个值ago(i,:)=(x(1,:)-alpha(2,:)/alpha(1,:))*exp(-alpha(1,:)*(i-1))+alpha(2,:)/alpha(1,: );%显示输出预测值的累加数列endvar(1,:)=ago(1,:) %显示输出预测值for i=1:n %如改n为n+m-1,可预测后m-1个值var(i+1,:)=ago(i+1,:)-ago(i,:); %估计值的累加数列的还原,并计算出下一预测值endfor i=1:nerror(i,:)=x(i,:)-var(i,:); %计算残差endc=std(error)/std(x); %调用统计工具箱的标准差函数计算后验差的比值c ago %显示输出预测值的累加数列alpha %显示输出参数数列var %显示输出预测值error %显示输出误差c %显示后验差的比值作用:数据处理判断是否可以用灰色预测、求级比、求累加数列、求a b的值、求预测方程clc,clearx0=[ ]'; %注意这里为列向量n=length(x0);lamda=x0(1:n-1)./x0(2:n) %计算级比range=minmax(lamda') %计算级比的范围x1=cumsum(x0) %累加运算B=[*(x1(1:n-1)+x1(2:n)),ones(n-1,1)];Y=x0(2:n);u=B\Y %拟合参数u(1)=a,u(2)=bx=dsolve('Dx+a*x=b','x(0)=x0'); %求微分方程的符号解x=subs(x,{'a','b','x0'},{u(1),u(2),x0(1)}) %代入估计参数值和初始值yuce1=subs(x,'t',[0:n-1]); %求已知数据的预测值y=vpa(x,6) %其中的6表示显示6位数字yuce=[x0(1),diff(yuce1)] %差分运算,还原数据。

MATLAB_+_灰色预测程序,数学建模

MATLAB_+_灰色预测程序,数学建模

MATLAB实现灰色预测程序灰色预测很好的东西呐,······~~··`~··~~~~~~~~~~~~~~~~~~~~~````````````` fon [feval,au,ec,C,P]=GM1_1(x, r)if nrgin<2myar=0;end[mx,nx]=size(x);if mx==1x=x';endn=length(x);for i=2:nz(i-1)=0.5*x1(i)+0.5*x1(i-1);endY=x(2:end);B(:,1)=-z;2)/au(1));yc(1)=x(1);for k=1:n+myear-1y1(k+1)=pm*exp(-au*k)+a(2)/au(1);yc(k+1)=y1(k+1)-y1(k);endfeval=yc';ex=ec./x;r=0;rou=0.5;for k=1:nr=r+rou* s(ec(k))+rou*max(a (ec))); endr=r/n;%%====%原始序列的标准差s1=std(x);%计算残差的标准差s2=std(ec);%计算CC=s2/s1;%计算后验概率deta=ec-mean(ec);index=fineta)<0.6745*s1);P=length(index)/n;%%if C<0.35&P>0.95disp('预测精度为一级')elsP>0.8disp('预测精度为二级')elseif >0.7disp('预测精度为三级')elsedisp('预测精度过低,需要对模型进行修正') endif r>0.6disp('关联度符合检验要求')end%%%%=========t1=1:length(x);t2=1:lengt);plot(t1,x,'b--+',t2,feval,'r-o')legend('原始数据','预测数据')另一个程序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.3437.0],5)if nargout>3;r('Too maoutput argument.');enif nargin==1,k=1;x_orig=X;elseif ==0|nargin>2errr('Wrong nu arguments.');endx_rig=X;predict=k; %AGO 处理,即是对初始数列进行一阶累加x=cumsum(x_orig); %计算系数(a 和u)------------------------n=leh(x_orig); %生成矩阵Bfor i=1:(n-1);B(i)=-(x(i)+x(i+1))/2;enB=[B' ones(n-1,1)]; %生成矩阵Yfor i=1:(n-1);y(i)=x_ori(i+1);edY=y'; %计算系数a=au(1) u=au(2) au=(inv(B'*B))*(B'*Y); %--------------------------------------------------------%把huise模型公式转换成符号coef1=au(2)/au(1);coef2=x_or (1)-coef1;co3=0-au(1);costr1=nm2str(coef1);costr2=numstr(abs(coef2));costr3=ntr(coef3);eq=strcat(ctr1,'+',costr2,'e^',costr3,'*(t-1))'); %计算每一个值for t=1:(n+predict)mcv(t)=co1+coef2*exp(coef3*(t-1));endx_mcv0=diff(mcv);x_mcve=[x_orig(1) x_mcv0] %输出图形中的各点x_c_error=x_orig_n-x_mcv;x_errr=mn(abs(x_c_error./x_orig_n));if x_error>0.2 %相对误差的均值disp('del disqualification!');elseif x_error>0.1dip('model check out');disp('model is perfect!');endplot(1:n,x_orig,'o',1:n+predict,x_mcve);p=x_mcve(end-predict+1:end); %画出预测模型和初始数列的点xlabel('年份(从第一个数据年份起)');ylabel('产水量(万吨)');tie('灰度模型GM(1,1)');grid ony=eq;e=x_error;p=x_mcve(end-predict+1:end);。

灰色预测MATLAB程序

灰色预测MATLAB程序

灰色预测专设工⑼他QA—叫吋)为原始数列.其1次累❖加生成数列为恥=妙①曲⑵,…卅何),其中X° 仇)二工* ° (0.址=1=2= -:n5-1卷定义卫的决导数为d(k) = *町(上)=x 叫咼-x cl)(Jt-l).令为数列工①的邻值生成数列.即却(去)=^(*) + (1- a)x0)(t-lX于是定义GM (L 1)的灰微分方程模型为d(k)-血⑴住)=K即或严>(£) + “尹⑻=人⑴在式(1)中』。

>(灼称为灰导数,我称为发展系数, 弧称为白化背景值,b称为灰作用量乜将时刻表殳二2「3「/代入(1)式有V!1「—ay=代⑶ B =Ib*- :X闵0)-Z,:](K)1于是G\I <1»1)複至可表示为Y = Bu.現在问题归结为求sb 在值。

用一元线性回归・即最小二秦法求它们的活计值 为注二实陌上回归分析中求估计值是用软件计尊的・有标准程序求解,iOmaClab 等。

GM <1» 1>的白化晏対于G\I <1> 1)的灰微分方程(1) >如果将灰导数打(Q 的时刻 视为连绫变里"则x°)视为时问(函数卅⑺,于是*〉(Q 対血于导数里级 心2 >白化背臬值申的对应于导数卅⑴。

于是G\I (1,1)的坝徽 分方樂対应于的白微分方程为内・则数堀列X©可以塗互G\I <19 1) 且可以进行页色预测。

否朋,対数摄做适当的克换处理■如平移叢换:取C 使得鞍据列严伙)=工⑴伙)+ G 上=1,2,…,的级比都華住可吝禎盖内。

心⑴⑴ + o?i> (r)二◎ dr<2)GM mi )质色预测的步骤1 •教摇的枪绘与处連为了ftilGAl (1,1)建複方法的可行性,亲要为已知期S 做必要的检蛉处理。

设原始教据列为了 逛=(乂°(1)*6(2)严炉00; >计算数列的级比如果所有的级比都落在可容覆盖区间 • fc =A-2,3"・如果対所有的|p 伙)|<0・1 -则认为达到较高的要求,否则 若旳所有的|。

灰色预测MATLAB程序

灰色预测MATLAB程序

灰色预测心设尹曲⑴#为原始数列,其1次累<加生成数列为炉=(孝①宀2\S,其中©=2^°:⑺卫=12…止i-1尋定文沙的灰导数为d(Jt)=玄㈣(Jt)=尤⑴的-工⑴(*-1).令尹为数列壬⑴的邻值生成数列,即尹)(町=加小(町十(1—a)x山(k-1).于是定文GM(1T1)的灰微分方程模型为d(k)+az①(上)=&_即或.严⑹+盘⑴懐)=乩⑴在式(1)中口①的称为灰导数’熬称为发展系数'弧称为白化背景值,b称为灰作用量。

将时刻表庄=23…用代入(O式有j<0)(2)-az⑴(2)=工®⑶—俺叫巧=»于是GMIL)樫型可表示为r=现在问题归结为求巧h在值。

用一元绒性回归,即最小二垂進求它们的估计值住=[]卜护跖护F奕厢上回归分析中求诂计值是用软件计算的,有标淮程博求解,如山訥甜等。

GM(1.1)的白化型对于的(1-1)的获微分方程⑴,如果将解导教矿悶的时報=%…屮观対连续叢里"则工⑴衩为时间i函敕卅®,于是-<'W耐应于导敕重级必%),白化背杲值刃(時对应于导數申⑴。

于是GM(1,1)的换微分方嗨对应于的白微分方程为写®4曲%「)=也⑵GAI(1>1)换色预刪的步叢1-數堀的椅噓弓处理为了保证©M(B1)屋複方达的可行性・需要対已却皴堀锁必要的检峻处Ho 设療皓数攥列为了-计算埶列的级比如果所有的级比都落在可容覆盖区间盂-內・则數摒列X糾可咲建立G*ICL-1)複型且可以避行页色预测。

否则,丙軌据懺适当的叢换处理,如平移銮换:取C使得敕培列严⑹二工蚀盘)+匚用二12…”的级比都落在可啓禎盖内。

(1)残差檢验:计算相对薙差Z 建立GM (L T 1)複型不妬设少弋以m 叫唠霸足上面的要求,以它芮議堀列建立GM(1>1)型蛊(仍(i)+血C1\A)=b ・用回归分祈求得目上的估计值"于是相应的白化模型为 气^十小卄工解为工叱)=0)①—勺中1-色-⑶ 应Q于是停到预测值壬⑴(上+1)=0叫1)一勺>加+仝血二12…卫一1=aa伙而相应地得到预«=x co \t +1)=x 0)(t+l)-x a)(i)3i =1,2,-?n-l ?如果对所有的^<0.1・则认为达到鞭嵩的要求:否则,若耐所有的|^)1<0^,则认対达到一般要求©(2)级比偏差値桧验:计算能)=1-呂学©如果对所有的|,则认为达列较高的要求孑吾则若对斫有的,则认为达到一般要求O灰色预测计算实例^…;=:=-■■■■昏例北方某城市1986—1992年道路交通噪声平均声级数据见表6序号年吶寺表拆市近年来交通噪声数据[眶(应)]二諾;二319S872.4第—爭:级比检验建立丢通噪屛均声级数锯时间序列如下:4198972.1j 1990?1.4 619?17201199771.6艸=(•严①卫购(2)厂卅⑺) =(711,72.4.71.4,72.1.71.4,7UQ.71.6)些(1)求级比k(k)忠防护住T)2=(几⑵山⑶.…也⑺)g=(0.982JJ.0042J.0098-0.9917J.0056)(2)级比判断由于所有的X.(10e[0.982J.009S],k=2,3.6故可以用双0)作满意的GM(1,1)建模’第二步:GM(1,1)建模(1)对原始数据X®作一次累加,即卞⑴=(71.L143.5215.9.288359.4.431.4,503)(2)构造数据矩阵B及数据向量Y-2)—H 弋3/>1⑶讦算1T心求解得F'⑴=(工倒〔1〉_-)e 弋Q f+-1*^+1)=0<l,U)--)£-t +-=-3092^--^+31000⑶求生咸数列值歸型齊看:n令“is 那血由上面的碉醯数可甲得,其中取菱由龙⑴(i}=恥壮曲5加得丁I —"炉閃=进悶-进德-尊(71儿72.4.72.2:72.1:71.9:71.7,71.6)^}=(s"a >亍⑴⑵,…,网⑺A<第三步;模型检验•>模型的各种检验指标值的计算结果见表工 •t*表7GM(1检验表<序号年俯原始值模型值残差相对误差级比偏差•>1 19S6 71.1 71.1<219S7 72.4 72.4 -0.0057 0.01%0.0023 <3 19S S 72.4 72.2 0.163S 0.23%0.0203 •>4 19S9 72.1 72.1 0.0329 0.05%-O.(K H8 •>5199071.4 71.9 -0-49S4 0.7%-0.0074 <61991 72.0 71.7 0.21599 037%0.0107<71992 71.6 71.6 0.037S0.05%-0.0032于是得到目=山的餡,立欖型7-B)'1B TY=(dt0.0023 72.6573dt+0.002ix (1>=72.657^心经验证・该模型的精度较高.可进行预测和预报计算的Matlab 程序如下:仃坝测和预报n=length(x); z=0;%取输入数据的样本量for i=1:nz=z+x(i,:)be(i,:)=z; %计算累加值,并将值赋予矩阵beend for i=2:n %对y(i-1,:)=x(i,:)%对原始数列平行移位 endfor i=1:n-1%计算数据矩阵B 的第一列数据c(i,:)=-0.5*(be(i,:)+be(i+1,:)); clCjdearxO=[71H 72.472A 72J71477m c n.lengthtxO);*'b%注意这里为列帖lamda =xD(l :n-1),A0(2:n)%计算级比range =minmaxflamda f )%计算级比的范阖 X1=cumsum(xO);%累加运算B=['0,5*(xl(l ;n ^l)+xl(2:n))t ones(n -1,1)]TY 二甸(2:町;口=B\Y%拟合参数u(l>=a .u(2)=bx=dsolve (+a 'x =b\f x(0)-xO^J ;%求徴分方程的特号解x =subs(xJ*a\,b r /xO ,Mu(l)P u(2)t xO(l)|)i%代入荷计痹擞值和初蜡值yucel =subs %求巳知数擁的扳测位y-vpa(x,6)奄其中的石表示显不白位数字yuce=[x0(l)T diff(yucel)]%羔分运算,还原数据 epsiIon=-yuce%计算战羞作用:求累加数列、求ab 的值、求预测方程、求残差clc %清屏,以使结果独立显示x=[71.172.472.472.171.472.071.6]; format long ;%设置计算精度if length(x(:,1))==1%对输入矩阵进行判断,如不是一维列矩阵,进行转置变换x=x endM.I-JTVorhlllst 模型endfor j=1:n-1%计算数据矩阵B的第二列数据e(j,:)=1;endfor i=1:n-1%构造数据矩阵BB(i,1)=c(i,:);B(i,2)=e(i,:);endalpha=inv(B'*B)*B'*y;%计算参数矩阵即ab的值for i=1:n+1%计算数据估计值的累加数列,如改为n+1为n+m可预测后m-1个值ago(i,:)=(x(1,:)-alpha(2,:)/alpha(1,:))*exp(-alpha(1,:)*(i-1))+alpha( 2,:)/alpha(1,:);%显示输出预测值的累加数列endvar(1,:)=ago(1,: )for i=1:n%显示输出预测值%如改n为n+m-1,可预测后m-1个值var(i+1,:)=ago(i+1,:)-ago(i,:);%估计值的累加数列的还原,并计算出下一预测值endfor i=1:nerror(i,:)=x(i,:)-var(i,:);%计算残差endc=std(error)/std(x);%调用统计工具箱的标准差函数计算后验差的比值cago alpha var%显示输出预测值的累加数列%显示输出参数数列%显示输出预测值error %显示输出误差c %显示后验差的比值作用:数据处理判断是否可以用灰色预测、求级比、求累加数列、求ab的值、求预测方程clc,clearx0=[71.172.472.472.171.472.071.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%拟合参数u(1)=a,u(2)=bx=dsolve('Dx+a*x=b','x(0)=x0');%求微分方程的符号解x=subs(x,{'a','b','x0'},{u(1),u(2),x0(1)})%代入估计参数值和初始值yuce1=subs(x,'t',[0:n-1]);%求已知数据的预测值y=vpa(x,6)%其中的6表示显示6位数字yuce=[x0(1),diff(yuce1)]%差分运算,还原数据。

Matlab教程课件-灰色预测模型

Matlab教程课件-灰色预测模型

2
i3 =1
k = 4, x (1) (4) = ∑ x (0) (i ) = x (1) (3) + x (0) (4) = 9.9 + 3.6 = 13.5
i =1 5
k = 5, x (5) =
(1)
(0) (1) (0) = + x i x x ( ) (4) (5) = 13.5 + 3.8 = 17.3 ∑ i =1
对于原始数据列依次做前后相邻的两个数据相减的运 算过程称为累减生成过程IAGO。如果原始数据列为
x (1) = ( x (1) (1), x (1) ( 2), , x (1) ( n))
令 x ( 0 ) ( k ) = x (1) ( k ) − x (1) ( k − 1), k = 2,3, , n,
为均值生成数,也称等权邻值生成数
9
累加生成计算示例
例:x (0)=(x (0) (k) ︱k=1,2,3,4,5) =x(0)(1),x(0)(2),x(0)(3),x(0)(4),x(0)(5) =(3.2,3.3,3.4,3.6,3.8) 求 x(1)(k) 解: (1) (0) k = 1, x = (1) x= (1) 3.2
8
3. 加权邻值生成
设原始数列为x ( 0 ) = ( x ( 0 ) (1), x ( 0 ) (2), , x ( 0 ) (n))
称为数列的邻值。 x (k − 1), x (k )
(0) (0)
x
(0)
x (0) (k − 1)为后邻值,为前邻值 x (0) (k )
对于常数,令 α ∈ [0,1]
10
累加生成的特点 一般经济数列都是非负数列。累加生成能使任意非负 数列、摆动的与非摆动的,转化为非减的、递增的

matlab灰色预测模型函数

matlab灰色预测模型函数

matlab灰色预测模型函数Matlab是一种广泛应用于科学计算和工程领域的软件工具,它提供了许多函数和工具箱,用于数据分析和建模。

其中一个重要的函数是灰色预测模型函数,它可以用来预测和分析时间序列数据。

本文将介绍灰色预测模型函数的原理和应用,并通过一个示例来演示其使用方法。

灰色预测模型是一种基于灰色系统理论的预测方法,它适用于样本数据较少、不完整或不规律的情况。

在灰色预测模型中,数据被分为两类:发展数据和规律数据。

发展数据是指拥有较完整信息的数据,规律数据是指缺乏完整信息的数据。

通过对规律数据进行处理和建模,可以预测未来数据的趋势和变化。

在Matlab中,可以使用灰色预测模型函数进行数据预测和分析。

该函数可以通过输入历史数据和需要预测的时间步长来生成预测结果。

具体的使用方法如下:1. 导入数据:首先需要导入需要预测的时间序列数据。

可以使用Matlab中的数据导入函数来读取数据文件或手动输入数据。

2. 数据预处理:对导入的数据进行预处理,包括去除异常值、平滑数据等。

可以使用Matlab中的数据处理函数来完成这些操作。

3. 构建灰色模型:使用灰色预测模型函数来构建灰色模型。

该函数需要输入历史数据和需要预测的时间步长。

4. 模型评估:对构建的灰色模型进行评估,包括计算预测误差、拟合度等指标。

可以使用Matlab中的统计函数来完成这些计算。

5. 预测结果:根据构建的灰色模型,可以生成未来数据的预测结果。

可以使用Matlab中的预测函数来完成这一步骤。

下面通过一个示例来演示灰色预测模型函数的使用方法。

假设我们有一个销售数据的时间序列,我们希望预测未来三个月的销售额。

首先,我们需要导入销售数据,并进行数据预处理。

然后,我们可以使用灰色预测模型函数来构建灰色模型。

最后,我们可以通过预测函数来生成未来三个月的销售额预测结果。

在实际操作中,我们可能还需要对模型进行参数调优和模型选择。

可以使用交叉验证等方法来选择最优的参数和模型。

灰色预测MATLAB程序

灰色预测MATLAB程序

灰色预测作用:求累加数列、求a b的值、求预测方程、求残差clc %清屏,以使结果独立显示x=[71.1 72.4 72.4 72.1 71.4 72.0 71.6];format long; %设置计算精度if length(x(:,1))==1 %对输入矩阵进行判断,如不是一维列矩阵,进行转置变换x=x';endn=length(x); %取输入数据的样本量z=0;for i=1:n %计算累加值,并将值赋予矩阵bez=z+x(i,:);be(i,:)=z;endfor i=2:n %对原始数列平行移位y(i-1,:)=x(i,:);endfor i=1:n-1 %计算数据矩阵B的第一列数据c(i,:)=-0.5*(be(i,:)+be(i+1,:));endfor j=1:n-1 %计算数据矩阵B的第二列数据e(j,:)=1;endfor i=1:n-1 %构造数据矩阵BB(i,1)=c(i,:);B(i,2)=e(i,:);endalpha=inv(B'*B)*B'*y; %计算参数矩阵即a b的值for i=1:n+1 %计算数据估计值的累加数列,如改为n+1为n+m可预测后m-1个值ago(i,:)=(x(1,:)-alpha(2,:)/alpha(1,:))*exp(-alpha(1,:)*(i-1))+alpha(2,:)/alp ha(1,:);%显示输出预测值的累加数列endvar(1,:)=ago(1,:) %显示输出预测值for i=1:n %如改n为n+m-1,可预测后m-1个值var(i+1,:)=ago(i+1,:)-ago(i,:); %估计值的累加数列的还原,并计算出下一预测值endfor i=1:nerror(i,:)=x(i,:)-var(i,:); %计算残差endc=std(error)/std(x); %调用统计工具箱的标准差函数计算后验差的比值cago %显示输出预测值的累加数列alpha %显示输出参数数列var %显示输出预测值error %显示输出误差c %显示后验差的比值作用:数据处理判断是否可以用灰色预测、求级比、求累加数列、求a b的值、求预测方程clc,clearx0=[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 %拟合参数u(1)=a,u(2)=bx=dsolve('Dx+a*x=b','x(0)=x0'); %求微分方程的符号解x=subs(x,{'a','b','x0'},{u(1),u(2),x0(1)}) %代入估计参数值和初始值yuce1=subs(x,'t',[0:n-1]); %求已知数据的预测值y=vpa(x,6) %其中的6表示显示6位数字yuce=[x0(1),diff(yuce1)] %差分运算,还原数据。

灰色预测MATLAB代码

灰色预测MATLAB代码

function hsyc(x0)%灰色模型GM(1,1)matlab代码在建立灰色模型前应对原始数据进行求%%%级比%%%%重要%输入原始时序列x0,输出各种所需参数%%%%实际使用该程序时应改变图像坐标轴%%%%%x0代表原始数据;x1代表x0经累加后;B代表所够造的矩阵B;Y代表向量Yn;au代表系数a,u构成的矩阵n=size(x0,2); %计算x0的列数x1=cumsum(x0,2); %将x0进行累加得到矩阵x1for k=1:n-1;b(k)=-0.5*(x1(k+1)+x1(k));y(k)=x0(k+1); %计算得到向量Y的转置矩阵yenda=ones(n-1,1);B=[b',a]; %计算得到矩阵BY=y'; %计算得到向量Yau=inv(B'*B)*B'*Y; %计算得到系数a,u构成的矩阵auA=au';k=1:n+10;X1(k)=(x0(1)-A(2)/A(1))*exp(-A(1)*(k-1))+A(2)/A(1); %计算预测累加数列的值X0(1)=X1(1);k=1:n+9;X0(k+1)=X1(k+1)-X1(k); %计算预测累加数列的还原值,即预测值for k=2:n;e(k)=X0(k)-x0(k); %计算残差E(k)=(X0(k)-x0(k))/x0(k); %计算预测值与实测值的差值跟实测值的比值,即残差与实测值的比值j(k)=x0(k-1)/x0(k); %计算实测数据的级比endk=1:n;p(k)=1-(1-0.5*A(1))*j(k)/(1+0.5*A(1)); %计算级比偏差e(k)、p(k)<0.1则说明模型达到较高要求,0.2>e(k)、p(k)>0.1则说明模型达到一般要求m=min(abs(e)); %计算残差中的最小值M=max(abs(e)); %计算残差中的最大值k=1:n;g(k)=(m+0.5*M)./(abs(e(k))+0.5*M); %计算关联系数R=sum(g')/(n-1); %计算关联度v=[1,5,120,185];axis(v);grid onplot([1996:2005],x0,'o-',[1996:2015],X0,'*:'); %画出原始数据跟时间序列的图像及预测数据跟时间序列的图像legend('原始数据','预测数据',4)au %输出参数a,u的值X0 %输出预测数列e %输出残差E %输出残差与原始数据的比值,定义的残差j %输出原始数据的级比p %输出偏比差R %输出关联度程度X1end。

灰色预测的matlab实现,代码大全

灰色预测的matlab实现,代码大全

disp('确定的模型为:x1(k+1)=(x(1)-u_a)*exp(-k*a)+u_a') 改进灰色模型代码: for i=1:inf if i==1
e(i)=input('输入数据:'); else if e(i-1)==0 break; else end
e(i)=input('输入数据:');
6
1
x2(k+1)=(x0(1)-u_a)*exp(-k*a)+u_a; end %求出新数列的模拟值 x2 x3=x2; x3(m2+k0)=[]; x4=[0 x3]; x5=x2-x4;%利用累减生成法求出原始数据的模拟值 x5 disp('3.一次累加(1-AGO)生成的数据的模拟值:') Y=''; for z=1:m2+k0 Y=strcat(Y,'(',num2str(x2(z)),')'); end disp(Y); disp('4.原始数据的模拟值:') Y=''; for z=1:m2+k0 Y=strcat(Y,'(',num2str(x5(z)),')'); end disp(Y); % 4. 模型检验(算出的值到等级参照表中检查其精度等级) %计算后验差比 C 和残差序列 Q x6=x5(1:m2); Q=x0-x6;%Q 为残差序列 s1=std(Q);%s1 为残差序列 Q 的标准差 s2=std(x0);%s2 为初始序列 x0 的标准差 C=s1/s2;%后验差比 C(越小越好) w1=1:m2; w1=[ones(m2,1) w1']; w2=Q'; [bb,bint,r1,rint,stats]=regress(w2,w1); rcoplot(r1,rint) C1=strcat('5.后验差比(均方差比值): C=',num2str(C));disp(C1); if C<=0.35 disp(' 由于 C<=0.35,则此模型精度等级为 1 级(好) 。'); else if C<=0.5 disp(' 由于 0.35<C<=0.5,则此模型精度等级为 2 级(合格) 。'); else if C<=0.65 disp(' 由于 0.5<C<=0.65,则此模型精度等级为 3 级(勉强) 。'); else disp(' 由于 C>0.65,则此模型精度等级为 4 级(不合格) 。'); end end end

灰色预测模型的matlab运行代码(讲解)

灰色预测模型的matlab运行代码(讲解)

1灰色预测模型 GM(1,1)的matlab 运行代码例 由1990—2001年中国蔬菜产量,建立模型预测 2002年中国蔬菜产量,并对预测结果作检验。

分析建模:给定原始时间1990—2001年资料序列X (0)(k),对X (0)(k) 生成1-AGO(累加)序列X (1)(k)及Y n。

见下表K 1 2 3 4 5 6 7 8 9 10 11 12 X ⑼19519 ,19578 ,19637,19695,16602, 25723, 30379, 34473, 38485, 40514, 42400, 48337 X (1)19519, 39097, 58734, 264605,307005,355342Y n 19578 19637 40514 42400 48337其中 X ⑴(k):x (0)(i);i 1Y n = [X (0)(2),X (0)(3), ,X (0) (12)]TX (0)(k)的 GM(1,1),得到z (1^2) 10.5 X⑴(1) X (。

⑵1 -29308.0 z ⑴(3) 1 0.5 X ⑴(2) X "(3)1 -48915.5 z (1)(4) 10.5 X ⑴(3) X (1^4)1 -68581.5 z ⑴(5) 1 0.5 X(4) X (1^5)1 -86730.0 z (1)(6) 10.5 X ⑴(5) X⑴⑹ 1 -107892.5 z ⑴(7) 1 0.5 X ⑴(6) X ("(7)1 -135943.5 z ⑴(8) 1 0.5 X ⑴(7) X "(8)1 -168369.5 z ⑴(9) 1 0.5 X ⑴(8) X ⑴(9)1-204848.5 z ⑴(10) 1 0.5 X ⑴(9) X ⑴(10) 1 244348.0 z ⑴(11) 10.5 X ⑴(10) X ("(11) 1 -331173.5 z ⑴(12) 10.5 X ⑴(11)X ("(12) 1-5236.21 1 1 1 1 1 1 1 1 1 将B 和Y n 代入辨识算式,有:对上述 ka(B TB) 1B T?Y n b得灰色GM(1,1)模型为0.1062105 13999.9(1)灰微分方程 X (0) (k)-0.1062105 Z ⑴(k)=13999.9刃⑼亿 1) 15248.968e 0.1062105t(5)残差检验:(6)后验差检验:12[X ( 0)(i) X (0)]2112L , X (0)丄 X (0)(i) n 1 12 i 1 C<0.35好;C<0.5合格;00.6不合格。

Matlab学习系列.灰色关联分析

Matlab学习系列.灰色关联分析

28. 灰色关联分析一、灰色系统理论简介若系统的内部信息是完全已知的,称为白色系统;若系统的内部信息是一无所知(一团漆黑),只能从它同外部的联系来观测研究,这种系统便是黑色系统;灰色系统介于二者之间,灰色系统的一部分信息是已知的,一部分是未知的。

灰色系统理论以“部分信息已知、部分信息未知”的“小样本”、“贫信息”不确定型系统为研究对象,其特点是:(1)认为不确定量是灰数,用灰色数学来处理不确定量,使之量化,灰色系统理论只需要很少量的数据序列;(2)观测到的数据序列看作随时间变化的灰色量或灰色过程,通过鉴别系统因素之间发展趋势的相似或相异程度,即进行关联度分析;(3)通过累加生成和累减生成逐步使灰色量白化,从而建立相应于微分方程解的模型,从而预测事物未来的发展趋势和未来状态。

二、灰色关联度分析1. 要定量地研究两个事物间的关联程度,可以用相关系数和相似系数等,但这需要足够多的样本数或者要求数据服从一定概率分布。

在客观世界中,有许多因素之间的关系是灰色的,分不清哪些因素之间关系密切,哪些不密切,这样就难以找到主要矛盾和主要特性。

灰因素关联分析,目的是定量地表征诸因素之间的关联程度,从而揭示灰色系统的主要特性。

关联分析是灰色系统分析和预测的基础。

关联分析源于几何直观,实质上是一种曲线间几何形状的分析比较,即几何形状越接近,则发展变化趋势越接近,关联程度越大。

如下图所示:xt曲线A 与B 比较平行,则认为A 与B 的关联程度大;曲线C 与A 随时间变化的方向很不一致,则认为A 与C 的关联程度较小;曲线A 与D 相差最大,则认为两者的关联程度最小。

2. 关联度分析是分析系统中各因素关联程度的方法步骤:(1) 计算关联系数设参考序列为0000{(1),(2),...,()}X x x x n =比较序列为{(1),(2),...,()}, 1,,i i i i X x x x n i m ==比较序列X i 对参考序列X 0在k 时刻的关联系数定义为:0000min min ()() max max ()()()()() max max ()()s s s t s ti i s s tx t x t x t x t k x k x k x t x t ρηρ-+-=-+- 其中,0min min ()()s s tx t x t -和0max max ()()s s t x t x t -分别称为两级最小差、两级最大差,[0,1]ρ∈称为分辨系数,ρ越大分辨率越大,一般采用0.5ρ=对单位不一,初值不同的序列,在计算关联系数之前应首先进行初值化,即将该序列的所有数据分别除以第一数据,将变量化为无单位的相对数值。

灰色预测及MATLAB实现

灰色预测及MATLAB实现
的未来预测值。
(3)对累加生成数据做均值生成 B 矩阵与常数项向量Yn ,即
0.5(x(1) (1) x(1) (2))
B

0.5(
x(1)
(2)

x(1)
(3))


,Yn

(x(0) (2), x(0) (3),
, x(0) (n))T


0.5(x(1) (n 1) x(1) (n))
3.2 灰色预测的MATLAB程序
3.2.1 典型程序结构
(1)对原始数据进行累加。
矩阵处理, MATLAB的长

(2)构造累加矩阵B与常数向量。
(3)求解灰参数。
(4)将参数代入预测模型进行数据预测。
【例】某公司1999-2008年利润为(元/年):[89677 99215 109655 120333 135823 159878 182321 209407 246619 300670], 预测该公司未来几年的利润情况。
已知本届会议的回执情况(表1),往几届会议代表回执和 与会情况(表2),根据这些数据预测本届与会代表。
表1 回执中对住房的要求
要求 男 女
合住1 154 78
合住2 104 48
合住3 32 17
独住1 107 59
独住2 68 28
独住3 41 19
表2 以往几届代表的回执参会情况表
届次
第一届
第二届
dx
由于aˆ 是通过最小二乘法求出的近似值,因此 xˆ(1) (t 1)事近似表达
式,与原序列区分,多了一个“帽子”。
(6)对函数表达式 xˆ(1) (t 1)及 xˆ(1) (t)进行离散,将二者作差以便还

matlab灰色关联度计算

matlab灰色关联度计算

matlab灰色关联度计算
灰色关联度计算是一种用于分析变量之间关联程度的方法,常用于数据挖掘和预测分析中。

在MATLAB中,可以通过以下步骤进行灰色关联度计算:
1. 数据准备,首先,准备好需要分析的数据,确保数据的准确性和完整性。

2. 数据预处理,对数据进行预处理,包括数据清洗、归一化等操作,以便进行后续的灰色关联度计算。

3. 灰色关联度计算函数,MATLAB提供了灰色关联度计算的相关函数,例如graycoprops和graycomatrix等。

你可以使用这些函数来计算数据之间的灰色关联度。

4. 灰色关联度分析,利用灰色关联度计算函数,对数据进行灰色关联度分析,得到变量之间的关联度值。

5. 结果展示,最后,可以将灰色关联度分析的结果进行可视化展示,例如绘制关联度矩阵图或者相关性曲线图,以便更直观地理
解变量之间的关联程度。

需要注意的是,灰色关联度计算涉及到一些数学和统计知识,因此在进行计算时需要对数据和算法有一定的理解和把握。

希望这些步骤能够帮助你在MATLAB中进行灰色关联度计算。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

即为灰因白果律事件预测。 (3) 具有可检验性, 包括: 建模可行性的级比检验 (事前检验) , 建模精度检验(模型检验),预测的滚动检验(预测检验)。
二、GM(1,1)模型 1. 模型理论 GM(1,1)模型适合具有较强的指数规律的数列,只能描述单调的 变化过程。已知元素序列数据:
X (0) ( x (0) (1), x (0) (2), , x (0) (n ))
(2) 建立 GM(1,1)模型,计算出预测值列。 (3) 检验预测值: ① 相对残差检验,计算
(k )
ˆ (0) ( k ) x (0) ( k ) x , x (0) ( k ) k 1, , n
若 (k ) 0.2 ,则认为达到一般要求,若 (k ) 0.1 ,则认为达到较高要 求; ② 级比偏差值检验 根据前面计算出来的级比 (k ) , 和发展系数 a, 计算相应的级比 偏差:
j 1
由于 R 为非负对称矩阵,故存在最大特征值 及对应的(非负)
]。 特征向量 V [v1 , , vm 由特征向量与特征值的性质, 可取 wi vi / v j
j 1 m
融合后得到 a wi ai 。
i 1
பைடு நூலகம்
m
Matlab 实现:
function [a,w]=DataFusion(x) %x为长度≥2的行向量, 返回a为融合值, w为权重向量 Lx=length(x); if Lx==2 a=mean(x); w=[1/2,1/2]; else IndCom=nchoosek(1:Lx,2); 方式 d=abs(x(IndCom(:,1))-x(IndCom(:,2))); 间的距离 maxd=max(d); [Y,X]=meshgrid(1:Lx,1:Lx); R=cos(pi*(x(X)-x(Y))/(2*maxd)); %构造支持度矩阵 [V,D]=eig(R); w=V(:,Lx)/sum(V(:,Lx)); a=x*w; %计算任意两值之 %x中元素下标索引的所有两两组合
年份 销售额(亿元) 1999 2.67 2000 3.13 2001 3.25 2002 3.36 2003 3.56 2004 3.72
GM(1,1)函数:
function [pre,f]=GM11(x) %返回第n+1个预测值pre,和预测函数f %级比检验 n=length(x); lambda=x(1:n-1)./x(2:n); %计算级比
(k )
x (0) (k 1) , x (0) (k ) k 2, , n
若所有的级比 (k ) 都落在可容覆盖 ( e 2/( n1) , e 2/( n 2) ) 内, 则可进行灰色 预测;否则需要对 X (0) 做平移变换, Y (0) X (0) c ,使得 Y (0) 满足级比 要求。
建立支持度矩阵: R {rij }mm 。 为了从 a1 ,, am 融合得到最终的 a,需要确定每个 ai 的权重 wi 满足
w
i 1
m
i
1 ,注意到 wi 应综合包含 ri1 , , rim 的信息,从而要寻找一组非负
m
数 v1 ,, v m 使得 wi v j rij ,其矩阵形式为 W RV 。
即为预测方程。
注 1:原始序列数据不一定要全部使用,相应建立的模型也会不 同,即 a 和 b 不同; 注 2:原始序列数据必须要等时间间隔、不间断。
2. 算法步骤 (1) 数据的级比检验
为了保证灰色预测的可行性, 需要对原始序列数据进行级比检验。 对原始数据列 X (0) ( x (0) (1), x (0) (2), , x (0) (n )) ,计算序列的级比:
3. 数据融合算法 为了进一步提高灰色预测的精度,可以:先用原始数据列的 n 个 数据、后 n-1 个数据、……、后 n-k 个数据,进行多次 GM(1,1)预测, 得到 k+1 个预测值,再将它们进行数据融合得到最终的预测值。 数据融合算法原理: 设 a1 ,, am 为 m 个由 GM(1,1)模型预测得到的第 n+1 时刻的预测 值,定义任意两个值之间的距离:
Delta=abs(x_p-x); %绝对残差序列 phi=Delta./x; %相对残差序列 if max(phi) >= 0.2 disp('相对残差检验未通过'); else disp('相对残差检验通过'); end mean(phi); %平均相对残差 rho=1-(1-0.5*A(1))/(1+0.5*A(1))*lambda; %计算级比偏差值 if max(rho) >= 0.2 disp('级比偏差检验未通过'); else disp('级比偏差检验通过'); end %预测第n+1个数据 f=@(t) (x(1)-A(2)/A(1))*(1-exp(A(1)))*exp(-A(1)*t); % 预测公式 pre=f(n);
运行结果: pre = 3.9205 x_pre = 3.8948 3.8943 3.8756
4. 灰色预测的应用——灾变预测 灰色灾变预测的是给出下一个或几个异常值出现的时刻, 以便人 们提前防备,采取对策,减少损失。 基本思路步骤: 1. 对于给定的原始时间序列数据 X x (1), x (2), , x (n ) , 根据灾变 界值选取出灾变子列:
range=[exp(-2/(n+1)),exp(2/(n+2))]; %可容覆盖的范围 if range(1) < min(lambda) <= max(lambda) < range(2) disp('级比检验通过'); else disp('级比检验未通过'); end %GM(1,1)建模 x1=cumsum(x); %一次累加 n=length(x1); z1=(x1(1:n-1)+x1(2:n))/2; Y=x(2:n)'; %构造矩阵Y B=[-z1',ones(n-1,1)]; %构造矩阵B A=(B'*B)\B'*Y; %计算模型的参数a,b k=1:n; x1=(x(1)-A(2)/A(1))*exp(-A(1)*(k-1))+A(2)/A(1); %利用模 型计算累加值的预测值 x_p=[x(1),diff(x1)]; %累减还原到预测值
end
例 2 对于例 1 的数据, 分别对近 6 年 (1999-2004) 、 近5年 (2000-2004) 、 近4年 (2001-2004) 的数据用 GM(1,1)预测出 2005 年的 3 个预测值, 再进行数据融合,得到最终的预测值。
代码:
x0=[2.67,3.13,3.25,3.36,3.56,3.72]; %原始数列 Lx=length(x0); pre=arrayfun(@(k) GM11(x0(Lx-k:end)),3:5) %最后一个预测值 是用全部6个数据 x_pre=DataFusion(pre)
29. 灰色预测
一、灰色预测概述 灰色预测是用灰色模型 GM(1,1)来进行定量分析的,通常分为以 下几类: (1) 灰色时间序列预测。用等时距观测到的反映预测对象特征的 一系列数量(如产量、销量、人口数量、存款数量、利率等)构造灰 色预测模型, 预测未来某一时刻的特征量, 或者达到某特征量的时间。 (2) 畸变预测(灾变预测)。通过模型预测异常值出现的时刻, 预测异常值什么时候出现在特定时区内。 (3) 波形预测,或称为拓扑预测,它是通过灰色模型预测事物未 来变动的轨迹。 (4) 系统预测,对系统行为特征指标建立一族相互关联的灰色预 测理论模型, 在预测系统整体变化的同时, 预测系统各个环节的变化。 上述灰色预测方法的共同特点是: (1)允许少数据预测; (2)允许对灰因果律事件进行预测,例如 灰因白果律事件: 在粮食生产预测中, 影响粮食生产的因子很多, 多到无法枚举,故为灰因,然而粮食产量却是具体的,故为白果。粮 食预测即为灰因白果律事件预测。 白因灰果律事件:在开发项目前景预测时,开发项目的投入是具 体的,为白因,而项目的效益暂时不很清楚,为灰果。项目前景预测
X x[ q(1)], x[ q(2)], , x[ q( m )]
dij | ai a j |, i, j 1,, m
构造两个数据间的支持度函数:
rij cos(
d ij ), 2 max{d ij }
i , j 1, , m
满足:(1) rij 与相对距离成反比,即两个值相差越大,彼此间的支持 程度越小; (2) rij [0,1] , 使数据的处理能够利用模糊集理论中隶属度函数的 优点,避免数据之间相互支持度的绝对化。
取 x (1) (0) x (0) (1) ,则
b b ˆ (1) (k +1) [ x (0) (1) ]e ak , x a a k 1,, n 1
再做累减还原可得
ˆ (0) (k 1) x ˆ (1) (k 1) x ˆ(1) (k ) x b [ x (0) (1) ](1 e a ) e ak , a k 1, , n 1
(k ) 1 (
1 0.5a ) ( k ) 1 0.5a
若 (k ) 0.2 , 则认为达到一般要求, 若 (k ) 0.1 , 则认为达到较高要求。 (4) 利用模型进行预测。
例 1 某大型企业 1999 年至 2004 年的产品销售额如下表,试建立
GM(1,1)预测模型,并预测 2005 年的产品销售额。
再建立灰色微分方程的白化方程(也叫影子方程):
dx (1) ax (1) b dt
白化方程的解(也叫时间响应函数)为
相关文档
最新文档