37#ifndef DT_MATH_GAUSSIAN_ELIMINATION_H
38#define DT_MATH_GAUSSIAN_ELIMINATION_H
52 for(
int k = 0;
k <
n; ++
k)
56 for(
int i =
k + 1;
i <
n; ++
i)
68 for(
int i =
k + 1;
i <
n; ++
i)
74 for(
int j =
k + 1;
j <
n; ++
j)
88 for(
int k = 0;
k <
n - 1; ++
k)
94 for(
int i =
k + 1;
i <
n; ++
i) b[
i] +=
A[
k +
n *
i] *
t;
97 for(
int k =
n - 1;
k > 0; --
k)
101 for(
int i = 0;
i <
k; ++
i) b[
i] -=
A[
k +
n *
i] *
t;
103 b[0] /=
A[0 + 0 *
n];
118 const size_t m,
const size_t n)
122 for(
size_t i = 0;
i <
n; ++
i)
123 for(
size_t j = 0;
j <
n; ++
j)
126 for(
size_t k = 0;
k <
m; ++
k)
139 const size_t m,
const size_t n)
142 for(
size_t i = 0;
i <
n; ++
i)
145 for(
size_t k = 0;
k <
m; ++
k)
157 const size_t m,
const size_t n,
const int checks)
179 #pragma omp parallel sections
static void error(char *msg)
static int pseudo_solve_gaussian(double *const restrict A, double *const restrict y, const size_t m, const size_t n, const int checks)
static int transpose_dot_matrix(double *const restrict A, double *const restrict A_square, const size_t m, const size_t n)
static int gauss_make_triangular(double *A, int *p, int n)
static void gauss_solve_triangular(const double *A, const int *p, double *b, int n)
static int gauss_solve(double *A, double *b, int n)
static int transpose_dot_vector(double *const restrict A, double *const restrict y, double *const restrict y_square, const size_t m, const size_t n)
float *const restrict const size_t k
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
#define dt_free(ptr)
g_free() ptr and set it to NULL, skipping both if it is already NULL.
#define dt_pixelpipe_cache_alloc_align_cache(size, id)
#define dt_pixelpipe_cache_free_align(mem)