rgsl/
multilinear.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#[doc(alias = "gsl_multifit_linear_applyW")]
9pub fn applyW(
10    x: &MatrixF64,
11    w: &VectorF64,
12    y: &VectorF64,
13    wx: &mut MatrixF64,
14    wy: &mut VectorF64,
15) -> Result<(), Value> {
16    unsafe {
17        let ret = sys::gsl_multifit_linear_applyW(
18            x.unwrap_shared(),
19            w.unwrap_shared(),
20            y.unwrap_shared(),
21            wx.unwrap_unique(),
22            wy.unwrap_unique(),
23        );
24        result_handler!(ret, ())
25    }
26}
27
28#[doc(alias = "gsl_multifit_linear_L_decomp")]
29pub fn L_decomp(l: &mut MatrixF64, tau: &mut VectorF64) -> Result<(), Value> {
30    unsafe {
31        let ret = sys::gsl_multifit_linear_L_decomp(l.unwrap_unique(), tau.unwrap_unique());
32        result_handler!(ret, ())
33    }
34}
35
36#[doc(alias = "gsl_multifit_linear_lreg")]
37pub fn lreg(smin: f64, smax: f64, reg_param: &mut VectorF64) -> Result<(), Value> {
38    unsafe {
39        let ret = sys::gsl_multifit_linear_lreg(smin, smax, reg_param.unwrap_unique());
40        result_handler!(ret, ())
41    }
42}
43
44/// Returns `idx`.
45#[doc(alias = "gsl_multifit_linear_lcorner")]
46pub fn lcorner(rho: &VectorF64, eta: &VectorF64) -> Result<usize, Value> {
47    let mut idx = 0;
48    let ret = unsafe {
49        sys::gsl_multifit_linear_lcorner(rho.unwrap_shared(), eta.unwrap_shared(), &mut idx)
50    };
51    result_handler!(ret, idx)
52}
53
54/// Returns `idx`.
55#[doc(alias = "gsl_multifit_linear_lcorner2")]
56pub fn lcorner2(reg_param: &VectorF64, eta: &VectorF64) -> Result<usize, Value> {
57    let mut idx = 0;
58    let ret = unsafe {
59        sys::gsl_multifit_linear_lcorner2(reg_param.unwrap_shared(), eta.unwrap_shared(), &mut idx)
60    };
61    result_handler!(ret, idx)
62}
63
64#[doc(alias = "gsl_multifit_linear_Lk")]
65pub fn Lk(p: usize, k: usize, l: &mut MatrixF64) -> Result<(), Value> {
66    let ret = unsafe { sys::gsl_multifit_linear_Lk(p, k, l.unwrap_unique()) };
67    result_handler!(ret, ())
68}
69
70/// Returns `(y, y_err)`.
71#[doc(alias = "gsl_multifit_linear_est")]
72pub fn linear_est(x: &VectorF64, c: &VectorF64, cov: &MatrixF64) -> Result<(f64, f64), Value> {
73    let mut y = 0.;
74    let mut y_err = 0.;
75    let ret = unsafe {
76        sys::gsl_multifit_linear_est(
77            x.unwrap_shared(),
78            c.unwrap_shared(),
79            cov.unwrap_shared(),
80            &mut y,
81            &mut y_err,
82        )
83    };
84    result_handler!(ret, (y, y_err))
85}
86
87#[doc(alias = "gsl_multifit_linear_residuals")]
88pub fn linear_residuals(
89    x: &MatrixF64,
90    y: &VectorF64,
91    c: &VectorF64,
92    r: &mut VectorF64,
93) -> Result<(), Value> {
94    let ret = unsafe {
95        sys::gsl_multifit_linear_residuals(
96            x.unwrap_shared(),
97            y.unwrap_shared(),
98            c.unwrap_shared(),
99            r.unwrap_unique(),
100        )
101    };
102    result_handler!(ret, ())
103}