21
21
#endif
22
22
23
23
/* called from R : */
24
+ void fdhpq (double * h , int * lh , double * w );
24
25
25
26
void fdcov (double * x , double * d__ , double * hh ,
26
27
double * hd , double * cov , int * lcov , double * cor ,
27
28
int * lcor , double * se , double * w , int * info );
29
+ /*-----------------------------------------------------------
28
30
29
- void fdhpq (/*double *x, */ double * h__ , int * lh , double * w );
30
-
31
- /* local to this file: */
31
+ * local to this file: */
32
32
static
33
33
void hesdpq (double * , double , double * , double * , double * );
34
34
static
@@ -45,86 +45,82 @@ void gradpq(double *g, double a[], double ajac[], int l_ajac);
45
45
46
46
/* Common Block Declarations --- included as "extern" */
47
47
#define FD_EXTERNAL extern
48
-
49
48
#include "mach_comm.h"
49
+ /*-> machfd_ */
50
50
#include "maux_comm.h"
51
-
51
+ /*-> mauxfd_ */
52
52
#include "gamm_comm.h"
53
+ /*-> gammfd_ */
53
54
#include "hess_comm.h"
55
+ /*-> Dims, filtfd_, hessfd_, w_fil, w_opt */
56
+
54
57
55
58
56
59
/* Table of constant values */
57
60
static int c__0 = 0 ;
58
61
static int c__1 = 1 ;
59
62
static int c__2 = 2 ;
60
- static int c__11 = 11 ;
61
63
62
64
static double c_0d = 0. ;
63
65
static double c_m1 = -1. ;
64
66
65
67
/*******************************************************************************
66
68
*******************************************************************************/
67
69
68
- void fdhpq (/*double *x, */ double * h__ , int * lh , double * w )
70
+ /* Called from R: Analytic Hessian with respect to p and q variables : */
71
+ void fdhpq (double * h , int * lh , double * w )
69
72
{
70
73
/* double precision H(lH, pq1)
71
- */
72
74
73
- /* copyright 1991 Department of Statistics, University of Washington
75
+ copyright 1991 Department of Statistics, University of Washington
74
76
written by Chris Fraley
75
77
-----------------------------------------------------------------------------
76
78
Parameter adjustments */
77
79
-- w ;
78
80
79
- /* Function Body */
80
81
hesspq_ (& w [w_opt .lqp ], & w [w_opt .la ], & w [w_opt .lajac ], & Dims .nm ,
81
- h__ , lh , & w [w_opt .lwa4 ], & w [w_opt .lwa1 ]);
82
+ h , lh , & w [w_opt .lwa4 ], & w [w_opt .lwa1 ]);
82
83
/* call dcopy( pq1, zero, 0, H(1,1), lH) */
83
84
/* call dcopy( pq , zero, 0, H(2,1), 1) */
84
85
return ;
85
86
} /* fdhpq */
86
87
87
88
/*******************************************************************************
88
- ****************************************************************************** */
89
+ *******************************************************************************/
89
90
90
91
void fdcov (double * x , double * d__ , double * hh ,
91
92
double * hd , double * cov , int * lcov , double * cor ,
92
93
int * lcor , double * se , double * w , int * info )
93
94
{
94
- /* System generated locals */
95
- int cov_dim1 , cov_offset , cor_dim1 , cor_offset , pq1 , i2 ;
96
- double d__1 ;
97
-
98
- /* Local variables */
99
- int i , j , k , le , ls , lu , lv , lwork ;
100
- double temp ;
95
+ /* float x(n)
96
+ double precision d, hh, hd(pq1), cov(lcov,pq1), cor(lcor,pq1),
97
+ se(pq1), w(*)
101
98
102
- /* float x(n)
103
- double precision d, hh, hd(pq1), cov(lcov,pq1),
104
- * cor(lcor,pq1), se(pq1)
105
99
copyright 1991 Department of Statistics, University of Washington
106
100
written by Chris Fraley
107
101
----------------------------------------------------------------------------*/
108
102
103
+ const int c__11 = 11 ;
104
+ int i , j , k , le , ls , lu , lv , lwork , pq1 = Dims .pq1 ;
105
+ double temp ;
106
+
109
107
/* Parameter adjustments */
108
+ int cov_dim1 , cov_offset , cor_dim1 , cor_offset ;
110
109
cov_dim1 = * lcov ; cov_offset = 1 + cov_dim1 ; cov -= cov_offset ;
111
110
cor_dim1 = * lcor ; cor_offset = 1 + cor_dim1 ; cor -= cor_offset ;
112
111
-- se ;
113
112
-- w ;
114
113
115
- /* Function Body */
116
- pq1 = Dims .pq1 ;
117
-
118
114
hesdpq (x , * d__ , hh , hd , & w [1 ]);
115
+ /* ====== ^^ */
119
116
F77_CALL (dcopy )(& pq1 , hd , & c__1 , & cov [cov_offset ], lcov );
120
117
121
118
gammfd_ .igamma = 0 ;
122
119
gammfd_ .jgamma = 0 ;
123
- hessfd_ .ksvd = 0 ;
120
+ /* hessfd_.ksvd = 0; */
124
121
hessfd_ .kcov = 0 ;
125
122
hessfd_ .kcor = 0 ;
126
123
* info = 0 ;
127
- temp = 1. ;
128
124
129
125
for (i = 1 ; i <= pq1 ; ++ i ) {
130
126
for (j = i + 1 ; j <= pq1 ; ++ j ) {
@@ -136,17 +132,19 @@ void fdcov(double *x, double *d__, double *hh,
136
132
lv = lu + pq1 * pq1 ;
137
133
le = lv + pq1 * pq1 ;
138
134
lwork = le + pq1 ;
139
- /* lfree = lwork + pq1 */
135
+ /* lfree = lwork + pq1 */
136
+
137
+ /*Linpack: dsvdc(x, ldx, n,p, s, e,u,ldu, v,ldv, work, job,info) */
140
138
F77_CALL (dsvdc )(& cov [cov_offset ], lcov , & pq1 , & pq1 , & w [ls ],
141
139
& w [le ], & w [lu ], & pq1 , & w [lv ], & pq1 , & w [lwork ],
142
- & c__11 , info );
140
+ ( int * ) & c__11 , info );
143
141
if (* info != 0 ) {
144
142
F77_CALL (dcopy )(& pq1 , & c_0d , & c__0 , & se [1 ], & c__1 );
145
143
for (j = 1 ; j <= pq1 ; ++ j ) {
146
144
F77_CALL (dcopy )(& pq1 , & c_0d , & c__0 ,
147
- & cov [j * cov_dim1 + 1 ], & c__1 );
145
+ & cov [j * cov_dim1 + 1 ], & c__1 );
148
146
}
149
- hessfd_ .ksvd = 1 ;
147
+ /* hessfd_.ksvd = 1; */
150
148
* info = 3 ;
151
149
return ;
152
150
}
@@ -166,12 +164,13 @@ void fdcov(double *x, double *d__, double *hh,
166
164
}
167
165
}
168
166
if (temp == 1. ) {
167
+ double d__1 ;
169
168
for (k = 1 ; k <= pq1 ; ++ k ) {
170
169
F77_CALL (dcopy )(& k , & cov [k * cov_dim1 + 1 ], & c__1 ,
171
170
& cor [k * cor_dim1 + 1 ], & c__1 );
172
171
}
173
172
for (i = 1 ; i <= pq1 ; ++ i ) {
174
- i2 = pq1 - i + 1 ;
173
+ int i2 = pq1 - i + 1 ;
175
174
d__1 = 1. / se [i ];
176
175
F77_CALL (dscal )(& i2 , & d__1 , & cor [i + i * cor_dim1 ], lcor );
177
176
}
@@ -192,7 +191,7 @@ void fdcov(double *x, double *d__, double *hh,
192
191
193
192
if (gammfd_ .igamma != 0 ) * info = 4 ;
194
193
if (gammfd_ .jgamma != 0 ) * info = 1 ;
195
- if (hessfd_ .ksvd != 0 ) * info = 3 ;
194
+ /* if (hessfd_.ksvd != 0) *info = 3; */
196
195
if (hessfd_ .kcov != 0 ) * info = 2 ;
197
196
if (hessfd_ .kcor != 0 ) * info = 3 ;
198
197
return ;
@@ -204,7 +203,8 @@ void fdcov(double *x, double *d__, double *hh,
204
203
invsvd_ (double * s , double * u , int * lu ,
205
204
double * v , int * lv , double * cov , int * lcov )
206
205
{
207
- /* double precision s(pq1), u(lu,pq1), v(lv,pq1), cov(lcov,pq1)
206
+ /* double precision s(pq1), u(lu,pq1), v(lv,pq1), cov(lcov,pq1)
207
+
208
208
copyright 1991 Department of Statistics, University of Washington
209
209
written by Chris Fraley
210
210
---------------------------------------------------------------------------*/
@@ -271,78 +271,67 @@ invsvd_(double *s, double *u, int *lu,
271
271
******************************************************************************
272
272
*****************************************************************************/
273
273
274
- void hesspq_ (double * qp , double * a , double * ajac ,
275
- int * lajac , double * h__ , int * lh , double * aij , double * g )
274
+ /* analytic Hessian with respect to p and q variables */
275
+ void hesspq_ (double * qp , double * a , double * ajac , int * lajac ,
276
+ /* output: h[.,.], aij[.], g[.] : */
277
+ double * h__ , int * lh , double * aij , double * g )
276
278
{
277
279
/* double precision qp(pq), a(nm), ajac(nm,pq)
278
280
double precision H(lH,pq1), aij(nm), g(pq)
279
281
280
- analytic Hessian with respect to p and q variables
281
282
copyright 1991 Department of Statistics, University of Washington
282
283
written by Chris Fraley
283
284
----------------------------------------------------------------------------*/
284
285
285
- /* System generated locals */
286
- int ajac_dim1 = * lajac , ajac_offset ;
287
- int h_dim1 = * lh ;
288
- int i1 , i2 , i3 ;
289
-
290
- /* Local variables */
291
286
int i , j , k , l , km ;
292
287
double s , t , u , fac ;
288
+ int n = Dims .n , p = Dims .p , q = Dims .q ;
293
289
294
290
/* Parameter adjustments */
291
+ int ajac_dim1 = * lajac , ajac_offset ;
292
+ int h_dim1 = * lh ;
295
293
-- qp ;
296
294
ajac_offset = 1 + ajac_dim1 ; ajac -= ajac_offset ;
297
295
-- aij ;
298
296
-- g ;
299
297
300
298
fac = 1. / (filtfd_ .wnv * (double ) (Dims .nm - 1 ));
301
- if (Dims . q != 0 && Dims . p != 0 ) {
299
+ if (q != 0 && p != 0 ) {
302
300
for (k = 1 ; k <= Dims .pq ; ++ k ) {
303
301
g [k ] = F77_CALL (ddot )(& Dims .nm , a , & c__1 ,
304
302
& ajac [k * ajac_dim1 + 1 ], & c__1 );
305
303
}
306
- i1 = Dims .p ;
307
- i2 = Dims .q ;
308
- i3 = Dims .n ;
309
- for (i = 1 ; i <= i1 ; ++ i ) {
310
- int i_aj = (Dims .q + i )* ajac_dim1 ;
311
- u = g [Dims .q + i ];
312
- for (j = 1 ; j <= i2 ; ++ j ) {
304
+ for (i = 1 ; i <= p ; ++ i ) {
305
+ int i_aj = (q + i )* ajac_dim1 ;
306
+ u = g [q + i ];
307
+ for (j = 1 ; j <= q ; ++ j ) {
313
308
u *= g [j ];
314
- for (k = Dims .maxpq1 ; k <= i3 ; ++ k ) {
309
+ for (k = Dims .maxpq1 ; k <= n ; ++ k ) {
315
310
km = k - Dims .maxpq ;
316
311
t = 0. ;
317
- for (l = 1 ; l < km && l <= i2 ; ++ l )
312
+ for (l = 1 ; l < km && l <= q ; ++ l )
318
313
t += qp [l ] * aij [km - l ];
319
314
320
- if (km > j )
321
- aij [km ] = ajac [km - j + i_aj ] + t ;
322
- else
323
- aij [km ] = t ;
315
+ aij [km ] = (km > j ) ? ajac [km - j + i_aj ] + t : t ;
324
316
}
325
317
s = F77_CALL (ddot )(& Dims .nm , & ajac [i_aj + 1 ], & c__1 ,
326
318
& ajac [j * ajac_dim1 + 1 ], & c__1 );
327
319
t = F77_CALL (ddot )(& Dims .nm , a , & c__1 , & aij [1 ], & c__1 );
328
- h__ [i + (Dims .p + j ) * h_dim1 ] =
329
- - Dims .n * (s + t - 2 * fac * u ) * fac ;
320
+ h__ [i + (p + j ) * h_dim1 ] = - n * (s + t - 2 * fac * u ) * fac ;
330
321
}
331
322
}
332
323
}
333
- if (Dims .q != 0 ) {
334
- i1 = Dims .q ;
335
- i3 = Dims .n ;
336
- for (i = 1 ; i <= i1 ; ++ i ) {
324
+ if (q != 0 ) {
325
+ for (i = 1 ; i <= q ; ++ i ) {
337
326
int i_aj = i * ajac_dim1 ;
338
327
u = g [i ];
339
- for (j = i ; j <= i1 ; ++ j ) {
328
+ for (j = i ; j <= q ; ++ j ) {
340
329
int j_aj = j * ajac_dim1 ;
341
330
u *= g [j ];
342
- for (k = Dims .maxpq1 ; k <= i3 ; ++ k ) {
331
+ for (k = Dims .maxpq1 ; k <= n ; ++ k ) {
343
332
km = k - Dims .maxpq ;
344
333
t = 0. ;
345
- for (l = 1 ; l < km && l <= i1 ; ++ l )
334
+ for (l = 1 ; l < km && l <= q ; ++ l )
346
335
t += qp [l ] * aij [km - l ];
347
336
348
337
s = 0. ;
@@ -354,17 +343,16 @@ void hesspq_(double *qp, double *a, double *ajac,
354
343
s = F77_CALL (ddot )(& Dims .nm , & ajac [i_aj + 1 ], & c__1 ,
355
344
& ajac [j_aj + 1 ], & c__1 );
356
345
t = F77_CALL (ddot )(& Dims .nm , a , & c__1 , & aij [1 ], & c__1 );
357
- h__ [Dims . p + i + (Dims . p + j ) * h_dim1 ] =
358
- - Dims . n * (s + t - 2 * fac * u ) * fac ;
346
+ h__ [p + i + (p + j ) * h_dim1 ] =
347
+ - n * (s + t - 2 * fac * u ) * fac ;
359
348
}
360
349
}
361
350
}
362
- if (Dims .p != 0 ) {
363
- i1 = Dims .p ;
364
- for (i = 1 ; i <= i1 ; ++ i ) {
365
- u = g [Dims .q + i ];
366
- for (j = i ; j <= i1 ; ++ j ) {
367
- u = g [Dims .q + j ] * u ;
351
+ if (p != 0 ) {
352
+ for (i = 1 ; i <= p ; ++ i ) {
353
+ u = g [q + i ];
354
+ for (j = i ; j <= p ; ++ j ) {
355
+ u = g [q + j ] * u ;
368
356
/* do k = maxpq1, n */
369
357
/* km = k - maxpq */
370
358
/* t = zero */
@@ -379,12 +367,12 @@ void hesspq_(double *qp, double *a, double *ajac,
379
367
/* end do */
380
368
381
369
/* t = ddot( nm, a , 1, aij , 1) */
382
- s = F77_CALL (ddot )(& Dims .nm , & ajac [( Dims . q + i ) * ajac_dim1 + 1 ],
383
- & c__1 , & ajac [(Dims . q + j ) * ajac_dim1 + 1 ],
384
- & c__1 );
370
+ s = F77_CALL (ddot )(& Dims .nm ,
371
+ & ajac [(q + i ) * ajac_dim1 + 1 ], & c__1 ,
372
+ & ajac [( q + j ) * ajac_dim1 + 1 ], & c__1 );
385
373
386
374
/* H(i+1,j+1) = -dble(n)*((s + t) - two*fac*u)*fac */
387
- h__ [i + (j ) * h_dim1 ] = - Dims . n * (s - 2 * fac * u ) * fac ;
375
+ h__ [i + (j ) * h_dim1 ] = - n * (s - 2 * fac * u ) * fac ;
388
376
}
389
377
}
390
378
}
@@ -404,10 +392,7 @@ hesdpq(double *x, double d_, double *hh, double *hd, double *w)
404
392
written by Chris Fraley
405
393
---------------------------------------------------------------------------*/
406
394
407
- /* System generated locals */
408
- double d__1 ;
409
- /* Local variables */
410
- double fa , fb , slogvk ;
395
+ double fa , fb , slogvk , d__1 ;
411
396
412
397
/* Parameter adjustments */
413
398
-- w ;
0 commit comments