大神,刚才向你提问的你已帮我解决,已采纳,我还有一个关于灰色预测的matlab程序,求帮忙!

大神,刚才向你提问的你已帮我解决,已采纳,我还有一个关于灰色预测的matlab程序,求帮忙!,第1张

function gg

x0=[38.95,39.59,39.89,40.64,41.31,42.04,42.91,43.64,49.51,50.38]

GM(x0)

end

function GM(x0) %灰色系统GM(1,1)预测

T=input('请输入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)

for i=1:length(x0)

for j=1:i

x1(i)=x1(i)+x0(j)%累加生成

end

end

x1

for i=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 %求a,u

for k=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)

for k=2:length(x0)+T

hatx0(k)=hatx1(k)-hatx1(k-1)%累减还原

end

hatx0%历史数据的陆段模拟值

for i=1:length(x0)%开始检验

epsilon(i)=x0(i)-hatx0(i)

omega(i)=(epsilon(i)/x0(i))*100

end

c=std(epsilon)/std(x0)

p=0

for i=1:length(x0)

if abs(epsilon(i)-mean(epsilon))<0.6745*std(x0)

p=p+1

end

end

p=p/亏信length(x0)

if p>0.95&c<0.35

disp('预测精度好,预测值为:')

disp(hatx0(length(x0)+T))

elseif p>0.85&c<0.5

disp('预测精度合格,预测值为:')

disp(hatx0(length(x0)+T))

elseif p>0.70&c<0.65

disp('预测精度勉强合格,预测值为:')

disp(hatx0(length(x0)+T))

elseif p<=0.7&c>0.65

disp('预测精度不合格')

end

for i=1:length(x0)

hatx00(i)=hatx0(i)

end

z=1:length(x0)

plot(z,x0,'-'早空誉,z,hatx00,':')

text(2,x0(2),'历史数据:实线')

text(length(x0)/2,hatx00(length(x0))/2,'模拟数据:虚线')

end

进行灰色预测,首先要鉴别系毕拦统因素之间发展趋势的相异程度,即进行关联分析,再对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列,然后建立相应的运握微分方程模型来预测事物未来发展手悄胡趋势的状况。

在建立灰色预测模型之前,需先对原始时间序列进行数据处理是为了弱化原始时间序列的随机性。灰色系统常用的数据处理方式有累加和累减两种。

function x=gmadd(x0,k)

n=length(x0)%求出原始数据的长度

x=ones(k,n)

x(1,:)=x0

for j=1:k

x1(1)=x0(1)%计算出依次累加的矩阵,命名为厅困x1

for ii=1:n-1

x1(ii+1)=x1(ii)+x0(ii+1)

end

%求出数据向量Y矩伍凳阵

y=ones(n-1,1)

for ii=2:n

y(ii-1)=x0(ii)

end

%构腔伏旅造出数据矩阵b

b=ones(n-1,2)

for ii=1:n-1

b(ii,1)=(-0.5)*(x1(ii)+x1(ii+1))

end

%确定参数a和u

w=inv(b'*b)*b'*y

a=w(1,1)

u=w(2,1)

%计算模型x11

m=u/a

g=x0(1)-m

x11=ones(n,1)

x11(1)=x0(1)

for ii=1:n

x11(ii+1)=exp(-a*ii)*g+m

end

%进行下一次循环

for ii=1:n

x0(ii)=x11(ii+1)-x11(ii)

end

x(j,:)=x0

end


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12538525.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存