1 #include <../../nrnconf.h> 11 #define EPS hoc_epsilon 21 extern void install_matrix_method(
const char*
name,
double (*)(...));
23 extern double* matrix_pelm(
void*,
int i,
int j);
24 extern int matrix_nrow(
void*);
25 extern int matrix_ncol(
void*);
26 extern int matrix_type(
void*);
27 extern MAT* matrix_full(
void*);
28 extern SPMAT* matrix_sparse(
void*);
34 sprintf(buf,
"index=%d max_index=%d\n", i, j);
41 hoc_execerror(
"wrong size for Matrix or Vector operation", 0);
47 if (!ob || ob->ctemplate != smat_->
u.
ctemplate) {
68 return (
double)m->nrow();
74 return (
double)m->ncol();
94 return m->getval(i, j);
102 return double(m->sprowlen(i));
110 jx = (
int)
chkarg(2, 0, m->sprowlen(i)-1);
111 x = m->spgetrowval(i, jx, &j);
120 int i,
j, nrow = m->nrow(), ncol = m->ncol();
121 const char* f1 =
" %-8.3g";
122 const char* f2 =
"\n";
129 for (i=0; i < nrow; ++
i) {
130 for (j=0; j < ncol; ++
j) {
131 Printf(f1, m->getval(i, j));
140 int i,
j, nrow = m->nrow(), ncol = m->ncol();
143 const char* f1 =
" %-8.3g";
144 const char* f2 =
"\n";
146 pr_size = ((
int)
chkarg(ia, 0, 1) == 1) ?
true :
false;
157 fprintf(f,
"%d %d\n", nrow, ncol);
159 for (i=0; i < nrow; ++
i) {
160 for (j=0; j < ncol; ++
j) {
161 fprintf(f, f1, m->getval(i, j));
175 int i,
j, nrow, ncol;
183 m->resize(nrow, ncol);
184 for (i=0; i < nrow; ++
i)
for (j=0; j < ncol; ++
j) {
193 return m->temp_objvar();
207 vout =
new Vect(m->nrow());
215 vin =
new Vect(*vin);
223 vout->resize(m->nrow());
236 return vout->temp_objvar();
248 out = Matrix::instance(n, m, Matrix::MFULL);
251 if (mat == out && mes) {
252 hoc_execerror(mes,
" matrix operation cannot be done in place");
269 return out->temp_objvar();
275 int i0, j0, m0, n0, i1, j1,
i;
290 m->bcopy(out, i0, j0, m0, n0, i1, j1);
291 return out->temp_objvar();
301 out = Matrix::instance(m->nrow(), in->ncol(), Matrix::MFULL);
303 if (in == out || m == out) {
304 hoc_execerror(
"matrix multiplication cannot be done in place", 0);
306 out->resize(m->nrow(), in->ncol());
309 return out->temp_objvar();
316 return out->temp_objvar();
322 out->resize(m->ncol(), m->nrow());
324 return out->temp_objvar();
331 out->resize(m->nrow(), m->ncol());
337 vout =
new Vect(m->nrow());
338 p = vout->temp_objvar();
340 m->symmeigen(out, vout);
350 u->resize(m->nrow(), m->nrow());
351 v->resize(m->ncol(), m->ncol());
355 int dsize = m->nrow() < m->ncol() ? m->nrow() : m->ncol();
361 p = d->temp_objvar();
379 return out->temp_objvar();
391 vout->resize(m->ncol());
397 vout =
new Vect(m->ncol());
404 return vout->temp_objvar();
417 vout->resize(m->nrow());
423 vout =
new Vect(m->nrow());
430 return vout->temp_objvar();
448 return m->temp_objvar();
465 return m->temp_objvar();
470 int k = (
int)
chkarg(1, -(m->nrow() - 1), m->ncol()-1);
472 m->setdiag(k, *
getarg(2));
482 return m->temp_objvar();
487 int k = (
int)
chkarg(1, -(m->nrow()-1), m->ncol()-1);
494 vout->resize(m->nrow());
500 vout =
new Vect(m->nrow());
507 return vout->temp_objvar();
514 return m->temp_objvar();
520 return m->temp_objvar();
527 return out->temp_objvar();
535 return out->temp_objvar();
542 return out->temp_objvar();
548 double a = m->det(&e);
568 for (
int i=2; i <=3; ++
i) {
583 vout =
new Vect(m->nrow());
589 vout->resize(m->ncol());
596 vin =
new Vect(*vin);
599 m->solv(vin, vout, use_lu);
610 return vout->temp_objvar();
616 int i,
j, nrow = m->nrow(), ncol = m->ncol();
618 for (k=0, i=0; i < nrow; ++
i) {
619 for (j=0; j < ncol; ++
j) {
620 *(m->mep(i, j)) = *
getarg(++k);
623 return m->temp_objvar();
630 int nrow = m->nrow();
631 int ncol = m->ncol();
640 for (j=0; j < ncol; ++
j)
for (i=0; i < nrow; ++
i) {
641 ve[k++] = m->getval(i, j);
650 int nrow = m->nrow();
651 int ncol = m->ncol();
656 for (j=0; j < ncol; ++
j)
for (i=0; i < nrow; ++
i) {
657 *(m->mep(i, j)) = ve[k++];
659 return m->temp_objvar();
711 int i=1,
j=1, storage_type = Matrix::MFULL;
715 Matrix* m = Matrix::instance(i,
j, storage_type);
738 #if WIN32 && !USEMATRIX
static Matrix * get_out_mat(Matrix *mat, int n, int m, int i, const char *mes=NULL)
static Object ** m_getdiag(void *v)
static double m_spgetrowval(void *v)
Matrix * matrix_arg(int i)
Vect * vector_new1(int n)
static Member_ret_obj_func m_retobj_members[]
static Object ** m_c(void *v)
static Object ** m_inverse(void *v)
static Object ** m_getcol(void *v)
int hoc_is_double_arg(int narg)
Symbol * hoc_lookup(const char *)
static double m_ncol(void *v)
static Object ** m_solv(void *v)
static double m_nrow(void *v)
check_obj_type(o, "SectionList")
static Object ** m_mulm(void *v)
static Object ** m_set(void *v)
static philox4x32_key_t k
sprintf(buf," if (secondorder) {\ " int _i;\" " for(_i=0;_i< %d;++_i) {\" " _p[_slist%d[_i]]+=dt *_p[_dlist%d[_i]];\" " }}\", numeqn, listnum, listnum)
static void steer_x(void *v)
static Object ** m_exp(void *v)
static double m_det(void *v)
double * hoc_pgetarg(int narg)
Vect * vector_new2(Vect *v)
void vector_delete(Vect *v)
static Object ** m_add(void *v)
Object ** hoc_temp_objvar(Symbol *symtemp, void *v)
static void * m_cons(Object *o)
static void check_domain(int i, int j)
int const size_t const size_t n
static double m_fprint(void *v)
void class2oc(const char *, void *(*cons)(Object *), void(*destruct)(void *), Member_func *, int(*checkpoint)(void **), Member_ret_obj_func *, Member_ret_str_func *)
static double m_printf(void *v)
static Object ** m_to_vector(void *v)
static Object ** m_svd(void *vv)
void hoc_execerror(const char *, const char *)
fprintf(stderr, "Don't know the location of params at %p\, pp)
static Object ** m_bcopy(void *v)
static Object ** m_pow(void *v)
static void m_destruct(void *v)
static Object ** m_setrow(void *v)
void vector_resize(Vect *v, int n)
static double m_sprowlen(void *v)
static Object ** m_mulv(void *v)
int vector_capacity(Vect *v)
static double m_scanf(void *v)
static Object ** m_muls(void *v)
HocStruct cTemplate * ctemplate
static Object ** m_resize(void *v)
Symbol * hoc_table_lookup(const char *, Symlist *)
static Object ** temp_objvar(const char *name, void *v, Object **obp)
static Object ** m_transpose(void *v)
static Object ** m_zero(void *v)
double * vector_vec(Vect *v)
static Object ** m_from_vector(void *v)
FILE * hoc_obj_file_arg(int i)
void hoc_pushpx(double *d)
int hoc_is_object_arg(int narg)
Object ** vector_temp_objvar(Vect *v)
Object ** hoc_temp_objptr(Object *)
static Object ** m_getrow(void *v)
static Object ** m_setdiag(void *v)
static double m_getval(void *v)
Object ** hoc_objgetarg(int)
static Object ** m_symmeig(void *v)
double chkarg(int, double low, double high)
static void check_capac(int i, int j)
void * hoc_Emalloc(size_t size)
static Object ** m_ident(void *v)
static double m_setval(void *v)
static Object ** m_setcol(void *v)
static Member_func m_members[]