50 for(
int k = 0; k <
n; ++k)
54 for(
int i = k + 1;
i <
n; ++
i)
55 if(fabs(
A[k +
n *
i]) > fabs(
A[k +
n *
m]))
m =
i;
58 double t1 =
A[k +
n *
m];
59 A[k +
n *
m] =
A[k +
n * k];
63 for(
int i = k + 1;
i <
n; ++
i)
A[k +
n *
i] /= -t1;
66 for(
int i = k + 1;
i <
n; ++
i)
68 double t2 =
A[
i +
n *
m];
72 for(
int j = k + 1; j <
n; ++j)
73 for(
int i = k + 1;
i <
n; ++
i)
A[
i +
n * j] +=
A[k + j *
n] *
A[
i + k *
n];
86 for(
int k = 0; k <
n - 1; ++k)
92 for(
int i = k + 1;
i <
n; ++
i)
b[
i] +=
A[k +
n *
i] *
t;
95 for(
int k =
n - 1; k > 0; --k)
99 for(
int i = 0;
i < k; ++
i)
b[
i] -=
A[k +
n *
i] *
t;
101 b[0] /=
A[0 + 0 *
n];
106 int *
p = malloc(
n *
sizeof(*
p));
115 double *
const restrict A_square,
116 const size_t m,
const size_t n)
120 for(
size_t i = 0;
i <
n; ++
i)
121 for(
size_t j = 0; j <
n; ++j)
124 for(
size_t k = 0; k <
m; ++k)
125 sum +=
A[k *
n +
i] *
A[k *
n + j];
127 A_square[
i *
n + j] = sum;
135 double *
const restrict y,
136 double *
const restrict y_square,
137 const size_t m,
const size_t n)
140 for(
size_t i = 0;
i <
n; ++
i)
143 for(
size_t k = 0; k <
m; ++k)
144 sum +=
A[k *
n +
i] * y[k];
154 double *
const restrict y,
155 const size_t m,
const size_t n,
const int checks)
163 fprintf(stderr,
"pseudo solve: cannot cast %zu \303\227 %zu matrix\n",
m,
n);
170 if(y_square == NULL || A_square == NULL)
177 #pragma omp parallel sections
203 for(
size_t k = 0; k <
n; k++) y[k] = y_square[k];
static void error(char *msg)
Definition ashift_lsd.c:202
#define m
Definition basecurve.c:277
static const dt_aligned_pixel_simd_t const dt_adaptation_t const float p
Definition chromatic_adaptation.h:315
#define A(y, x)
Definition colorspaces.c:186
const float i
Definition colorspaces_inline_conversions.h:669
const float b
Definition colorspaces_inline_conversions.h:1326
const float n
Definition colorspaces_inline_conversions.h:929
#define dt_pixelpipe_cache_alloc_align_cache(size, id)
Definition darktable.h:357
#define dt_free(ptr)
Definition darktable.h:380
#define dt_pixelpipe_cache_free_align(mem)
Definition darktable.h:377
static int pseudo_solve_gaussian(double *const restrict A, double *const restrict y, const size_t m, const size_t n, const int checks)
Definition gaussian_elimination.h:153
static int transpose_dot_matrix(double *const restrict A, double *const restrict A_square, const size_t m, const size_t n)
Definition gaussian_elimination.h:114
static int gauss_make_triangular(double *A, int *p, int n)
Definition gaussian_elimination.h:47
static void gauss_solve_triangular(const double *A, const int *p, double *b, int n)
Definition gaussian_elimination.h:83
static int gauss_solve(double *A, double *b, int n)
Definition gaussian_elimination.h:104
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)
Definition gaussian_elimination.h:134
const int t
Definition iop_profile.h:227