三次指数平滑(java)

这篇博客介绍了如何使用Java实现三次指数平滑预测方法。首先展示了`tripleExponentialSmoothingService.java`中的一次、二次和三次指数平滑函数,接着在`triplePredictService.java`中定义了预测函数,最后在`testTripleFunction.java`中进行了测试,通过给出的数据序列进行预测并输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tripleExponentialSmoothingService.java
//一次指数平滑  y[]:待预测时间序列  n:取序列前n个数据平均数作为第一次平滑值  a:平滑因子
 double[] onesExponentialSmoothingFunction(double y[], int n, double a) {
    double[] predictSeriesList = new double[17];
    double s0 = 0.0;
    double si;
    for (int i = 0; i < n; i++) {
        s0 += y[i];
    }
    s0 = s0/n;
    predictSeriesList[0] = s0;
    for (int i = 1; i < y.length; i++) {
        si = a * y[i] +(1-a) *s0;
        predictSeriesList[i] = si;
        s0 = si;

    }
    return predictSeriesList;
}

//三次指数平滑  
public double[][] tripleExponentialSmoothingFunction(double y[],int n,double a) {
     //平滑函数列表
    double[][] SmoothList = new double[3][y.length];
     //一次平滑
    double[] onesPredict = onesExponentialSmoothingFunction(y, n, a);
    //二次平滑:在一次平滑基础上再一次平滑
    double[] twicePredict = onesExponentialSmoothingFunction(onesPredict, n, a);
    //三次平滑:在二次平滑基础上再一次平滑
    double[] triplePredict = onesExponentialSmoothingFunction(twicePredict, n, a);
    //存进二维平滑值列表
    SmoothList[0] = onesPredict;
    SmoothList[1] = twicePredict;
    SmoothList[2] = triplePredict;
    //返回平滑值列表
    return SmoothList;

}
triplePredictService.java
//三次指数平滑预测函数 ones[]:一次平滑结果 twice[]:二次平滑结果 triple[]三次平滑结果
// a 平滑因子  t 预测时间点  T 周期
public double TriplePredict(double ones[],double twice[],double triple[],double a,int t, int T){
    //求t时刻的预测值应代入t-1时刻的平滑数
    t = t - 1;
    //预测结果列表
    double ytT ;
    //定义三次指数平滑预测公式的三个系数
    double at,bt,ct;
    at = 3*ones[t] -3*twice[t]+ triple[t];
    bt = a/(2*Math.sqrt(1-a))*((6-5*a)*ones[t]-2*(5-4*a)*twice[t]+(4-3*a)*triple[t]);
    ct = a*a/(2*Math.sqrt(1-a))*(ones[t]-2*twice[t]+triple[t]);

    //三次指数平滑预测
    ytT = at + bt*T +ct*Math.sqrt(T);
    return ytT;
}
testTripleFunction.java
public static void main(String[] args) {
    //
    tripleExponentialSmoothingService t = new tripleExponentialSmoothingService();
    //
    triplePredictService p = new triplePredictService();
    //
    double[] y = new double[]{4,6.4,8,9.22,9.5,9.7,9.86,10,10.32,10.42,10.5,10.55,10.58,10.6,10.1,10.34,10.2};
    //
    double[][] predictList = t.tripleExponentialSmoothingFunction(y, 3, 0.8);
    //
    double predict = p.TriplePredict(predictList[0], predictList[1], predictList[2], 0.8, 10, 1);

    System.out.println(String.format("%.2f",predict));
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值