1 #include <../../nrnconf.h> 34 static char rcsid[] =
"matop.c,v 1.1 1997/12/04 17:55:35 hines Exp";
45 if ( mat1->m != mat2->m || mat1->n != mat2->n )
47 if ( out==(
MAT *)NULL || out->
m != mat1->m || out->n != mat1->n )
49 m = mat1->m; n = mat1->n;
52 __add__(mat1->me[i],mat2->me[i],out->me[i],(
int)n);
70 if ( mat1->m != mat2->m || mat1->n != mat2->n )
72 if ( out==(
MAT *)NULL || out->
m != mat1->m || out->n != mat1->n )
74 m = mat1->m; n = mat1->n;
77 __sub__(mat1->me[i],mat2->me[i],out->me[i],(
int)n);
100 m =
A->m; n =
A->n; p =
B->n;
101 A_v =
A->me; B_v =
B->me;
117 for ( i=0; i<m; i++ )
118 for ( k=0; k<
n; k++ )
120 if ( A_v[i][k] != 0.0 )
150 for ( i = 0; i <
A->m; i++ )
151 for ( j = 0; j <
B->m; j++ )
186 for ( k = 0; k <
A->m; k++ )
187 for ( i = 0; i <
A->n; i++ )
189 if (
A->me[k][i] != 0.0 )
215 if (
A->n != b->
dim )
219 if ( out == (
VEC *)NULL || out->
dim !=
A->m )
223 A_v =
A->me; b_v = b->
ve;
224 for ( i=0; i<m; i++ )
249 if ( out==(
MAT *)NULL || out->
m != matrix->
m || out->
n != matrix->
n )
251 m = matrix->
m; n = matrix->
n;
252 for ( i=0; i<m; i++ )
253 __smlt__(matrix->
me[i],(
double)scalar,out->
me[i],(
int)n);
272 if (
A->m != b->
dim )
276 if ( out == (
VEC *)NULL || out->
dim !=
A->n )
282 for ( j = 0; j < m; j++ )
283 if ( b->
ve[j] != 0.0 )
309 if ( in == out && in->n != in->m )
311 in_situ = ( in == out );
312 if ( out == (
MAT *)NULL || out->m != in->n || out->n != in->m )
316 for ( i = 0; i < in->m; i++ )
317 for ( j = 0; j < in->n; j++ )
318 out->me[j][i] = in->me[i][j];
320 for ( i = 1; i < in->m; i++ )
321 for ( j = 0; j <
i; j++ )
322 { tmp = in->me[
i][
j];
323 in->me[
i][
j] = in->me[
j][
i];
340 if (
i < 0 || j < 0 || i >=
A->m ||
j >=
A->m )
346 for ( k = lo; k <= hi; k++ )
349 A_me[
k][
i] = A_me[
k][
j];
365 if (
i < 0 || j < 0 || i >=
A->n ||
j >=
A->n )
371 for ( k = lo; k <= hi; k++ )
374 A_me[
i][
k] = A_me[
j][
k];
393 if ( A1->m != A2->m || A1->n != A2->n )
396 if ( out != A1 && out != A2 )
402 return m_add(A1,A2,out);
406 m = A1->m; n = A1->n;
407 for ( i = 0; i < m; i++ )
432 Real *v2_ve, *out_ve;
434 if ( ! v1 || ! v2 || ! A )
438 if ( v1->dim != A->
m || v2->dim != A->
n )
443 v2_ve = v2->ve; out_ve = out->
ve;
449 for ( i = 0; i < m; i++ )
475 if ( ! v1 || ! v2 || ! A )
479 if ( v1->dim != A->
n || A->
m != v2->dim )
484 out_ve = out->
ve; m = A->
m; n = A->
n;
485 for ( j = 0; j < m; j++ )
MAT * mmtr_mlt(MAT *A, MAT *B, MAT *OUT)
MAT * swap_rows(MAT *A, int i, int j, int lo, int hi)
double max(double a, double b)
static Object ** v_resize(void *v)
VEC * vm_mltadd(VEC *v1, VEC *v2, MAT *A, double alpha, VEC *out)
MAT * sm_mlt(double scalar, MAT *matrix, MAT *out)
static philox4x32_key_t k
MAT * ms_mltadd(MAT *A1, MAT *A2, double s, MAT *out)
int const size_t const size_t n
void __mltadd__(Real *dp1, Real *dp2, double s, int len)
MAT * m_add(MAT *mat1, MAT *mat2, MAT *out)
#define tracecatch(ok_part, function)
void __add__(Real *dp1, Real *dp2, Real *out, int len)
double __ip__(Real *dp1, Real *dp2, int len)
MAT * mtrm_mlt(MAT *A, MAT *B, MAT *OUT)
MAT * swap_cols(MAT *A, int i, int j, int lo, int hi)
static Object ** m_resize(void *v)
VEC * mv_mlt(MAT *A, VEC *b, VEC *out)
static Object ** m_zero(void *v)
MAT * m_mlt(MAT *A, MAT *B, MAT *OUT)
#define error(err_num, fn_name)
void __sub__(Real *dp1, Real *dp2, Real *out, int len)
void __smlt__(Real *dp, double s, Real *out, int len)
VEC * vm_mlt(MAT *A, VEC *b, VEC *out)
MAT * m_sub(MAT *mat1, MAT *mat2, MAT *out)
MAT * m_transp(MAT *in, MAT *out)
VEC * mv_mltadd(VEC *v1, VEC *v2, MAT *A, double alpha, VEC *out)