在我们进行Web项目开发时,经常需要预测一些离散的数据,那么灰色模型预测算法是可选的方案之一,以下算法我是根据一本教材中的流程图写得,应该算是比较早期写的东东了,以下是GM(1,1)算法,稍微改造一下即可变成GM(1,N)算法,源代码如下:
public class GM1_1
{
private int T;//样本数量
private int M;
private double[] X;//原始数列
private double[] XF;//预测值
private double[] WC;//误差值
private double[][] B; //B矩阵
private double[][] YN; //YN矩阵
private double[] X1; //AGO结果
private double a=0,u=0;//[a,u]T向量
protected DataSet observedData = new DataSet();
public GM1_1()
{
}
/**
* 取预测类型
* @return
*/
public String getForecastType(){
return "longshine.epdsm.forecase.GM1_1";
}
/**
* 取预测模型名称
* @return
*/
public String toString(){
return "灰色模型GM(1,1)";
}
/**
* 取预测模型代码
* @return
*/
public String getForecastModelNo(){
return "mypack.GM1_1";
}
public double forecast( IDataPoint dataPoint ){
int x= (int)Math.round(dataPoint.getIndependentValue("x"));
Matrix M_YN;
Matrix M_B;
Matrix M_Reverse;
try{
M_YN= new Matrix(YN);
M_B=new Matrix(B);
Matrix tmp=M_B.transpose().multiply(M_B).inverse();
//利用最小二乘法求a系数向量a~=(B'B)-1B'YN
M_Reverse=GMUtils.getGrayModelModulus(M_B,M_YN);
a=M_Reverse.getEntry(1,1);
u=M_Reverse.getEntry(2,1);
}catch(Exception e)
{
e.printStackTrace();
}
//开始预测
try
{
XF[0]=X[0];
for(int i=1;i<XF.length;i++)
{
XF[i]=GMUtils.getT1Time(a,u,X[0],i);
}
}catch(Exception e)
{
e.printStackTrace();
}
WC=GMUtils.getRelativeError(X,XF);
if(x<T) return X[x];
else
{
try
{
double res=GMUtils.getT1Time(a,u,X[0],x);
return res;
}catch(Exception e)
{
e.printStackTrace();
return 0.;
}
}
}
public void init( DataSet dataSet )
{
this.observedData = dataSet;
setT(dataSet.size());
X=new double[T];
initX();
setT(X.length);
this.M=X.length-1;
XF=new double[X.length];
WC=new double[X.length];
B=new double[M][2];
YN=new double[M][1];
X1=GMUtils.sumArray(X);
a=0;u=0;
//初始化B,Yn
for(int i=0;i<M;i++)
{
B[i][0]=-(X1[i]+X1[i+1])/2;
B[i][1]=1;
}
for(int i=0;i<M;i++)
{
YN[i][0]=X[i+1];
}
}
public int getM()
{
return this.M;
}
private void initX() //X赋值
{
for (int i=1 ;i<=T ;i++ )
{
IDataPoint dp = (IDataPoint)observedData.get(i-1);
X[i-1] = dp.getDependentValue();
}
}
public int getT()
{
return T;
}
public void setT(int T)
{
this.T = T;
}
public static void main(String[] args)
{
final double[] powers={
124.8,
110.7,
129.0,
155.3,
219.03
};
DataSet dataset = new DataSet();
IDataPoint dp;
int count = 1;
for (int i=0 ;i<powers.length ;i++ )
{
dp = new Observation( powers[i] );
dp.setIndependentValue( "x", i+1 );
dp.setTitle("xxx");
dataset.add( dp );
};
GM1_1 aa = new GM1_1();
aa.init(dataset);
dp = new Observation(0);
dp.setIndependentValue( "x", 5);
System.out.println("7="+aa.forecast(dp));
dp.setIndependentValue( "x", 6);
System.out.println("8="+aa.forecast(dp));
dp.setIndependentValue( "x", 7);
System.out.println("9="+aa.forecast(dp));
dp.setIndependentValue( "x", 8);
System.out.println("10="+aa.forecast(dp));
dp.setIndependentValue( "x", 9);
System.out.println("11="+aa.forecast(dp));
}
}
分享到:
相关推荐
粒子群优化算法优化灰色预测模型GM(1,1)+matlab源代码
灰色模型(GM)是灰色预测的数学表达形式,其中GM(1,1)是模型中最基础的形式,它适用于数据序列少、非线性和不规则的数据序列的预测问题。 在具体应用中,灰色预测模型的建立首先需要收集并预处理数据。通过一阶...
SCGM预测模型是对灰色系统理论的扩展,全称为系统成分灰色模型。它考虑了系统内部的结构关系和外部环境的影响,能够更准确地描述复杂系统的动态行为。SCGM模型通常由多个子模型组成,每个子模型对应系统的一部分特征...
标题中的“Matlab源码 基于灰色模型GM模型实现地区PM2.5的预测”揭示了这个压缩包文件的主要内容,它是一组用MATLAB编程语言编写的源代码,目的是利用灰色模型(GM模型)对特定地区的PM2.5(细颗粒物)浓度进行预测...
标题中的“基于BP神经网络和GM(1,1)灰色模型的中国人口预测分析_matlab源码.rar”表明,这是一个使用MATLAB编程实现的项目,旨在利用两种不同的预测方法——BP神经网络和GM(1,1)灰色模型,对中国的未来人口发展趋势...
在本压缩包文件中,"SCGM_forecasting_灰色预测_灰色预测模型_预测_预测模型_源码.zip"可能包含了实现SCGM模型的源代码。通过这些源代码,用户可以了解如何编程实现灰色预测模型,包括数据预处理、模型构建、参数...
2. **建立GM(1,1)模型**:灰色预测模型GM(1,1)是最基本的灰色模型,其中1代表一次差分,1代表模型的阶数。模型的建立主要基于生成的一阶累加生成序列,通过最小二乘法求解模型参数,包括初值a和常数b。 3. **模型...
MATLAB源码集锦中的灰色预测算法代码,对于理解和应用灰色预测模型非常有帮助,无论是学术研究还是工程实践,都能提供有效的工具支持。通过学习和修改这些源码,可以加深对灰色预测原理的理解,提升数据分析和预测的...
开发者可能首先分别使用离散灰色模型和AR模型对时间序列进行预测,然后结合两种模型的预测结果进行组合预测。这有助于在实际应用中提高预测的稳定性和准确性,特别是在复杂的时间序列问题上,单一模型可能无法很好地...
在这种理论框架下,我们可以通过构建灰色模型来挖掘隐藏在数据中的规律。 神经网络,另一方面,是一种模仿人脑神经元工作方式的计算模型,能够通过学习和调整权重来拟合复杂的数据模式。在订单需求预测中,神经网络...
在这个“模型算法之灰色模型.zip”压缩包中,可能包含了一系列使用MATLAB编写的源程序代码,用于演示或实现灰色模型的各种算法。这些代码可能包括了灰色关联度分析、一阶微分灰色模型(GM(1,1))、高阶灰色模型、...
在本例中,该分享地址包含了MATLAB实现灰度预测模型的源代码,用户可以通过访问该链接获得源代码。 5. 下载和使用源码:要使用MATLAB源码,用户首先需要有MATLAB软件的安装环境。用户通过访问上述百度网盘的分享...
本资料包包含灰色模型的MATLAB智能算法模型、相关课件讲义以及源代码,旨在帮助学习者深入理解和应用灰色模型。 1. **灰色系统理论基础**: - 灰色系统理论是由中国科学家邓聚龙在1970年代提出,主要针对部分信息...
2.内容:基于GM灰色预测模型的污水排放量增长预测matlab仿真+代码操作视频 3.用处:用于GM灰色预测模型算法编程学习 4.指向人群:本硕博等教研学习使用 5.运行注意事项: 使用matlab2021a或者更高版本测试,...
在提供的“Matlab源码 基于灰度模型预测房价”文件中,应当包含了实现上述步骤的完整代码。通过阅读和理解这些代码,你可以深入学习如何在Matlab中应用灰度模型进行时间序列预测,同时也能了解到如何处理实际问题中...
总的来说,这个资源为学习者提供了一个完整的实践经验,从理论到实践,从模型构建到实际应用,涵盖了基于MATLAB的灰色神经网络预测算法的全过程。通过深入学习和实践,不仅可以提升MATLAB编程技能,还能增强对预测...
总之,MATLAB源码实现的灰色神经网络预测算法在订单需求预测中发挥着重要作用。它结合了灰色系统理论的洞察力和神经网络的适应性,为企业的决策提供有力支持。理解并掌握这种算法,不仅可以提升预测精度,还能为企业...
源代码.zip_灰色模型是一个包含灰色预测模型相关代码的压缩包。灰色模型(Grey Model,简称GM)是一种处理不完全信息或数据具有较大随机性的序列分析方法,它在预测领域有着广泛的应用。在这个压缩包中,我们可以...
2.领域:智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,更多内容可点击博主头像 3.内容:标题所示,对于介绍可点击主页搜索博客 4.适合人群:本科,硕士...
通过阅读并理解"huise1.m"的源代码,我们可以深入学习灰色预测的算法细节,并能灵活运用到其他类似问题的预测分析中。 总之,"huise1.rar"提供的MATLAB源代码展示了如何运用灰色预测模型GM(1,1)对数据进行预测。这...