1 #include <../../nrnconf.h>
12 #include "utils/logger.hpp"
14 #define EPS hoc_epsilon
29 hoc_execerror(
"wrong size for Matrix or Vector operation", 0);
55 return (
double) m->
nrow();
61 return (
double) m->
ncol();
105 const char* f1 =
" %-8.3g";
106 const char* f2 =
"\n";
113 for (
i = 0;
i < nrow; ++
i) {
114 for (
j = 0;
j < ncol; ++
j) {
127 const char* f1 =
" %-8.3g";
128 const char* f2 =
"\n";
130 pr_size = ((int)
chkarg(ia, 0, 1) == 1) ?
true :
false;
141 fprintf(f,
"%d %d\n", nrow, ncol);
143 for (
i = 0;
i < nrow; ++
i) {
144 for (
j = 0;
j < ncol; ++
j) {
147 fprintf(f,
"%s", f2);
159 int i,
j, nrow, ncol;
161 nrow = (int)
chkarg(2, 1, 1e9);
162 ncol = (int)
chkarg(3, 1, 1e9);
168 for (
i = 0;
i < nrow; ++
i)
169 for (
j = 0;
j < ncol; ++
j) {
200 vin =
new Vect(*vin);
236 if (mat == out && mes) {
237 hoc_execerror(mes,
" matrix operation cannot be done in place");
260 int i0, j0, m0, n0, i1, j1,
i;
266 i1 = (int)
chkarg(5, 0, 1e9);
267 j1 = (int)
chkarg(6, 0, 1e9);
275 m->
bcopy(out, i0, j0, m0, n0, i1, j1);
288 if (in == out || m == out) {
289 hoc_execerror(
"matrix multiplication cannot be done in place", 0);
513 int k = (int)
chkarg(1, 0., 100.);
529 double a = m->
det(&e);
549 for (
int i = 2;
i <= 3; ++
i) {
556 use_lu = ((int) (*
getarg(
i))) ? true :
false;
577 vin =
new Vect(*vin);
580 m->
solv(vin, vout, use_lu);
599 for (
k = 0,
i = 0;
i < nrow; ++
i) {
600 for (
j = 0;
j < ncol; ++
j) {
611 int nrow = m->
nrow();
612 int ncol = m->
ncol();
621 for (
j = 0;
j < ncol; ++
j)
622 for (
i = 0;
i < nrow; ++
i) {
632 int nrow = m->
nrow();
633 int ncol = m->
ncol();
638 for (
j = 0;
j < ncol; ++
j)
639 for (
i = 0;
i < nrow; ++
i) {
698 storage_type = int(
chkarg(3, 1, 3));
726 #if WIN32 && !USEMATRIX
virtual double det(int *e) const
virtual void mulm(Matrix *in, Matrix *out) const
virtual void transpose(Matrix *out)
virtual void pow(int, Matrix *out) const
virtual double spgetrowval(int i, int jindx, int *j) const
virtual void setcol(int, Vect *in)
virtual void getcol(int, Vect *out) const
virtual void resize(int, int)
virtual double & coeff(int i, int j)
virtual void svd1(Matrix *u, Matrix *v, Vect *d) const
static OcMatrix * instance(int nrow, int ncol, int type=MFULL)
virtual void exp(Matrix *out) const
void mulv(Vect &in, Vect &out) const
virtual int sprowlen(int) const
virtual void copy(Matrix *out) const
virtual void setrow(int, Vect *in)
virtual void add(Matrix *, Matrix *out) const
double * mep(int i, int j)
virtual void inverse(Matrix *out) const
virtual void getdiag(int, Vect *out) const
virtual void muls(double, Matrix *out) const
virtual void solv(Vect *vin, Vect *vout, bool use_lu)
virtual void getrow(int, Vect *out) const
virtual double getval(int i, int j) const
virtual void setdiag(int, Vect *in)
virtual void bcopy(Matrix *mout, int i0, int j0, int n0, int m0, int i1, int j1) const
virtual void symmeigen(Matrix *mout, Vect *vout) const
void class2oc(const char *, ctor_f *cons, dtor_f *destruct, Member_func *, Member_ret_obj_func *, Member_ret_str_func *)
Symbol * hoc_table_lookup(const char *, Symlist *)
HocReturnType hoc_return_type_code
double chkarg(int, double low, double high)
int hoc_is_object_arg(int narg)
void hoc_execerr_ext(const char *fmt,...)
printf style specification of hoc_execerror message.
Object ** hoc_temp_objvar(Symbol *symtemp, void *v)
void vector_resize(IvocVect *v, int n)
IvocVect * vector_new2(IvocVect *v)
void hoc_pushpx(double *d)
std::FILE * hoc_obj_file_arg(int i)
bool hoc_stack_type_is_ndim()
int hoc_is_double_arg(int narg)
void check_obj_type(Object *obj, const char *type_name)
IvocVect * vector_arg(int i)
Object ** vector_temp_objvar(Vect *v)
double * hoc_pgetarg(int narg)
Symbol * hoc_lookup(const char *)
void vector_delete(Vect *v)
Object ** hoc_objgetarg(int)
double * vector_vec(IvocVect *v)
IvocVect * vector_new(int n)
void hoc_execerror(const char *s1, const char *s2)
int vector_capacity(IvocVect *v)
void * hoc_Emalloc(size_t)
std::string to_string(const T &obj)
int const size_t const size_t n
static double m_fprint(void *v)
static double m_printf(void *v)
static double m_scanf(void *v)
static void * m_cons(Object *o)
static void m_destruct(void *v)
static void steer_x(void *v)
static double m_det(void *v)
static Member_func m_members[]
static Object ** temp_objvar(Matrix *m)
static Object ** m_pow(void *v)
static Object ** m_symmeig(void *v)
static Matrix * get_out_mat(Matrix *mat, int n, int m, int i, const char *mes=NULL)
static Object ** m_getcol(void *v)
static Object ** m_setcol(void *v)
static Object ** m_mulm(void *v)
static double m_spgetrowval(void *v)
static double m_ncol(void *v)
static Object ** m_from_vector(void *v)
static Object ** m_zero(void *v)
static double m_nrow(void *v)
static Object ** m_setrow(void *v)
static Object ** m_exp(void *v)
static Object ** m_getdiag(void *v)
static double m_setval(void *v)
static Object ** m_getrow(void *v)
Object ** hoc_temp_objptr(Object *)
static Object ** m_bcopy(void *v)
static Object ** m_setdiag(void *v)
static double m_sprowlen(void *v)
static Object ** m_set(void *v)
static Object ** m_solv(void *v)
static Object ** m_to_vector(void *v)
static void check_domain(int i, int j)
static Object ** m_c(void *v)
static Object ** m_ident(void *v)
static Object ** m_mulv(void *v)
static Object ** m_svd(void *vv)
Matrix * matrix_arg(int i)
static Object ** m_transpose(void *v)
static Object ** m_resize(void *v)
static Object ** m_muls(void *v)
static Object ** m_add(void *v)
static void check_capac(int i, int j)
static Object ** m_inverse(void *v)
static double m_getval(void *v)
static Member_ret_obj_func m_retobj_members[]
int Printf(const char *fmt, Args... args)