`

灰色预测java实现

阅读更多
/**
* 灰度预测模型
*
* @author Sean Chen
* @version 1.0 2012-12-6
*/
public class GrayModel {
private double a0, a1, a2;
private int size;
private double error;

public GrayModel() {
}

public void build(double[] x0) {
size = x0.length;
double[] x1 = new double[size];
x1[0] = x0[0];
for (int i = 1; i < size; i++) {
x1[i] = x0[i] + x1[i - 1];
}
double[][] b = new double[size - 1][2];
double[][] bt = new double[2][size - 1];
double[][] y = new double[size - 1][1];
for (int i = 0; i < b.length; i++) {
b[i][0] = -(x1[i] + x1[i + 1]) / 2;
b[i][1] = 1;
bt[0][i] = b[i][0];
bt[1][i] = 1;
y[i][0] = x0[i + 1];
}
double[][] t = new double[2][2];
multiply(bt, b, t);
t = inverse(t);
double[][] t1 = new double[2][size - 1];
multiply(t, bt, t1);
double[][] t2 = new double[2][1];
multiply(t1, y, t2);
a0 = t2[0][0];
double u = t2[1][0];
a2 = u / a0;
a1 = x0[0] - a2;
a0 = -a0;

error = 0;
for (int i = 0; i < x0.length; i++) {
double d = (x0[i] - getX0(i));
error += d * d;
}
error /= x0.length;
}

/**
* 误差
*
* @return
*/
public double getError() {
return error;
}

double getX1(int k) {
return a1 * Math.exp(a0 * k) + a2;
}

double getX0(int k) {
// return a0 * a1 * Math.exp(a0 * k);
if (k == 0)
return a1 * Math.exp(a0 * k) + a2;
else
return a1 * (Math.exp(a0 * k) - Math.exp(a0 * (k - 1)));
}

/**
* 预测后续的值
*
* @param index
* @return
*/
public double nextValue(int index) {
if (index < 0)
throw new IndexOutOfBoundsException();
return getX0(size + index);
}

/**
* 预测下一个值
*
* @return
*/
public double nextValue() {
return nextValue(0);
}

static double[][] inverse(double[][] t) {
double[][] a = new double[2][2];
double det = t[0][0] * t[1][1] - t[0][1] * t[1][0];
a[0][0] = t[1][1] / det;
a[0][1] = -t[1][0] / det;
a[1][0] = -t[0][1] / det;
a[1][1] = t[0][0] / det;
return a;
}

static void multiply(double[][] left, double[][] right, double[][] dest) {
int n1 = left.length;
int m1 = left[0].length;
int m2 = right[0].length;
for (int k = 0; k < n1; k++) {
for (int s = 0; s < m2; s++) {
dest[k][s] = 0;
for (int i = 0; i < m1; i++) {
dest[k][s] += left[k][i] * right[i][s];
}
}
}
}

public static void main(String[] args) {
GrayModel gs = new GrayModel();
// 函数 sin+cos
double[] y = new double[10];
double step = 0.001;
double x = 0.001;
for (int i = 0; i < y.length; i++) {
y[i] = Math.sin(x) + Math.cos(x);
x += step;
}
gs.build(y);
for (int i = 0; i < 5; i++) {
// 真实值与预测值的差值
System.out.println(Math.sin(x) + Math.cos(x) - gs.nextValue(i));
x += step;
}
System.out.println(Math.sqrt(gs.getError()));
}
}

文章转自 http://chen-yongkai.iteye.com/blog/1742805
分享到:
评论

相关推荐

    java实现灰色关联算法,计算灰色关联度

    在Java编程环境中实现灰色关联算法,可以让我们更好地处理这些复杂问题。下面将详细介绍灰色关联算法的基本原理,以及如何使用Java来实现它。 灰色关联算法的核心思想是通过比较参考序列和待测序列之间的差异,来...

    灰色预测模型.rar灰色预测模型.rar

    "Yuce.jar"是一个Java Archive文件,它包含了灰色预测模型的实现。用户可以直接导入这个jar包到Java项目中,通过调用相应的类和函数,就可以应用灰色预测模型进行预测分析。这样做简化了开发流程,无需理解内部实现...

    GM11_原序列与预测序列的灰色预测_

    而"GM11.m"是一个MATLAB脚本文件,很可能包含了灰色预测模型的实现代码,包括数据预处理、模型构建、参数估计、模型检验和预测等步骤。 灰色预测模型通常用于处理非线性、非平稳的数据序列,通过构造灰色微分方程来...

    PSOGM_PSO优化_PSOGM_PSO预测_PSO-灰色预测_PSO.zip

    4. **PSO与灰色预测的融合**:这部分代码会展示如何将优化后的PSO用于灰色预测模型的参数估计,通过优化求得最佳参数,提高预测精度。 5. **示例应用**:可能包括一些示例数据集和对应的运行脚本,展示如何使用这些...

    MATLAB实现灰色预测程序.doc.zip

    标题中的“MATLAB实现灰色预测程序.doc.zip”表明这是一个关于使用MATLAB进行灰色预测模型构建的文档压缩包。MATLAB是一种强大的数学计算软件,广泛应用于工程、科学和数据分析领域。灰色预测模型则是一种处理小样本...

    MATLAB_+_灰色预测程序,数学建模.doc.zip

    MATLAB提供了方便的工具和函数来实现灰色预测模型,如`graymod`函数可以用来构建基本的灰色预测模型GM(1,1),其中“1,1”表示模型的阶数。 文档“MATLAB_+_灰色预测程序,数学建模.doc”可能会详细解释以下内容: 1...

    用MATLAB实现灰色预测GM_1_1_模型_唐丽芳

    ### 使用MATLAB实现灰色预测GM(1,1)模型 #### 一、背景知识和模型介绍 ##### (一) 背景知识 **MATLAB**(Matrix Laboratory,矩阵实验室)是一款由MathWorks公司开发的强大数学计算软件。该软件不仅支持数值计算...

    带残差修正的灰色算法代码

    基于GM(1,1)模型的灰色算法改进,带残差修正的灰色算法java实现

    灰色理论程序.zip_灰色理论神经网络程序_灰色神经_灰色神经网络_神经网络预测

    在这个压缩包中,我们可以找到一个名为"灰色理论程序"的文件,这很可能是实现灰色神经网络预测的核心代码。这个程序可能是用某种编程语言(如Python、C++或Java)编写的,旨在利用灰色理论的建模方法和神经网络的...

    GM_1_1_模型的改进及其应用

    过分析GM(l,)l模型的建模原理可以发现两个问题:()l灰色预测模型从本质上 可认为是指数预测模型,因此其预测精度与被预测对象的递变规律以及数据序列 的光滑度有关;(2)灰色微分拟合法建立的离散拟合方程是一个近似差...

    71.配套案例28 灰色神经网络的预测算法-订单需求预测.zip

    在这个案例中,"Greynet.m" 是实现灰色神经网络预测算法的MATLAB代码文件。MATLAB是一款强大的数学计算软件,广泛应用于科学计算、图像处理等领域。通过阅读和运行这个代码,我们可以了解到灰色神经网络的具体构建...

    改进的灰色Verhulst模型 (2014年)

    针对灰色Verhulst模型预测函数中参数c的求解问题,提出了一种优化预测函数的新方法。该方法以累加生成序列的倒数与其倒数模拟值的差值平方和最小为目标函数,构建了一个非线性无约束优化模型,来求解灰色Verhulst...

    27.MATLAB神经网络43个案例分析 基于灰色神经网络的预测算法研究-订单需求预测.zip

    在这个压缩包中,"27.MATLAB神经网络43个案例分析 基于灰色神经网络的预测算法研究-订单需求预测.zip",我们关注的是如何使用MATLAB来实现基于灰色神经网络的预测算法,特别是针对订单需求的预测。这个主题涵盖了两...

    入门MATLAB神经网络和优化算法专题:20 灰色神经网络预测订单需求.zip

    MATLAB的脚本和函数可以方便地与其它编程语言(如Python、Java)进行接口交互,从而实现预测模型在业务系统的部署。 总的来说,这个MATLAB神经网络和优化算法专题旨在通过实例教学,让初学者掌握如何利用MATLAB构建...

    灰色关联度

    灰色关联度分析是一种在数据不完全、信息模糊的复杂环境中,评估不同序列之间相似性的统计方法。...通过MATLAB这样的编程平台,我们可以有效地实现这一分析过程,从而在决策支持、预测模型等领域发挥重要作用。

    基于MATLAB实现的灰色神经网络的预测算法订单需求预测(Maltab源代码+数据集+运行说明).zip

    对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步...

Global site tag (gtag.js) - Google Analytics