-
大小: 8KB文件类型: .java金币: 2下载: 1 次发布日期: 2021-08-20
- 语言: Java
- 标签: java 指数平滑 holt_winters
资源简介
代码片段和文件信息
package python;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Holt_Winters {
/**
* 一次指数平滑法 只适用于 水平型历史数据 的 预测,而不适用 于 斜坡型线性 趋势 历史数据的预测
* 二次移动平均法的原理完全适用于二次指数平滑法,即对于斜坡型的历史数据,历史数据和一次指数平滑值的差值与一次指数平滑值和二次指数平滑值的差值基本相同
* 三次是支持抛物线
*
* 系数α的确定
* 指数平滑法的计算中,关键是α的取值大小,但α的取值又容易受主观影响,因此合理确定α的取值方法十分重要,一般来说,如果数据波动较大,α值应取大一些,可以增加近期数据对预测结果的影响。如果数据波动平稳,α值应取小一些。理论界一般认为有以下方法可供选择:
* 经验判断法。这种方法主要依赖于时间序列的发展趋势和预测者的经验做出判断。
* 1、当时间序列呈现较稳定的水平趋势时,应选较小的α值,一般可在0.05~0.20之间取值;
* 2、当时间序列有波动,但长期趋势变化不大时,可选稍大的α值,常在0.1~0.2之间取值;
* 3、当时间序列波动很大,长期趋势变化幅度较大,呈现明显且迅速的上升或下降趋势时,宜选择较大的α值,如可在0.6~0.8间选值,以使预测模型灵敏度高些,能迅速跟上数据的变化;
* 2、当时间序列数据是上升(或下降)的发展趋势类型,α应取较大的值,在0.6~1之间。
* 试算法。根据具体时间序列情况,参照经验判断法,来大致确定额定的取值范围,然后取几个α值进行试算,比较不同α值下的预测标准误差,选取预测标准误差最小的α。
* 在实际应用中预测者应结合对预测对象的变化规律做出定性判断且计算预测误差,并要考虑到预测灵敏度和预测精度是相互矛盾的,必须给予二者一定的考虑,采用折中的α值
*/
public static double[] primary_index(double a double data[][]) {
List pi = new ArrayList();
double[] result = new double[data.length];
double s1 = 0.0;
double st = 0.0;
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[0].length; j++) {
if (j < 3) {
s1 += data[i][j];
if (data[0].length < 20)
st = s1 / 3;
else
st = data[i][0];
}
}
pi.add(st);
for (int k = 0; k < data[0].length; k++) {
pi.add(a * data[i][k] + (1 - a) * pi.get(k));
}
result[i] = pi.get(pi.size() - 1);
}
return result;
}
public static double[] get2_value(double data[][] int t) {
double a = 0.3;//指数平滑系数
List S_1 = new ArrayList();
List S2_1_new = new ArrayList();
List S2_2_new = new ArrayList();
double[] pre_values = new double[data.length];
double s1 = 0.0;
double st = 0.0;
double at = 0.0;
double bt = 0.0;
double xt = 0.0;
for (int i = 0; i < data.length; i++) {
for (int j = 1; j < data[0].length; j++) {
if (j < 2) {
s1 += data[i][j - 1];
if (data[0].length < 20)
st = s1 / 3;
else
st = data[i][0];
}
}
S_1.add(st);//初始值
for (int k = 0; k < data[0].length; k++) {
if (k == 0)
S2_1_new.add(a * data[i][k] + (1 - a) * S_1.get(k));
else
S2_1_new.add(a * data[i][k] + (1 - a) * S2_1_new.get(k - 1));
}
for (int l = 0; l < data[0].length; l++) {
- 上一篇:java俄罗斯方块源码
- 下一篇:guns学习课程包括收费的视频
相关资源
- mysql数据处理,java用户登录处理
- 法律咨询信息系统(java+jsp+sqlserver)
- Java快速开发平台源码(renren-fast)
- 锐聘学院QST青软JavaWeb十二个打包
- 3.3.6微信支付JAVA版demo
- javaweb网上购物系统源码(附数据库脚
- javaweb校园宿舍系统(附数据库脚本)
- JavaWeb书城项目(附数据库脚本)
- 基于JAVA_JSP电子书系统(源码+数据库
- Java网络编程知识点总结.xmind
- 一站式Java网络编程 BIO-NIO-AIO资料源码
- jsp讲解
- 基于SSH框架的JavaWeb项目—人员信息管
- javaweb实现的邮件收发系统(附数据库
- Java 仿QQ(附客户端以及服务端源码)
- Java TCP IP Socket
- java定时发送邮件(基于quartz)
- Java Swing开发的《星际争霸》游戏
- java+数据库商品交易管理系统(附数据
- 使用java语言编译一个计算器
- java swing工资管理系统(源码+数据库
- JAVALibrary
- 微信企业号回调模式Java版
- 顺丰丰桥接口开发详细教程源码含下
- Java博客概要设计文档
- 药品进销存管理系统(论文范文_JSP
- 奖学金管理系统java+jsp+mysql
- 毕设参考——基于java酒店管理
- Java写的一个简单的字体更改程序
- java8学习教程之lambda表达式的使用方法
评论
共有 条评论