28 #ifndef CORE__NUMERICAL_HH 29 #define CORE__NUMERICAL_HH 42 void nrerror(
const char error_text[]);
50 void ksone(
double data[],
int n,
double(*func)(
double),
double *
d,
double * prob);
51 double probks(
double alam);
54 void four1(
double data[],
int nn,
int isign);
55 void realft(
double data[],
int n,
int isign);
56 void fourn(
double data[],
int nn[],
int ndim,
int isign);
59 void indexx(
int n,
double arrin[],
int indx[]);
78 double gammp(
double a,
double x);
79 double betacf(
double a,
double b,
double x);
80 double betai(
double a,
double b,
double x);
91 inline size_t fact(
int num)
94 if (num !=1 && num != 0)
96 for (
int i = num;
i > 0; --
i)
106 for (
int i = n;
i > (n-
k); --
i)
108 return factor/
fact(k);
112 void svdcmp(
double *
a,
int m,
int n,
double *
w,
double *v);
113 void svbksb(
double *
u,
double *w,
double *v,
int m,
int n,
double *
b,
double *
x);
116 void convlv(
double *data,
int n,
double *respns,
int m,
int isign,
double *ans);
117 void realft(
double *data,
int n,
int isign);
118 void twofft(
double *data1,
double *data2,
double *fft1,
double *fft2,
int n);
119 void four1(
double *data,
int nn,
int isign);
122 void powell(
double *p,
double *
xi,
int n,
double ftol,
int &
iter,
123 double &fret,
double(*func)(
double *,
void *),
void *
prm,
130 int nnls(
double *a,
int m,
int n,
double *b,
double *x,
131 double *rnorm,
double *w,
double *zz,
int *
index);
132 int nnlsWght(
int N,
int M,
double *A,
double *b,
double *weight);
142 void grobfd(
int,
int,
double *,
double *,
void(*)(
int,
int,
143 double *,
double *,
void *),
void *);
144 void grcnfd(
int,
int,
double *,
double *,
void(*)(
int,
int,
145 double *,
double *,
void *),
void *);
148 void cfsqp(
int,
int,
int,
int,
int,
int,
int,
int,
int,
int *,
int,
int,
149 int,
int *,
double,
double,
double,
double,
double *,
150 double *,
double *,
double *,
double *,
double *,
151 void(*)(
int,
int,
double *,
double *,
void *),
152 void(*)(
int,
int,
double *,
double *,
void *),
153 void(*)(
int,
int,
double *,
double *,
154 void(*)(
int,
int,
double *,
double *,
void *),
void *),
155 void(*)(
int,
int,
double *,
double *,
156 void(*)(
int,
int,
double *,
double *,
void *),
void *),
160 void wtn(
double a[],
unsigned long nn[],
int ndim,
int isign,
161 void(*wtstep)(
double [],
unsigned long,
int));
163 void pwt(
double a[],
unsigned long n,
int isign);
167 #define TINY 1.0e-20; 173 T big, dum, sum, temp;
176 auto *
vv= buffer.data()-1;
178 for (i = 1;i <=
n;i++)
181 for (
j = 1;
j <=
n;
j++)
182 if ((temp = (T)fabs((
double)a[i*n+
j])) > big)
185 nrerror(
"Singular matrix in routine LUDCMP");
186 vv[
i] = (T)1.0 / big;
188 for (
j = 1;
j <=
n;
j++)
190 for (i = 1;i <
j;i++)
193 for (k = 1;k <
i;k++)
194 sum -= a[i*n+k] * a[k*n+j];
198 for (i = j;i <=
n;i++)
201 for (k = 1;k <
j;k++)
202 sum -= a[i*n+k] * a[k*n+j];
204 if ((dum =
vv[i] * (T)fabs((
double)sum)) >= big)
212 for (k = 1;k <=
n;k++)
215 a[imax*n+
k] = a[j*n+
k];
226 dum = (T)1.0 / (a[j*n+j]);
227 for (i = j + 1;i <=
n;i++)
237 void lubksb(T *a,
int n,
int *indx, T b[])
239 int i, ii = 0, ip,
j;
242 for (i = 1;i <=
n;i++)
248 for (j = ii;j <= i - 1;j++)
249 sum -= a[i*n+j] * b[j];
254 for (i = n;i >= 1;i--)
257 for (j = i + 1;j <=
n;j++)
258 sum -= a[i*n+j] * b[j];
259 b[
i] = sum / a[i*n+
i];
269 int i, icol=0, irow=0,
j,
k, l, ll;
273 std::vector<int>
buffer(3*n);
274 auto *indxc= buffer.data()-1;
275 auto *indxr= indxc +
n;
276 auto *ipiv= indxr +
n;
277 for (
j = 1;
j <=
n;
j++)
279 for (i = 1;i <=
n;i++)
282 for (
j = 1;
j <=
n;
j++)
284 for (k = 1;k <=
n;k++)
288 if (fabs((
double)a[
j*n+k]) >= (double) big)
295 else if (ipiv[k] > 1)
296 nrerror(
"GAUSSJ: Singular Matrix-1");
301 for (l = 1;l <=
n;l++)
302 SWAP(a[irow*n+l], a[icol*n+l], temp)
303 for (l = 1;l <=
m;l++)
304 SWAP(b[irow*n+l], b[icol*n+l], temp)
308 if (a[icol*n+icol] == 0.0)
309 nrerror(
"GAUSSJ: Singular Matrix-2");
310 pivinv = 1.0f / a[icol*n+icol];
311 a[icol*n+icol] = (T)1;
312 for (l = 1;l <=
n;l++)
313 a[icol*n+l] = (T)(pivinv * a[icol*n+l]);
314 for (l = 1;l <=
m;l++)
315 b[icol*n+l] = (T)(pivinv * b[icol*n+l]);
316 for (ll = 1;ll <=
n;ll++)
321 for (l = 1;l <=
n;l++)
322 a[ll*n+l] -= a[icol*n+l] * dum;
323 for (l = 1;l <=
m;l++)
324 b[ll*n+l] -= b[icol*n+l] * dum;
327 for (l = n;l >= 1;l--)
329 if (indxr[l] != indxc[l])
330 for (k = 1;k <=
n;k++)
331 SWAP(a[k*n+indxr[l]], a[k*n+indxc[l]], temp);
336 void choldc(
double *a,
int n,
double *p);
338 void cholsl(
double *a,
int n,
double *p,
double *b,
double *x);
340 void polint(
double *xa,
double *ya,
int n,
double x,
double &
y,
double &dy);
void svdcmp(double *a, int m, int n, double *w, double *v)
void realft(double data[], int n, int isign)
void nrerror(const char error_text[])
double bessi2_5(double x)
void cfsqp(int, int, int, int, int, int, int, int, int, int *, int, int, int, int *, double, double, double, double, double *, double *, double *, double *, double *, double *, void(*)(int, int, double *, double *, void *), void(*)(int, int, double *, double *, void *), void(*)(int, int, double *, double *, void(*)(int, int, double *, double *, void *), void *), void(*)(int, int, double *, double *, void(*)(int, int, double *, double *, void *), void *), void *)
void wtn(double a[], unsigned long nn[], int ndim, int isign, void(*wtstep)(double [], unsigned long, int))
void lubksb(T *a, int n, int *indx, T b[])
void twofft(double *data1, double *data2, double *fft1, double *fft2, int n)
void convlv(double *data, int n, double *respns, int m, int isign, double *ans)
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
void gaussj(T *a, int n, T *b, int m)
void ludcmp(T *a, int n, int *indx, T *d)
double tdev(double nu, int *idum)
void grobfd(int, int, double *, double *, void(*)(int, int, double *, double *, void *), void *)
void cholsl(double *a, int n, double *p, double *b, double *x)
double probks(double alam)
void indexx(int n, double arrin[], int indx[])
double bessi3_5(double x)
double bessj1_5(double x)
double bessj3_5(double x)
void svbksb(double *u, double *w, double *v, int m, int n, double *b, double *x)
void polint(double *xa, double *ya, int n, double x, double &y, double &dy)
double betai(double a, double b, double x)
double bessi1_5(double x)
double gammp(double a, double x)
int nnlsWght(int N, int M, double *A, double *b, double *weight)
void fourn(double data[], int nn[], int ndim, int isign)
double betacf(double a, double b, double x)
void four1(double data[], int nn, int isign)
void powell(double *p, double *xi, int n, double ftol, int &iter, double &fret, double(*func)(double *, void *), void *prm, bool show)
void ksone(double data[], int n, double(*func)(double), double *d, double *prob)
void pwt(double a[], unsigned long n, int isign)
double bessi0_5(double x)
void choldc(double *a, int n, double *p)
size_t binom(int n, int k)
void grcnfd(int, int, double *, double *, void(*)(int, int, double *, double *, void *), void *)
int nnls(double *a, int m, int n, double *b, double *x, double *rnorm, double *w, double *zz, int *index)