请教 灰色理论GM(1,1) 在MATLAB下的编程
请教完整的灰色理论GM(1,1)在MATLAB下的程序 多谢! 我以前做过这个其实很简单,我还把源代码发到simwe上了 这是我以前做过的一个,可以参考一下
更多原创程序,请访问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 编辑 ] 对线性方程组的欠定和超定问题是否要考虑? 怎么没有人顶呀,我顶一下 %由数列d0生成数列d1;
sum=0;
for i=1: (n-k0+1)
sum=sum+d0(i);
d1(i)=sum;
end
这一段直接用d1=cumsum(d0)就得到d1序列了! 我是菜鸟 弱弱问一句 这个是存为M文件再用 还是直接输入? 都是高手啊 菜鸟学习中
页:
[1]