ARMA(p,q)模型数据的产生
2024-09-07 11:42:52
一、功能
产生自回归滑动平均模型\(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文件参见正态分布的随机数
最新文章
- FSM 浅谈
- Java基础之一组有用的类——使用公历日历(TryCalendar)
- mysql substring_index
- pyhton3多线程
- APMServ5.2.6 升级PHP版本 到高版本 5.3,5.4
- <;Win32_6>;程序员求爱的创意程序^_^
- CTL_CODE 宏 详解
- ZOJ 2710 Two Pipelines
- 解决yii框架,gii脚手架不能使用。
- 关于我立牌坊那个SSM项目
- 授权远程连接MySQL(Linux)
- NYOJ 炫舞家st
- jmeter5.0生成html报告 快速入门
- Android 面试题 MD
- unity3d-游戏实战突出重围,第一天
- VOT工具操作指南(踩过的坑)
- npm(cnpm)介绍(安装gulp)
- 将oracle数据库表使用命令的形式导入到excle文件中 亲测可用!
- 关于微信js接口调用时,token效期问题
- 30分钟LINQ教程【转】