`
chen_yongkai
  • 浏览: 61527 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类
最新评论

灰度预测模型的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()));
	}
}
0
1
分享到:
评论

相关推荐

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

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

    MATLAB实现灰度预测模型的源代码.rar

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

    GM_1_1_模型的改进及其应用

    GM(l,)l模型是灰色系统理论中应用最广泛的一种灰色动态预测模型,该模 型由一个单变量的一阶微分方程构成。它主要用于复杂系统某一主导因素特征值 的拟合和预测,以揭示主导因素变化规律和未来发展变化态势。然而,...

    基于Maltab开发的实现灰度预测模型的源代码(Maltab源代码+数据集+ppt).rar

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

    基于Maltab开发的实现灰度预测模型的源代码(Maltab源代码+数据集+ppt+毕业设计).rar

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

    用·java实现yolo算法,训练自己的数据 由浅入深代码集.docx

    然而,如果已有Java项目基础或者出于特定需求,如嵌入式系统、JVM环境下的应用,使用Java实现YOLO是可行的,只是需要克服更多的技术挑战。对于初学者,推荐先使用Python和流行的深度学习框架(如TensorFlow、PyTorch...

    人工智能-项目实践-手写数字识别-用java实现一个简单的卷积神经网络,共三层可以识别mnsit

    在本项目实践中,我们将深入探讨如何使用Java实现一个简单的卷积神经网络(CNN)来识别手写数字。这个任务是基于著名的MNIST数据集,它包含了大量的手写数字图像,通常用于训练和测试机器学习模型,尤其是深度学习...

    java实现人脸注册及人脸登录

    这涉及到相似度计算,一般使用欧氏距离、余弦相似度或者深度学习模型的预测概率来衡量新图像与模板之间的相似度。如果相似度超过预设阈值,则认为验证成功。 在实际应用中,为了提高系统的稳定性和安全性,还会涉及...

    Java实现BP神经网络MNIST手写数字识别

    总的来说,Java实现的BP神经网络MNIST手写数字识别项目涉及了神经网络理论、数据预处理、模型训练、模型部署等多个方面,不仅要求扎实的编程基础,还需要对机器学习算法和数据结构有深入理解。这样的项目可以帮助...

    mnist手写体的识别采用KNN算法,Java实现

    标题中的“mnist手写体的识别采用KNN算法,Java实现”涉及到的是一个计算机视觉领域的经典问题,即使用机器学习方法对MNIST数据集的手写数字进行分类。MNIST数据集是包含手写数字图像的大型数据库,常用于训练各种...

    基于Pytorch利用unet网络实现对灰度图语义分割人物的训练和测试源码+红外车辆数据集(高分项目).rar

    1、资源内容: 2、代码特点:参数化编程、参数...擅长计算机视觉、目标检测模型、智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、智能控制、路径规划、无人机等多种领域的算法仿真实验,欢迎交流学习。

    java字符模式识别

    总的来说,Java字符模式识别涉及了图像处理、特征提取、机器学习等多个领域,通过训练和模型预测,实现了对字符的自动识别。开发者可以利用各种Java库和框架,根据具体需求构建高效且精准的字符识别系统。

    java神经网络数字识别

    总结来说,这个项目涵盖了从图像预处理、神经网络模型构建、数据处理到模型训练和测试的完整流程,目标是利用Java实现一个能准确识别0到9数字的神经网络模型。通过MATLAB进行辅助分析,可以更高效地进行数据处理和...

    JAVA开发的人工智能蔬菜识别系统

    在JAVA环境中,可以调用模型API,实现用户界面与模型的交互。 三、实际应用价值 1. **农业生产**:对于大规模的农作物种植,该系统可以帮助农民快速识别病虫害,及时采取防治措施,提升农作物产量和质量。 2. **...

    神经网络数字识别java

    【标题】"神经网络数字识别java"所涉及的知识点主要集中在使用Java编程语言实现神经网络,以进行手写数字的识别。神经网络是一种模仿人脑神经元结构的计算模型,常用于模式识别、图像处理等领域。在这个项目中,Java...

    knn java代码简单实现

    - `KNNClassifier.java`: 这是KNN算法的主要实现,包括计算距离、选择最近邻和预测等功能。 - `KNNTester.java`: 测试类,用于加载数据、调用KNN算法并展示结果。 在实际应用中,你可能还需要考虑数据预处理(如...

Global site tag (gtag.js) - Google Analytics