灰色关联度分析MATLAB程序
灰色预测模型及MATLAB实例

灰⾊预测模型及MATLAB实例下⾯将主要从三⽅⾯进⾏⼤致讲解,灰⾊预测概念及原理、灰⾊预测的分类及求解步骤、灰⾊预测的实例讲解。
⼀、灰⾊预测概念及原理:1.概述:关于所谓的“颜⾊”预测或者检测等,⼤致分为三⾊:⿊、⽩、灰,在此以预测为例阐述。
其中,⽩⾊预测是指系统的内部特征完全已知,系统信息完全充分;⿊⾊预测指系统的内部特征⼀⽆所知,只能通过观测其与外界的联系来进⾏研究;灰⾊预测则是介于⿊、⽩两者之间的⼀种预测,⼀部分已知,⼀部分未知,系统因素间有不确定的关系。
细致度⽐较:⽩>⿊>灰。
2.原理:灰⾊预测是通过计算各因素之间的关联度,鉴别系统各因素之间发展趋势的相异程度。
其核⼼体系是灰⾊模型(Grey Model,GM),即对原始数据做累加⽣成(或者累减、均值等⽅法)⽣成近似的指数规律在进⾏建模的⽅法。
⼆、灰⾊预测的分类及求解步骤:1.GM(1,1)与GM(2,1)、DGM、Verhulst模型的分类⽐较:预测模型适⽤场景涉及的序列GM(1,1)模型⼀阶微分⽅程,只含有1个变量的灰⾊模型。
适⽤于有较强指数规律的序列。
累加序列均值序列GM(2,1)模型适⽤于预测预测具有饱和的S形序列或者单调的摆动发展序列缺陷。
累加序列累减序列均值序列DGM模型累加序列累减序列Verhulst模型累加序列均值序列2.求解步骤思维导图:其中预测过程可能会涉及以下三种序列、⽩化微分⽅程、以及⼀系列检验,由于⼤致都相同,仅仅是某些使⽤累加和累减,⽽另外⼀些则使⽤累加、累减和均值三个序列的差别⽽已。
于是下⾯笔者将对其进⾏归纳总结再进⾏绘制思维导图,帮助读者理解。
(1)原始序列(参考数据列):(2)1次累加序列(1-AGO):(3)1次累减序列(1-IAGO ):(也就是原始序列中,后⼀项依次减去前⼀项的值,例如,[x(2)-x(1),x(3-x(2),...,x(n)-x(n-1))]。
)(4)均值⽣成序列:(这是对累加序列"(前⼀项+后⼀项)/2"得出的结果。
灰色预测matlab代码

%灰色预测function gm(x0,m) %定义函数gm(x0,m) ,x0为原始数据,m为预测个数n=length(x0);x1=zeros(1,n);x1(1)=x0(1);for i=2:n %计算累加序列x1x1(i)=x1(i-1)+x0(i);endi=2:n; %对原始数列平行移位并赋给yy(i-1)=x0(i);y=y'; %将y变成列向量for i=1:n-1; %计算数据矩阵B 的第一列数据c(i)=-0.5*(x1(i)+x1(i+1));endB=[c' ones(n-1,1)];%构造矩阵Bau=inv(B'*B)*B'*y;%计算参数a,u 矩阵for i=1:n+1+m; %计算预测累加数列的值ago(i)=(x0(1)-au(2)/au(1))*exp(-au(1)*(i-1))+au(2)/au(1);endyc(1)=ago(1);for i=1:n-1; %还原数列的值yc(i+1)=ago(i+1)-ago(i);endfor i=2:n;error(i)=yc(i)-x0(i); %计算残差值endyc(1)=ago(1);for i=1:n-1+m; %修正的还原数列的值yc(i+1)=ago(i+1)-ago(i);endc=std(error)/std(x0); %计算后验差比p=0;for i=2:nif(abs(error(i)-mean(error))<0.6745*std(x0))p=p+1;endendp=p/(n-1);w1=min(abs(error));w2=max(abs(error));for i=1:n; %计算关联度w(i)=(w1+0.5*w2)./(abs(error(i))+0.5*w2);endw=sum(w)/(n-1);%axis([1979+m,1988+m,30,160]); %x,y,(z)坐标范围plot([1979:n+1978],x0,'+',[1979:n+1978+m],yc,'*'); %grid on;xlabel('时序');ylabel('沉降量(mm)');title('地面沉降灰色模型预测拟和曲线');legend('实测值','预测值',4);fprintf('a,u值:')fprintf('%g ',au) %输出参数a,u 的值fprintf('\n累加数列:\n')fprintf('%g ',ago) %输出累加数列ago 的值fprintf('\n原始序列:\n')fprintf('%g ',x0) %输出原始序列值fprintf('\n预测:\n')fprintf('%g ',yc) %输出预测的值fprintf('\n残差:\n')fprintf('%g ',error) %输出残差的值fprintf('\n后验差比:\n')fprintf('%g',c) %输出后验差比的值fprintf('\n小误差概率:\n')fprintf('%g',p) %输出小误差概率的值fprintf('\n关联度:\n')fprintf('%g\n',w) %输出关联度w。
matlab 灰度算法 -回复

matlab 灰度算法-回复Matlab灰度算法在Matlab中,灰度算法是图像处理中应用最广泛的一种算法之一。
灰度图像通常被用于减少图像的复杂性,保留图像中的重要信息,同时提高图像处理的速度和效率。
本文将介绍Matlab中常用的灰度算法,以及如何逐步实现这些算法。
一、图像的灰度化图像的灰度化是将彩色图像转换为灰度图像的过程。
Matlab中提供了多种灰度化方法,比较常用的是平均值法和加权平均值法。
1. 平均值法平均值法是将RGB三个分量的平均值作为灰度值,公式如下:灰度值= (R + G + B) / 3在Matlab中,可以使用rgb2gray函数将彩色图像转换为灰度图像。
2. 加权平均值法加权平均值法是根据颜色对灰度的贡献程度不同,对RGB分量进行加权求和得到灰度值。
一般情况下,红色对灰度的贡献最高,绿色次之,蓝色最低。
公式如下:灰度值= 0.299 * R + 0.587 * G + 0.114 * B同样地,在Matlab中可以使用rgb2gray函数实现加权平均值法。
二、图像的灰度直方图灰度直方图是衡量图像亮度分布的工具。
它将图像中所有像素的灰度值分布在不同的亮度级别上,并统计每个亮度级别的像素数量。
在Matlab中,可以使用imhist函数计算图像的灰度直方图。
1. 计算灰度直方图matlabim = imread('image.jpg'); 读取图像gray_image = rgb2gray(im); 灰度化imhist(gray_image); 计算灰度直方图这段代码首先读取名为image.jpg的图像,然后将其转换为灰度图像gray_image,最后使用imhist函数计算灰度直方图。
2. 绘制灰度直方图matlabim = imread('image.jpg'); 读取图像gray_image = rgb2gray(im); 灰度化hist_array = imhist(gray_image); 计算灰度直方图bar(hist_array); 绘制直方图xlabel('灰度级别'); x轴标签ylabel('像素数量'); y轴标签title('灰度直方图'); 标题这段代码在计算灰度直方图的基础上,使用bar函数绘制直方图,然后通过xlabel、ylabel和title函数设置相应的标签和标题。
matlab 灰度算法 -回复

matlab 灰度算法-回复【MATLAB灰度算法】灰度算法是一种将彩色图像转化为黑白图像的方法,在计算机视觉和图像处理领域被广泛使用。
MATLAB是一种强大的数学计算工具,它提供了丰富的图像处理函数和工具箱,可用于实现灰度算法。
本文将逐步回答如何使用MATLAB实现灰度算法,并介绍一些常用的灰度算法技术。
# 第一步:图像读取与显示在MATLAB中,可以使用`imread`函数读取图像,使用`imshow`函数显示图像。
我们首先需要读取一张彩色图像,并将其显示出来。
matlab读取彩色图像rgbImage = imread('image.jpg');显示彩色图像imshow(rgbImage);title('Original Image');# 第二步:转化为灰度图像灰度图像是一种每个像素只有一个灰度值(亮度值)的图像。
在MATLAB中,可以使用`rgb2gray`函数将彩色图像转化为灰度图像。
matlab将彩色图像转化为灰度图像grayImage = rgb2gray(rgbImage);显示灰度图像imshow(grayImage);title('Grayscale Image');# 第三步:灰度化算法选择灰度化算法决定了如何将彩色图像中的RGB信息转化为灰度图像中的灰度值。
常用的灰度化算法有平均值法、加权平均法和分量最大法等。
下面分别介绍这些算法并给出MATLAB代码实现。
平均值法平均值法是最简单的灰度化算法之一,它将彩色图像的RGB分量的平均值作为灰度值。
具体实现如下:matlab平均值法灰度化averageGrayImage = (rgbImage(:, :, 1) + rgbImage(:, :, 2) + rgbImage(:, :, 3)) / 3;显示平均值法灰度图像imshow(averageGrayImage);title('Average Grayscale Image');加权平均法加权平均法是一种考虑了RGB分量的亮度影响的灰度化算法。
灰色模型 matlab 代码

function GM1_1(X0)%format long ;[m,n]=size(X0);X1=cumsum(X0); %累加X2=[];for i=1:n-1X2(i,:)=X1(i)+X1(i+1);endB=-0.5.*X2 ;t=ones(n-1,1);B=[B,t] ; % 求B矩阵YN=X0(2:end) ;P_t=YN./X1(1:(length(X0)-1)) %对原始数据序列X0进行准光滑性检验,%序列x0的光滑比P(t)=X0(t)/X1(t-1)A=inv(B.'*B)*B.'*YN.' ;a=A(1)u=A(2)c=u/a ;b=X0(1)-c ;X=[num2str(b),'exp','(',num2str(-a),'k',')',num2str(c)];strcat('X(k+1)=',X)%syms k;for t=1:length(X0)k(1,t)=t-1;endkY_k_1=b*exp(-a*k)+c;for j=1:length(k)-1Y(1,j)=Y_k_1(j+1)-Y_k_1(j);endXY=[Y_k_1(1),Y] %预测值CA=abs(XY-X0) ; %残差数列Theta=CA %残差检验绝对误差序列XD_Theta= CA ./ X0 %残差检验相对误差序列AV=mean(CA); % 残差数列平均值R_k=(min(Theta)+0.5*max(Theta))./(Theta+0.5*max(Theta)) ;% P=0.5 R=sum(R_k)/length(R_k) %关联度Temp0=(CA-AV).^2 ;Temp1=sum(Temp0)/length(CA);S2=sqrt(Temp1) ; %绝对误差序列的标准差%----------AV_0=mean(X0); % 原始序列平均值Temp_0=(X0-AV_0).^2 ;Temp_1=sum(Temp_0)/length(CA);S1=sqrt(Temp_1) ; %原始序列的标准差TempC=S2/S1*100; %方差比C=strcat(num2str(TempC),'%') %后验差检验%方差比%----------SS=0.675*S1 ;Delta=abs(CA-AV) ;TempN=find(Delta<=SS);N1=length(TempN);N2=length(CA);TempP=N1/N2*100;P=strcat(num2str(TempP),'%') %后验差检验%计算小误差概率调用例子:X0=[2.874,3.278,3.337,3.39,3.679];GM1_1(X0)参考资料:我自己想的,算法不是很优,希望你自己改进吧。
灰色预测的matlab实现,代码大全

程序代码:%普通的灰色预测GM1.mclearX=input('请输入原始数据:','s');%原始数据(可以多行,每一行为一类原始数据,即可多类原始数据)X=str2num(X);[m1 m2]=size(X);%m1和m2分别表示X的行数和列数k0=input('请输入所要预测的阶数:');%GM(1,1)模型for i=1:m1n=i;x0=X(i,:);%将原始数据X中的第i行数据赋给x0,即取出一类原始数据disp('1.原始数据:');Y='';for z=1:m2Y=strcat(Y,'(',num2str(x0(z)),')');enddisp(Y);% 1. 利用一次累加(1-AGO)生成新数列E=triu(ones(m2));%E表示元素为1右上三角阵x1=x0*E;%对原始数据进行一次累加(1-AGO)生成新数列x1disp('2.一次累加(1-AGO)生成的数据:');Y='';for z=1:m2Y=strcat(Y,'(',num2str(x1(z)),')');enddisp(Y);% 2. 计算出发展系数a,灰作用量ub1=x1;b1(1)=[];b2=x1;b2(m2)=[];b=-0.5*(b1+b2);%生成B的第一行B=[b;ones(1,m2-1)];%生成BB=B'; %对B进行转置y0=x0;y0(1)=[];%生成Yy0=y0'; %对Y进行转置A=((inv(B'*B))*B')*y0; %根据Y=BA(A为待辨识参数向量),可知A=[inv(B'B)]B'Y a=A(1);u=A(2);%A=[a u]'% 3. 确立模型且求出模拟值u_a=u/a;for k=0:m2+k0-1x2(k+1)=(x0(1)-u_a)*exp(-k*a)+u_a;end %求出新数列的模拟值x2x3=x2;x3(m2+k0)=[];x4=[0 x3];x5=x2-x4;%利用累减生成法求出原始数据的模拟值x5disp('3.一次累加(1-AGO)生成的数据的模拟值:')Y='';for z=1:m2+k0Y=strcat(Y,'(',num2str(x2(z)),')');enddisp(Y);disp('4.原始数据的模拟值:')Y='';for z=1:m2+k0Y=strcat(Y,'(',num2str(x5(z)),')');enddisp(Y);% 4. 模型检验(算出的值到等级参照表中检查其精度等级)%计算后验差比C和残差序列Qx6=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.35disp(' 由于C<=0.35,则此模型精度等级为1级(好)。
灰色预测+灰色关联分析

灰色关联分析法根据因素之间发展趋势的相似或相异程度,亦即“灰色关联度”,来衡量因素间关联程度。
灰色关联分析法的基本思想是根据序列曲线几何形状的相似程度来判断其联系是否紧密。
根据评价目的确定评价指标体系,为了评价×××我们选取下列评价指标: 收集评价数据(此步骤一般为题目中原数据,便省略)将m 个指标的n 组数据序列排成m*n 阶矩阵:'''12''''''1212'''12(1)(1)(1)(2)(2)(2)(,,,)()()()n n n n x x x x x x X X X x m x m x m ⎛⎫⎪ ⎪= ⎪ ⎪ ⎪⎝⎭对指标数据进行无量纲化为了消除量纲的影响,增强不同量纲的因素之间的可比性,在进行关联度计算之前,我们首先对各要素的原始数据作...变换。
无量纲化后的数据序列形成如下矩阵:01010101(1)(2)(1)(2)(2)(2)(,,,)()()()n n n n x x x x x x X X X x n x n x n ⎛⎫ ⎪ ⎪= ⎪ ⎪⎝⎭ 确定参考数据列为了比较...【评价目的】,我们选取...作为参考数据列,记作''''0000((1),(2),,())T X x x x n =计算0()()i x k x k -,得到绝对差值矩阵求两级最小差和两级最大差011min min ()()min(*,*,*,*,*,*)*nmi i k x k x k ==-==011max max ()()max(*,*,*,*,*,*)*nmi i k x k x k ==-==求关联系数由关联系数计算公式0000min min ()()max max ()()()()()max max ()()i i ikiki i i ikx k x k x k x k k x k x k x k x k ρζρ-+⋅-=-+⋅-,取0.5ρ=,分别计算每个比较序列与参考序列对应元素的关联系数,得关联系数如下:ζ=(ζ1(1)⋯ζn (1)⋮⋱⋮ζ1(n )⋯ζn (n))=()计算关联度分别计算每个评价对象各指标关联系数的均值,以反映各评价对象与参考序列的关联关系,并称其为关联度,记为:011()mi i k r k m ζ==∑。
灰色预测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)] %差分运算,还原数据。