simily 发表于 2007-3-15 20:09:58

请教 灰色理论GM(1,1) 在MATLAB下的编程

请教完整的灰色理论GM(1,1)在MATLAB下的程序 多谢!

small_bridge 发表于 2007-3-18 14:09:50

我以前做过
这个其实很简单,我还把源代码发到simwe上了

aiwa 发表于 2007-3-18 15:44:33

这是我以前做过的一个,可以参考一下

更多原创程序,请访问GreenSim团队的主页
http://blog.sina.com.cn/greensim


clc
clear
%原始数据输入;
x0=;
n=7;
%由数列x0生成数列x1;
s=0;
for i=1:n
    s=s+x0(i);
    x1(i)=s;
end
%由数列x1生成矩阵C和A;
for j=1:n-1
    C(j,1)=x1(j+1);
    A(j,1)=x1(j);
    A(j,2)=1;
end
%计算出估计值a1,a和u;
beta=inv(A'*A)*A'*C;
beta1=beta(1);
beta2=beta(2);
%求a,u值;
a=-log(beta1);
u=beta2/(1-beta1)*a;
%求出数列x1的预测值数列x2;
m=input('m=');
for k=0:(m-1)
    x2(k+1)=(x0(1)-u/a)*exp(-a*k)+u/a;
end
%求出原始数列x0的预测值数列x3;
x3(1)=x0(1);
for k=1:(m-1)
    x3(k+1)=(1-exp(a))*(x0(1)-u/a)*exp(-a*k);
end
%残差数据输入;
d0=[-0.3437   -0.2226   -0.3409   -0.2997   -0.0000];
k0=3;
%由数列d0生成数列d1;
sum=0;
for i=1:(n-k0+1)
    sum=sum+d0(i);
    d1(i)=sum;
end
%由数列d1生成矩阵C1和A1;
for j=1:(n-k0)
    C1(j,1)=d1(j+1);
    A1(j,1)=d1(j);
    A1(j,2)=1;
end
%计算出估计值b,a1和u1;
b=inv(A1'*A1)*A1'*C1;
b1=b(1);
b2=b(2);
a1=-log(b1);
u1=b2/(1-b1)*a1;
%求出数列d1的预测值数列d2;
for k=0:(n-k0)
    d2(k+1)=(d0(1)-u1/a1)*exp(-a1*k)+u1/a1;
end
%求出原始数列d0的预测值数列d3;
d3(1)=d0(1);
for k=1:(m-1)
    d3(k+1)=(1-exp(a1))*(d0(1)-u1/a1)*exp(-a1*k);
end
%求出原始数列x0的修正预测值数列x4;
x4(1)=x0(1);
for k=1:(m-1)
    if   k>=k0
         x4(k+1)=x2(k+1)-a1.*d3(k-k0+1)+u1;
    else x4(k+1)=x2(k+1);
    end
end
%求出原始数列x0的预测值数列x3;
x3(1)=x0(1);
for k=1:m-1
    x3(k+1)=(1-exp(a))*(x0(1)-u/a)*exp(-a*k);
end
x3
%残差检验;
for k=1:n
d(k)=x1(k)-x4(k);
end
d
%相对误差;
for k=1:n
    e(k)=abs(d(k)/x0(k))*100;
end
e
s5=0;
for i=1:n
    s5=s5+d(i);   
end
p=1/n*s5
%后验检验;
s1=0;s3=0;
for k=1:n
s1=s1+x0(k);
end
for k=1:n
    s3=s3+d(k);
end
mean1=1/n*s1;
mean2=1/n*s3;
s2=0;s4=0;
for k=1:n
s2=s2+(x0(k)-mean1)^2;
end
for k=1:n
s4=s4+(d(k)-mean2)^2;
end
sigma1=sqrt(1/n*s2)
sigma2=sqrt(1/n*s4)
c=sigma2/sigma1
p1=0.6745*sigma1;
sum=0;
for k=1:n
    if abs(d(k)-mean2)<p1
      sum=sum+1;
    else sum;
    end
end
p2=sum/n

【GreenSim团队简介】
——更多原创程序,请访问GreenSim团队的主页→http://blog.sina.com.cn/greensim

    GreenSim团队长期从事建模仿真、算法设计、代写程序等业务,为您提供实验、课题、论文、项目等方面的仿真服务。
    GreenSim团队擅长的学科领域主要有
【智能算法】遗传算法、模拟退火、神经网络、蚁群算法、免疫优化、支持向量机、拟物拟人
【运筹优化】数学建模、数值优化算法、大规模/非线性问题、组合优化、NP完全问题
【信息与通信】无线通信、信号处理、计算机网络
【其它学科】任何问题,只要能归结为数学问题或者算法仿真,我们都有实力和信心解决
    GreenSim团队的联系方式:
QQ: 330264704,535115369Email:greensim@163.com(来 信 必 复)

[ 本帖最后由 bainhome 于 2007-3-18 20:06 编辑 ]

snow_man_0 发表于 2007-3-18 16:00:55

对线性方程组的欠定和超定问题是否要考虑?

liangbaojian 发表于 2008-3-14 09:17:58

怎么没有人顶呀,我顶一下

franklings 发表于 2008-3-20 09:36:33

%由数列d0生成数列d1;
sum=0;
for i=1: (n-k0+1)
    sum=sum+d0(i);
    d1(i)=sum;
end
这一段直接用d1=cumsum(d0)就得到d1序列了!

azure0 发表于 2008-4-19 19:33:20

我是菜鸟 弱弱问一句 这个是存为M文件再用 还是直接输入?

clq52025 发表于 2008-4-21 10:03:36

clq52025 发表于 2008-4-21 10:05:30

lichanghui 发表于 2012-3-29 17:44:05

都是高手啊 菜鸟学习中
页: [1]
查看完整版本: 请教 灰色理论GM(1,1) 在MATLAB下的编程