/* [web:reg] Hodrick Prescott Filter - DLL © 2006, Kurt Annen email: annen@web-reg.de web: www.web-reg.de 'Cardware' This DLL was written by Kurt Annen (www.web-reg.de/contact.html) If you like the program, please send me a postcard. */ #include "hp_filter.h" DLLEXPORT int hp_filter(double *data, UINT nobs,double lambda, double *output, BOOL ret) { /* * Schneller Algorithmus zur Lösung des LGS BxX=Y * unter Berücksichtigung, dass B eine pentadiagonale Matrix ist * siehe z.B. Helmut Späth "Numerik, Eine Einführung für * Mathematiker und Informatiker", S. 110 ff, Braunschweig & * Wiesbaden, 1994 * */ double* a; double* b; double *c; register UINT i=0; double H1=0; double H2=0; double H3=0; double H4=0; double H5=0; double HH1=0; double HH2=0; double HH3=0; double HH4=0; double HH5=0; double Z; double HB; double HC; /* Testen, ob nobs >5 */ if (nobs <= 5) return 1; /* Speicher in den HEAP */ a = (double *) calloc(nobs, sizeof(double)); b = (double *) calloc(nobs, sizeof(double)) ; c = (double *) calloc(nobs, sizeof(double)); /* Testen auf Speicherproblem */ if (a == NULL || b == NULL || c == NULL) return 2; /* Da bei diesem Algorithmus, die Daten überschrieben wrden, müssen wir ein neuen Array füllem. */ for(i=0;i0;i--) { output[i-1]=a[i-1]-b[i-1]*H1-c[i-1]*H2; H2=H1; H1=output[i-1]; } /* Trend oder zyklische Komponente? */ if (ret==FALSE) for(i=0;i