1 #include <../../nrnconf.h>
39 static char rcsid[] =
"mfunc.c,v 1.1 1997/12/04 17:55:41 hines Exp";
49 int it_cnt,
k, max_bit;
56 #define Z(k) (((k) & 1) ? tmp : out)
72 for ( max_bit = 0; ; max_bit++ )
73 if ( (
p >> (max_bit+1)) == 0 )
77 for (
k = 0;
k < max_bit;
k++ )
79 m_mlt(
Z(it_cnt),
Z(it_cnt),
Z(it_cnt+1));
81 if (
p & (1 << (max_bit-1)) )
103 static MAT *wkspace, *tmp;
117 return _m_pow(tmp, -
p, wkspace, out);
143 int j,
k, l,
q, r, s, j2max,
t;
144 double inf_norm, eqq, power2,
c,
sign;
168 if (inf_norm <= 0.0) {
176 j2max =
max(0, j2max);
180 for (
k = 1;
k <= j2max;
k++ )
188 for (
q = 1; eqq > eps;
q++ )
189 eqq /= 16.0*(2.0*
q+1.0)*(2.0*
q+3.0);
195 for (
k = 1;
k <=
q;
k++ )
196 c1->
ve[
k] = c1->
ve[
k-1]*(
q-
k+1)/((2*
q-
k+1)*(
double)
k);
216 for(
j = 0;
j <
A->n;
j++ )
222 for (
k = 0;
k < s-1;
k++ )
232 for ( l = 0; l <=
q-
t; l++ )
235 sign = ((
t+l) & 1) ? -1.0 : 1.0;
240 for (
k=1;
k <= r;
k++)
245 for (l=0; l < s; l++)
248 sign = ((
t+l) & 1) ? -1.0 : 1.0;
264 for (
k=0;
k <
A->n;
k++)
276 #define Z(k) ((k) & 1 ? Apow : out)
278 for(
k = 1;
k <= j2max;
k++)
303 return _m_exp(
A,eps,out,&q_out,&j_out);
318 int j,
k, l,
q, r, s,
t;
336 for (
j=0;
j < out->n;
j++)
337 out->me[
j][
j] = a->
ve[0];
342 for (
j=0;
j < out->n;
j++)
343 out->me[
j][
j] += a->
ve[0];
361 #define Z(k) ((k) & 1 ? tmp : &y0)
362 #define ZZ(k) ((k) & 1 ? tmp->ve : y0.ve)
364 for(
j = 0;
j <
A->n;
j++)
371 for (
k = 0;
k < s-1;
k++)
381 for ( l = 0; l <=
q-
t; l++ )
384 for (
k=1;
k <= r;
k++)
388 for (l=0; l < s; l++)
#define error(err_num, fn_name)
#define tracecatch(ok_part, function)
static Object ** v_resize(void *v)
MAT * LUfactor(MAT *A, PERM *pivot)
VEC * LUTsolve(MAT *LU, PERM *pivot, VEC *b, VEC *x)
void __mltadd__(Real *dp1, Real *dp2, double s, int len)
MAT * sm_mlt(double scalar, MAT *matrix, MAT *out)
VEC * mv_mlt(MAT *A, VEC *b, VEC *out)
MAT * m_transp(MAT *in, MAT *out)
MAT * m_mlt(MAT *A, MAT *B, MAT *OUT)
static Object ** m_zero(void *v)
static Object ** m_ident(void *v)
static Object ** m_resize(void *v)
static Object ** m_inverse(void *v)
PERM * px_resize(PERM *, int)
double m_norm_inf(MAT *A)
#define MEM_STAT_REG(var, type)
MAT * _m_pow(MAT *A, int p, MAT *tmp, MAT *out)
MAT * m_pow(MAT *A, int p, MAT *out)
MAT * m_exp(MAT *A, double eps, MAT *out)
MAT * m_poly(MAT *A, VEC *a, MAT *out)
MAT * _m_exp(MAT *A, double eps, MAT *out, int *q_out, int *j_out)
static philox4x32_key_t k