rgsl/
multifit.rs

1//
2// A rust binding for the GSL library by Guillaume Gomez (guillaume1.gomez@gmail.com)
3//
4
5use crate::{MatrixF64, Value, VectorF64};
6use ffi::FFI;
7
8/// Compute the covariance matrix cov = inv (J^T J) by QRP^T decomposition of J
9#[doc(alias = "gsl_multifit_covar")]
10pub fn covar(J: &MatrixF64, epsrel: f64, covar: &mut MatrixF64) -> Result<(), Value> {
11    let ret = unsafe { sys::gsl_multifit_covar(J.unwrap_shared(), epsrel, covar.unwrap_unique()) };
12    result_handler!(ret, ())
13}
14
15#[doc(alias = "gsl_multifit_test_delta")]
16pub fn test_delta(dx: &VectorF64, x: &VectorF64, epsabs: f64, epsrel: f64) -> Result<(), Value> {
17    let ret = unsafe {
18        sys::gsl_multifit_test_delta(dx.unwrap_shared(), x.unwrap_shared(), epsabs, epsrel)
19    };
20    result_handler!(ret, ())
21}
22
23#[doc(alias = "gsl_multifit_gradient")]
24pub fn gradient(J: &MatrixF64, f: &VectorF64, g: &mut VectorF64) -> Result<(), Value> {
25    let ret = unsafe {
26        sys::gsl_multifit_gradient(J.unwrap_shared(), f.unwrap_shared(), g.unwrap_unique())
27    };
28    result_handler!(ret, ())
29}
30
31#[doc(alias = "gsl_multifit_linear_lreg")]
32pub fn linear_lreg(smin: f64, smax: f64, reg_param: &mut VectorF64) -> Result<(), Value> {
33    let ret = unsafe { sys::gsl_multifit_linear_lreg(smin, smax, reg_param.unwrap_unique()) };
34    result_handler!(ret, ())
35}
36
37/// Returns `idx`.
38#[doc(alias = "gsl_multifit_linear_lcorner")]
39pub fn linear_lcorner(rho: &VectorF64, eta: &VectorF64) -> Result<usize, Value> {
40    let mut idx = 0;
41    let ret = unsafe {
42        sys::gsl_multifit_linear_lcorner(rho.unwrap_shared(), eta.unwrap_shared(), &mut idx)
43    };
44    result_handler!(ret, idx)
45}
46
47/// Returns `(Value, idx)`.
48#[doc(alias = "gsl_multifit_linear_lcorner2")]
49pub fn linear_lcorner2(rho: &VectorF64, eta: &VectorF64) -> Result<usize, Value> {
50    let mut idx = 0;
51    let ret = unsafe {
52        sys::gsl_multifit_linear_lcorner2(rho.unwrap_shared(), eta.unwrap_shared(), &mut idx)
53    };
54    result_handler!(ret, idx)
55}
56
57#[doc(alias = "gsl_multifit_linear_Lk")]
58pub fn linear_Lk(p: usize, k: usize, L: &mut MatrixF64) -> Result<(), Value> {
59    let ret = unsafe { sys::gsl_multifit_linear_Lk(p, k, L.unwrap_unique()) };
60    result_handler!(ret, ())
61}