zoukankan      html  css  js  c++  java
  • ARMA(p,q)模型数据的产生

    一、功能

    产生自回归滑动平均模型(ARMA(p,q))的数据。

    二、方法简介

    自回归滑动平均模型(ARMA(p,q))

    [x(n)+sum_{i=1}^{p}a_{i}x(n-i)=sum_{i=0}^{q}b_{i}w(n-i) ]

    其中(a_i(i=1,2,...,p))是自回归系数,(b_i(i=1,2,...,q))是滑动平均系数,(w(n))是白噪声。

    给定白噪声(w(n))的均值和方差,便可以由上式产生(ARMA(p,q))的数据。

    三、使用说明

    是用C语言实现产生二项分布随机数的方法如下:

    /************************************
    	a       ---一维数组,长度为(p+1),ARAM(p,q)模型的自回归系数。
    	b       ---一维数组,长度为(q+1),ARAM(p,q)模型的滑动平均系数。
    	p       ---RAM(p,q)模型的自回归阶数。
    	q       ---RAM(p,q)模型的滑动平均阶数。
    	mean	---白噪声正态分布均值mu。
    	sigma	---白噪声正态分布均方差sigma。
    	seed    ---随机数种子
    	x		---一维数组,长度n,存放ARAM(p,q)模型的数据。
    	n 		---放ARAM(p,q)模型的长度。
    ************************************/
    #include "stdlib.h"
    #include "gauss.c"
    
    void arma(double *a, double *b, int p, int q, double mean, double sigma, long int *seed, double *x, int n)
    {
    	int i;
    	int k;
    	double s;
    	double *w;
    
    	w = malloc(n * sizeof(double));
    	for(k = 0; k < n; k++)
    		w[k] = gauss(mean, sigma, seed);
    	x[0] = b[0] * w[0];
    	for(k = 1; k <= p; k++){
    		s = 0.0;
    		for(i = 1; i <= k; i++)
    			s += a[i] * x[k - 1];
    		s = b[0] * w[k] - s;
    		if(q == 0){
    			x[k] = s;
    			continue;
    		}
    		m = (k > q) ? q : k;
    		for(i = 1; i <= m; i++)
    			s += b[i] * w[k - i];
    		x[k] = s;
    	}
    
    	for(k = (p + 1); k < n; k++){
    		s = 0.0;
    		for(i = 1; i <= p; i++)
    			s += a[i] * x[k - i];
    		s = b[0] * w[k] - s;
    		if(q == 0){
    			x[k] = s;
    			continue;
    		}
    		for(i = 1; i <= q; i++)
    			s +=b[i] * w[k - i];
    		x[k] = s;
    	}
    	free(w);
    }
    

    gauss.c文件参见正态分布的随机数

  • 相关阅读:
    cidaemon.exe过程cpu入住率和关闭cidaemon.exe加工方法
    .net 一些常用的工具来破解
    关于加密和解密的设计思路
    oncopy和onpaste
    来迁移数据管道
    使用JSP实现商场购物车模块
    2014在辛星Javascript口译科
    Lua学习 1) —— Android呼叫变量值和分配
    HttpSQS
    手机后端开发
  • 原文地址:https://www.cnblogs.com/liam-ji/p/11679384.html
Copyright © 2011-2022 走看看