数学建模灰色预测程序代码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数学建模灰色预测程序代码?相关的知识,希望对你有一定的参考价值。

这里写了四个函数,方便在Matlab里面调用,分别是GM(1,1),残差GM(1,1),新陈代谢GM(1,1),Verhust自己写得难免有所疏忽,需要的朋友自己找本书本来试验一下。。
Gm(1,1)
function [px0,ab,rel]=gm11(x0,number)
%[px0,ab,rel]=gm11(x0,number)
%px0为预测数列,rel为平均相对误差,rel为平均相对误差(为百分比)
%默认的number参数为原数组大小
if nargin==1 %对输入矩阵进行判断,如不是一维列矩阵,进行转置变换
number=max(size(x0));
end
n=max(size(x0)); %取输入数据的样本量
x1=zeros(size(x0));
for k=1:n
for i=1:k
x1(k)=x1(k)+x0(i); %计算累加值,并将值赋予矩阵be
end
end
z=zeros(size(x0));
for k=2:n
z(k)=0.5*(x1(k)+x1(k-1)); %计算数据矩阵B的第一列数据
end
y=x0';
y(1)=[];
b(:,1)=-z';
b(:,2)=1;
b(1,:)=[];
ab=inv(b'*b)*b'*y; %计算参数 矩阵
a=ab(1);
b=ab(2);
px0(1)=x0(1);
%求还原值系列
for k=1:number-1
px0(k+1)=(1-exp(a)) * ( x0(1)-b/a ) * exp(-a*k);
end
temp=px0(1:n);
x0;
temp=(temp-x0)./x0; %相对误差
temp(1)=[]; %删除第一个为零的误差
temp=abs(temp);
rel=sum(temp)/(n-1)*100;

残差Gm(1,1)
function [px0,ab,rel]=ccgm11(x0,number)
%[px0,ab,rel]=gm11(x0,number)
%px0为残差预测数列,ab为求得的系数,rel为平均相对误差(为百分比)
%默认的number参数为原数组大小
if nargin==1
number=max(size(x0));
end
n=max(size(x0)); %数组大小..
[px0,ab,rel]=gm11(x0,number);
wucha=x0-px0(1:n);
i=n;
%求后面的同号的数目.
while(wucha(i)*wucha(i-1)>0 & i>=2)
i=i-1;
end
start=i;
length=n-i+1;
new=wucha(start:n);
if length>=4
pwucha=gm11(new);
px0(start:n)=px0(start:n)+pwucha
clear wucha;
wucha=px0-x0;
wucha=wucha./x0; %相对误差
wucha=abs(wucha);
rel=sum(wucha)/(n-1)*100;
end

verhust
function [px0,ab,rel]=verhust(x1,number)
%[px0,ab,rel]=verhust(x0,number)
%px0为预测数列,rel为平均相对误差,rel为平均相对误差(为百分比)
%默认的number参数为原数组大小
if nargin==1
number=max(size(x1));
end
n=max(size(x1));
x0(1)=x1(1);
for k=2:n
x0(k)=x1(k)-x1(k-1);
z(k)=0.5*(x1(k)+x1(k-1));
end
x0;
z;
B=[-(z(2:n))' (z(2:n).^2)'];
B;
Y=(x0(2:n))';
Y;
ab=inv(B'*B)*B'*Y;
a=ab(1);b=ab(2);
for k=1:number
px0(k)=(a*x1(1))/(b*x1(1)+(a-b*x1(1)).*exp(a*(k-1)));
end
temp=px0(1:n);
x1;
temp=(temp-x1)./x1; %相对误差
temp(1)=[]; %删除第一个为零的误差
temp=abs(temp);
rel=sum(temp)/(n-1)*100;

新陈代谢Gm(1,1)
function [px0,ab,rel]=xcdxgm11(x0,number,step)
%[px0,ab,rel]=xcdxgm11(x0,number,step)
%x0为原系列,number为要预测的数目,step为基本步长
%px0为预测数列,rel为平均相对误差,rel为平均相对误差(为百分比)
%默认的number参数为原数组大小
%模型假设预测的数据和原始数据都要大于等于5
if nargin==1
number=max(size(x0));
step=max(size(x0));
end
if nargin==2
step=max(size(x0));
end
n=max(size(x0));
if n<step | n<5
error('此模型要求至少有五个原始数据,并且原始数据个数要大于新陈代谢的步长.');
end
[px0,ab,rel]=gm11(x0,n);
last=n;
x0;
px0;
while last<number
begin=last-step+1;
temp=px0(begin:last);
temp=gm11(temp,step+1);
last=last+1;
px0(last)=temp(step+1);
end
参考技术A 最后几行改两个地方就可以了:fori=1:n+11%计算数据估计值的累加数列,如改为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,:)fori=1:n+10%如改n为n+m-1,可预测后m-1个值var(i+1,:)=ago(i+1,:)-ago(i,:);%估计值的累加数列的还原,并计算出下一预测值end 参考技术B 而每一次的努力,又会让你取得更大的成功。

matlab中灰色模型改进的背景值代码怎么写

clc
clear all
% 本程序主要用来计算根据灰色理论建立的模型的预测值。
% 应用的数学模型是 GM(1,1)。
% 原始数据的处理方法是一次累加法。
y=[1662.87 2163.4 1965.35 2472.48 2900.66 3034.93 2755.5 3207 3462];%已知数据
n=length(y);
yy=ones(n,1);
yy(1)=y(1);
for i=2:n
yy(i)=yy(i-1)+y(i);
end
B=ones(n-1,2);
for i=1:(n-1)
B(i,1)=-(yy(i)+yy(i+1))/2;
B(i,2)=1;
end
BT=B';
for j=1:n-1
YN(j)=y(j+1);
end
YN=YN';
A=inv(BT*B)*BT*YN;
a=A(1);
u=A(2);
t=u/a;
t_test=4;  %需要预测个数
i=1:t_test+n;
yys(i+1)=(y(1)-t).*exp(-a.*i)+t;
yys(1)=y(1);
for j=n+t_test:-1:2
ys(j)=yys(j)-yys(j-1);
end
x=1:n;
xs=2:n+t_test;
yn=ys(2:n+t_test);
plot(x,y,'^r',xs,yn,'*-b');
det=0;
for i=2:n
det=det+abs(yn(i)-y(i));
end
det=det/(n-1);
disp(['百分绝对误差为:',num2str(det),'%']);
disp(['预测值为: ',num2str(ys(n+1:n+t_test))]);
输出结果:
百分绝对误差为:228.3113%
预测值为: 3710.152      3978.2142      4265.6442      4573.8413
参考技术A function GM1_1(X0)%format long ;[m,n]=size(X0);X1=cumsum(X0); % 累加X2=[J;for i=1:n-1X2(i,:)=X1(i)+X1(i+1);endB=-0.5.*X2 ;t=on es(n-1,1);B=[B,t] ; % 求 B 矩阵YN=X0(2:end);P_t=YN./X1(1:(length(X0)-1)) %对原始数据序列XO进行准光滑性检验,%序列 xO 的光滑比 P(t)=XO(t)/X1(t-1)A=inv(B.,*B)*B.,*YN.1;a=A(1)u=A(2)c=u/a ;b=X0(1)-c;X=[num2str(b),'exp,,,(,,num2str(-a);k7),,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(1J)=Y_k_1d+1)-Y_k_1(j);endXY=[Y_k_1(1),Y] % 预测值CA=abs(XY-XO); %残差数列Theta=CA %残差检验绝对误差序列XD_Theta= CA ./ X0 %残差检验 相对误差序列AV=mean(CA); %残差数列平均值R_k=(min(Theta)+0.5*max(Theta))./(Theta+0.5*max(Theta));% P=0.5R=sum(R_k)/length(R_k) %关联度TempO=(CA-AV).A2 ;Tempi =sum(TempO)/length(CA);S2=sqrt(Temp1); %绝对误差序列的标准差% AV_O=mean(XO); %原始序列平均值Temp_0=(X0-AV_0).A2 ;Temp_1 =sum(Temp_O)/length(CA);
S1=sqrt(Temp_1) ; %原始序列的标准差TempC=S2/S1 *100; % 方差比C=strcat(num2str仃empC);%') %后验差检验%方差比% SS=0.675*S1 ;Delta=abs(CA-AV);TempN=find(Delta<=
参考技术B 热门频道

首页

博客

研修院

VIP

APP

问答

下载

社区

推荐频道

活动

招聘

专题

打开CSDN APP
Copyright © 1999-2020, CSDN.NET, All Rights Reserved

打开APP

Matlab实现改进灰色预测GM(1,1) 原创
2022-09-20 20:24:52
1点赞

新出炉的烤鸡

码龄2年

关注
参考论文:

[1]佚名. 灰色预测GM(1,1)模型的改进及应用[J]. 数学的实践与认识, 2011, 41(23):8.

详细介绍请查看论文,介绍很详细,本文只作记录。

本文用Matlab复现了论文第三部分的改进的灰色预测GM(1,1)模型,如有错误,敬请指正。

打开CSDN APP,看更多技术内容

gm(1、1)模型python代码_Matlab实现GM(1,1)模型(源代码)_weixin_39637...
gm(1、1)模型python代码_Matlab实现GM(1,1)模型(源代码) 关于这个模型的介绍不想多说了,只是一个娱乐而已。下面是所有的代码,直接粘到你的M文件里面,然后跑就是了。 一分钱不收。 function [ simulation,params] = GM( org ) ...
继续访问
...附完整Python代码)_小堂同学的博客_python预测模型代码
灰色系统理论是一个比较庞大的体系,在数据分析有很多的广泛使用,包括灰色关联分析、GM(1,1)、GM(2,1)、GM(1,n)以及各种改进的灰色模型算法。今天主要介绍GM(1,1)这个最简单的模型。
继续访问
改进的灰度预测算法
对数据做了优化处理的灰色预测模型。通过数据优化,满足灰色预测的级比要求。
gm11模型 MATLAB源代码,灰色预测模型 GM(1,1)- 级比检测不通过 - 平移变换常数c的确定(内含代码)...
灰色预测模型 GM(1,1) - 级比检测不通过 - 平移变换常数c的确定(内含代码)谢谢!(哇-------没注意就5600多访问量了,激动!!!!我的初衷只是想把blog作为我的学习笔记,回首往昔,也会发现值得让我引以为豪的事,风云变幻,初心不改!我会加油的)灰色预测概述相信当我们在做数学建模的时候,一定会遇到数据不符合模型规则的情况,

以上是关于数学建模灰色预测程序代码?的主要内容,如果未能解决你的问题,请参考以下文章

数学建模MATLAB应用实战系列(八十三)-灰色预测(附MATLAB代码)

备战数学建模33-灰色预测模型2

Matlab:数模03-灰色预测

Matlab数学建模灰色预测模型

Matlab数学建模灰色预测模型

Matlab数学建模灰色预测模型