4 a_float
a_mf_gauss(a_float x
, a_float sigma
, a_float c
)
6 return a_float_exp(a_float_pow((x
- c
) / sigma
, 2) / -2);
9 a_float
a_mf_gauss2(a_float x
, a_float sigma1
, a_float c1
, a_float sigma2
, a_float c2
)
13 x
= a_mf_gauss(x
, sigma1
, c1
);
17 x
= a_mf_gauss(x
, sigma2
, c2
);
26 a_float
a_mf_gbell(a_float x
, a_float a
, a_float b
, a_float c
)
28 return 1 / (a_float_pow(a_float_abs((x
- c
) / a
), 2 * b
) + 1);
31 a_float
a_mf_sig(a_float x
, a_float a
, a_float c
)
33 return 1 / (a_float_exp((c
- x
) * a
) + 1);
36 a_float
a_mf_dsig(a_float x
, a_float a1
, a_float c1
, a_float a2
, a_float c2
)
38 return a_mf_sig(x
, a1
, c1
) - a_mf_sig(x
, a2
, c2
);
41 a_float
a_mf_psig(a_float x
, a_float a1
, a_float c1
, a_float a2
, a_float c2
)
43 return a_mf_sig(x
, a1
, c1
) * a_mf_sig(x
, a2
, c2
);
46 a_float
a_mf_trap(a_float x
, a_float a
, a_float b
, a_float c
, a_float d
)
50 if (x
> a
) // a < x <= b
52 x
= (x
- a
) / (b
- a
);
61 if (x
< d
) // c <= x < d
63 x
= (d
- x
) / (d
- c
);
77 a_float
a_mf_tri(a_float x
, a_float a
, a_float b
, a_float c
)
81 if (x
> a
) // a < x <= b
83 x
= (x
- a
) / (b
- a
);
92 if (x
< c
) // b <= x < c
94 x
= (c
- x
) / (c
- b
);
104 a_float
a_mf_lins(a_float x
, a_float a
, a_float b
)
116 x
= (x
- a
) / (b
- a
);
121 a_float
a_mf_linz(a_float x
, a_float a
, a_float b
)
133 x
= (b
- x
) / (b
- a
);
138 a_float
a_mf_s(a_float x
, a_float a
, a_float b
)
144 x
= 1 - 2 * a_float_pow((b
- x
) / (b
- a
), 2);
155 x
= 2 * a_float_pow((x
- a
) / (b
- a
), 2);
165 a_float
a_mf_z(a_float x
, a_float a
, a_float b
)
171 x
= 1 - 2 * a_float_pow((x
- a
) / (b
- a
), 2);
182 x
= 2 * a_float_pow((b
- x
) / (b
- a
), 2);
192 a_float
a_mf_pi(a_float x
, a_float a
, a_float b
, a_float c
, a_float d
)
209 a_float
a_mf(unsigned int e
, a_float x
, a_float
const *a
)
214 return a_mf_pi(x
, a
[0], a
[1], a
[2], a
[3]);
216 return a_mf_z(x
, a
[0], a
[1]);
218 return a_mf_s(x
, a
[0], a
[1]);
220 return a_mf_linz(x
, a
[0], a
[1]);
222 return a_mf_lins(x
, a
[0], a
[1]);
224 return a_mf_tri(x
, a
[0], a
[1], a
[2]);
226 return a_mf_trap(x
, a
[0], a
[1], a
[2], a
[3]);
228 return a_mf_psig(x
, a
[0], a
[1], a
[2], a
[3]);
230 return a_mf_dsig(x
, a
[0], a
[1], a
[2], a
[3]);
232 return a_mf_sig(x
, a
[0], a
[1]);
234 return a_mf_gbell(x
, a
[0], a
[1], a
[2]);
236 return a_mf_gauss2(x
, a
[0], a
[1], a
[2], a
[3]);
238 return a_mf_gauss(x
, a
[0], a
[1]);