/* garma.c CCMATH mathematics library source code. * * Copyright (C) 2000 Daniel A. Atkinson All rights reserved. * This code may be redistributed under the terms of the GNU library * public license (LGPL). ( See the lgpl.license file for details.) * ------------------------------------------------------------------------ */ /* Test: sarma setsim (generates an ARMA model test series) Uses: nrml setnrml Input parameters: n -> integer: length of series control_file -> name of model definition file [ ts?.dat -> time series model ] outfile -> name of output file [binary data -> a series size header and the values of the series] */ #include "ccmath.h" double *y; struct mcof *par,*pma; int nar,nma,np; void main(int na,char **av) { double z; FILE *fp,*fo; int n,i,j,k; unsigned int seed; struct mcof *pa; char cfl[32],ofl[32]; if(na!=4){ printf("para: n control_file outfile\n"); exit(-1);} n=atoi(*++av); y=(double *)calloc(n,sizeof(*y)); fp=fopen(*++av,"r"); strcpy(cfl,*av); fo=fopen(*++av,"wb"); strcpy(ofl,*av); fscanf(fp,"%d %d",&nar,&nma); np=nar+nma; par=(struct mcof *)calloc(np,sizeof(*pa)); pma=par+nar; for(j=0,pa=par; jcf),&(pa->lag)); pa->lag-=1; } fscanf(fp,"%u",&seed); setnrml(seed); /* initialize series simulation */ setsim(1); n+=25; for(j=k=0; j=25) y[k++]=z; } /* write series to output file with size as a header record */ n-=25; fwrite((void *)&n,sizeof(int),1,fo); k=fwrite((void *)y,sizeof(double),n,fo); if(k!=n){ printf("I/O error\n"); exit(1);} /* write model specification */ printf(" control file = %s\n",cfl); printf(" output file = %s\n",ofl); printf(" %d points generated\n",n); printf(" random seed= %u\n",seed); if(nar){ printf(" autoregressive parameters and lags\n"); for(j=0,pa=par; jcf,pa->lag+1); } if(nma){ printf(" moving average paramerers and lags\n"); for(j=0,pa=pma; jcf,pa->lag+1); } }