GRASS 8 Programmer's Manual
8.6.0dev(2026)-1d1e47ad9d
Loading...
Searching...
No Matches
durbins.c
Go to the documentation of this file.
1
#include <
stdio.h
>
2
#include <
stdlib.h
>
3
#include <math.h>
4
#include "local_proto.h"
5
6
/* could probably use some cleanup/optimization */
7
double
*
Cdhc_durbins_exact
(
double
*x,
int
n)
8
{
9
static
double
y[2];
10
double
*
xcopy
,
sumx
= 0.0,
sumx2
= 0.0,
s2
, *
b
, *c, *
g
, *z,
sqrt2
;
11
int
i,
j
;
12
13
if
((
b
= (
double
*)
malloc
(n *
sizeof
(
double
))) ==
NULL
) {
14
fprintf
(
stderr
,
"Memory error in Cdhc_durbins_exact\n"
);
15
exit
(
EXIT_FAILURE
);
16
}
17
if
((c = (
double
*)
malloc
((n + 1) *
sizeof
(
double
))) ==
NULL
) {
18
fprintf
(
stderr
,
"Memory error in Cdhc_durbins_exact\n"
);
19
exit
(
EXIT_FAILURE
);
20
}
21
if
((
g
= (
double
*)
malloc
((n + 1) *
sizeof
(
double
))) ==
NULL
) {
22
fprintf
(
stderr
,
"Memory error in Cdhc_durbins_exact\n"
);
23
exit
(
EXIT_FAILURE
);
24
}
25
if
((z = (
double
*)
malloc
(n *
sizeof
(
double
))) ==
NULL
) {
26
fprintf
(
stderr
,
"Memory error in Cdhc_durbins_exact\n"
);
27
exit
(
EXIT_FAILURE
);
28
}
29
if
((
xcopy
= (
double
*)
malloc
(n *
sizeof
(
double
))) ==
NULL
) {
30
fprintf
(
stderr
,
"Memory error in Cdhc_durbins_exact\n"
);
31
exit
(
EXIT_FAILURE
);
32
}
33
34
sqrt2
=
sqrt
((
double
)2.0);
35
for
(i = 0; i < n; ++i) {
36
xcopy
[i] =
x
[i];
37
sumx
+=
x
[i];
38
sumx2
+=
x
[i] *
x
[i];
39
}
40
41
s2
=
sqrt
((
sumx2
-
sumx
*
sumx
/ n) / (n - 1));
42
for
(i = 0; i < n; ++i) {
43
xcopy
[i] = (
xcopy
[i] -
sumx
/ n) /
s2
;
44
b
[i] = 0.5 +
Cdhc_normp
(
xcopy
[i] /
sqrt2
) / 2.0;
45
}
46
47
qsort
(
b
, n,
sizeof
(
double
),
Cdhc_dcmp
);
48
49
for
(i = 1; i < n; ++i)
50
c[i] =
b
[i] -
b
[i - 1];
51
52
c[0] =
b
[0];
53
c[n] = 1 -
b
[n - 1];
54
55
qsort
(c, n + 1,
sizeof
(
double
),
Cdhc_dcmp
);
56
57
for
(
j
= 1;
j
<= n; ++
j
)
58
g
[
j
] = (n + 1 -
j
) * (c[
j
] - c[
j
- 1]);
59
60
g
[0] = (n + 1) * c[0];
61
g
[n] = c[n] - c[n - 1];
62
63
for
(i = 0; i < n; ++i) {
64
z[i] = 0.0;
65
for
(
j
= 0;
j
<= i; ++
j
)
66
z[i] +=
g
[
j
];
67
68
z[i] = (i + 1.0) / n - z[i];
69
}
70
71
qsort
(z, n,
sizeof
(
double
),
Cdhc_dcmp
);
72
73
y[0] = z[n - 1];
74
y[1] =
sqrt
((
double
)n) * z[n - 1];
75
76
#ifdef NOISY
77
fprintf
(
stdout
,
" TEST7 DRB(N) =%10.4f\n"
, y[0]);
78
#endif
/* NOISY */
79
80
free
(
b
);
81
free
(c);
82
free
(
g
);
83
free
(
xcopy
);
84
free
(z);
85
86
return
y;
87
}
NULL
#define NULL
Definition
ccmath.h:32
AMI_STREAM
Definition
ami_stream.h:153
Cdhc_dcmp
int Cdhc_dcmp(const void *i, const void *j)
Definition
dcmp.c:1
Cdhc_normp
double Cdhc_normp(double)
Definition
normp.c:22
Cdhc_durbins_exact
double * Cdhc_durbins_exact(double *x, int n)
Definition
durbins.c:7
g
float g
Definition
named_colr.c:7
b
double b
Definition
r_raster.c:39
malloc
void * malloc(unsigned)
free
void free(void *)
stdio.h
stdlib.h
x
#define x
lib
cdhc
durbins.c
Generated on Fri Apr 3 2026 06:59:52 for GRASS 8 Programmer's Manual by
1.9.8