sm
csm
laser_data_fisher.c
Go to the documentation of this file.
1
#include <math.h>
2
#include <
egsl/egsl_macros.h
>
3
4
#include "
csm_all.h
"
5
14
val
ld_fisher0
(
LDP
ld) {
15
val
fim =
zeros
(3,3);
16
int
i;
17
for
(i=0;i<ld->
nrays
;i++) {
18
double
alpha = ld->
true_alpha
[i];
19
if
(
is_nan
(alpha))
continue
;
20
21
double
theta = ld->
theta
[i];
22
double
beta = alpha-theta;
23
24
double
r = ld->
readings
[i];
25
double
c = cos(alpha);
26
double
s = sin(alpha);
27
28
double
z = 1 / cos(beta);
29
double
t = tan(beta);
30
31
double
fim_k[9] ={
32
c*c*z*z, c*s*z*z, c*z *t*r,
33
c*s*z*z, s*s*z*z, s*z *t*r,
34
c*z*t*r, s*z*t*r, t*r *t*r
35
};
36
37
egsl_push
();
38
val
k =
egsl_vFda
(3,3,fim_k);
39
add_to
(fim, k);
40
egsl_pop
();
41
}
42
return
fim;
43
}
laser_data::theta
double *restrict theta
Definition:
laser_data.h:21
laser_data::true_alpha
double *restrict true_alpha
Definition:
laser_data.h:34
laser_data::readings
double *restrict readings
Definition:
laser_data.h:24
laser_data::nrays
int nrays
Definition:
laser_data.h:17
add_to
#define add_to(v1, v2)
Definition:
egsl_macros.h:25
egsl_vFda
val egsl_vFda(size_t rows, size_t columns, const double *)
Definition:
egsl_conversions.c:3
egsl_push
void egsl_push()
Definition:
egsl.c:88
is_nan
int is_nan(double v)
Definition:
math_utils.c:60
csm_all.h
zeros
#define zeros(rows, cols)
Definition:
egsl_macros.h:19
ld_fisher0
val ld_fisher0(LDP ld)
Definition:
laser_data_fisher.c:14
egsl_macros.h
laser_data
Definition:
laser_data.h:16
egsl_pop
void egsl_pop()
Definition:
egsl.c:89
egsl_val
Definition:
egsl.h:12
csm
Author(s): Andrea Censi
autogenerated on Wed Aug 17 2022 02:50:33