📄 matrix.cc
字号:
return pointer()->get_element(i);}RefSCMatrixRefDiagSCMatrix::operator*(const RefSCMatrix&a) const{ require_nonnull(); a.require_nonnull(); RefSCMatrix r = kit()->matrix(dim(),a->coldim()); r->assign(0.0); r->accumulate_product(pointer(),a.pointer()); return r;}RefDiagSCMatrixRefDiagSCMatrix::operator+(const RefDiagSCMatrix&a) const{ require_nonnull(); a.require_nonnull(); RefDiagSCMatrix ret(dim(),kit()); ret->assign(pointer()); ret->accumulate(a.pointer()); return ret;}RefDiagSCMatrixRefDiagSCMatrix::operator-(const RefDiagSCMatrix&a) const{ require_nonnull(); a.require_nonnull(); RefDiagSCMatrix ret(dim(),kit()); ret->assign(a.pointer()); ret->scale(-1.0); ret->accumulate(pointer()); return ret;}RefDiagSCMatrixRefDiagSCMatrix::i() const{ require_nonnull(); RefDiagSCMatrix ret; ret = clone(); ret->assign(pointer()); ret->invert_this(); return ret;}RefDiagSCMatrixRefDiagSCMatrix::gi() const{ require_nonnull(); RefDiagSCMatrix ret; ret = clone(); ret->assign(pointer()); ret->gen_invert_this(); return ret;}intRefDiagSCMatrix::n() const{ if (null()) return 0; else return pointer()->dim()->n();}RefSCDimensionRefDiagSCMatrix::dim() const{ if (null()) return 0; else return pointer()->dim();}Ref<SCMatrixKit>RefDiagSCMatrix::kit() const{ if (null()) return 0; else return pointer()->kit();}DiagSCMatrixdoubleRefDiagSCMatrix::operator()(int i) const{ return DiagSCMatrixdouble(pointer(),i,i);}RefDiagSCMatrixRefDiagSCMatrix::clone() const{ RefDiagSCMatrix r = kit()->diagmatrix(dim()); return r;}RefDiagSCMatrixRefDiagSCMatrix::copy() const{ if (null()) return 0; RefDiagSCMatrix v = kit()->diagmatrix(dim()); v.assign(*this); return v;}voidRefDiagSCMatrix::randomize() const{ require_nonnull(); pointer()->randomize();}voidRefDiagSCMatrix::assign(const RefDiagSCMatrix&a) const{ require_nonnull(); pointer()->assign(a.pointer());}voidRefDiagSCMatrix::assign(const double*v) const{ require_nonnull(); pointer()->assign(v);}voidRefDiagSCMatrix::convert(double*v) const{ require_nonnull(); pointer()->convert(v);}voidRefDiagSCMatrix::scale(double a) const{ require_nonnull(); pointer()->scale(a);}voidRefDiagSCMatrix::assign(double a) const{ require_nonnull(); pointer()->assign(a);}voidRefDiagSCMatrix::accumulate(const RefDiagSCMatrix&a) const{ require_nonnull(); pointer()->accumulate(a.pointer());}voidRefDiagSCMatrix::element_op(const Ref<SCElementOp>&op) const{ if (nonnull()) pointer()->element_op(op);}voidRefDiagSCMatrix::element_op(const Ref<SCElementOp2>&op, const RefDiagSCMatrix&m) const{ if (nonnull()) pointer()->element_op(op,m.pointer());}voidRefDiagSCMatrix::element_op(const Ref<SCElementOp3>&op, const RefDiagSCMatrix&m, const RefDiagSCMatrix&n) const{ if (nonnull()) pointer()->element_op(op,m.pointer(),n.pointer());}doubleRefDiagSCMatrix::determ() const{ return pointer()->determ_this();}doubleRefDiagSCMatrix::trace() const{ return pointer()->trace();}voidRefDiagSCMatrix::print(ostream& out) const{ print(0,out);}voidRefDiagSCMatrix::print(const char*title,ostream&out, int precision) const{ if (nonnull()) { pointer()->print(title,out,precision); } else { if (title) out << endl << title << endl; out << "null matrix" << endl; }}RefDiagSCMatrixRefDiagSCMatrix::operator *(double a) const{ RefDiagSCMatrix r(copy()); r.scale(a); return r;}RefDiagSCMatrixoperator *(double a, const RefDiagSCMatrix& v){ return v*a;}voidRefDiagSCMatrix::save(StateOut&s){ if (null()) s.put(0); else { s.put(1); pointer()->save(s); }}voidRefDiagSCMatrix::restore(StateIn&s){ int have_matrix; s.get(have_matrix); if (have_matrix && nonnull()) { pointer()->restore(s); } else if (have_matrix) { ExEnv::errn() << "RefDiagSCMatrix::restore: " << "matrix not properly initialized" << endl; abort(); } else { clear(); }}intRefDiagSCMatrix::nblock() const{ BlockedDiagSCMatrix *b = dynamic_cast<BlockedDiagSCMatrix*>(pointer()); if (b) return b->nblocks(); return 1;}RefDiagSCMatrixRefDiagSCMatrix::block(int i) const{ BlockedDiagSCMatrix *b = dynamic_cast<BlockedDiagSCMatrix*>(pointer()); if (b) return b->block(i); return *this;}///////////////////////////////////////////////////////////////////// RefSCVector membersRefSCVector::RefSCVector(){} RefSCVector::RefSCVector (const RefSCVector & o): Ref<SCVector> (o){} RefSCVector::RefSCVector (SCVector * o): Ref<SCVector> (o){}RefSCVector::~RefSCVector (){}RefSCVector&RefSCVector::operator=(SCVector* cr){ Ref<SCVector>::operator=(cr); return *this;}RefSCVector&RefSCVector::operator=(const RefSCVector & c){ Ref<SCVector>::operator=(c); return *this;}RefSCVector::RefSCVector(const RefSCDimension&a, const Ref<SCMatrixKit>&k){ a.require_nonnull(); assign_pointer(k->vector(a));}voidRefSCVector::set_element(int i, double a) const{ require_nonnull(); pointer()->set_element(i,a);}voidRefSCVector::accumulate_element(int i, double a) const{ require_nonnull(); pointer()->accumulate_element(i,a);}doubleRefSCVector::get_element(int i) const{ require_nonnull(); return pointer()->get_element(i);}RefSCVectorRefSCVector::operator+(const RefSCVector&a) const{ require_nonnull(); a.require_nonnull(); RefSCVector ret(dim(),kit()); ret->assign(pointer()); ret->accumulate(a.pointer()); return ret;}RefSCVectorRefSCVector::operator-(const RefSCVector&a) const{ require_nonnull(); a.require_nonnull(); RefSCVector ret(dim(),kit()); ret->assign(a.pointer()); ret->scale(-1.0); ret->accumulate(pointer()); return ret;}intRefSCVector::n() const{ if (null()) return 0; else return pointer()->dim()->n();}RefSCDimensionRefSCVector::dim() const{ if (null()) return 0; else return pointer()->dim();}Ref<SCMatrixKit>RefSCVector::kit() const{ if (null()) return 0; else return pointer()->kit();}SCVectordoubleRefSCVector::operator()(int i) const{ return SCVectordouble(pointer(),i);}SCVectordoubleRefSCVector::operator[](int i) const{ return SCVectordouble(pointer(),i);}RefSCVectorRefSCVector::clone() const{ RefSCVector r = kit()->vector(dim()); return r;}RefSCVectorRefSCVector::copy() const{ if (null()) return 0; RefSCVector v = kit()->vector(dim()); v.assign(*this); return v;}doubleRefSCVector::dot(const RefSCVector&a) const{ require_nonnull(); return pointer()->scalar_product(a.pointer());}doubleRefSCVector::scalar_product(const RefSCVector&a) const{ require_nonnull(); return pointer()->scalar_product(a.pointer());}voidRefSCVector::randomize() const{ require_nonnull(); pointer()->randomize();}voidRefSCVector::assign(const RefSCVector&a) const{ require_nonnull(); pointer()->assign(a.pointer());}voidRefSCVector::assign(const double*v) const{ require_nonnull(); pointer()->assign(v);}voidRefSCVector::convert(double*v) const{ require_nonnull(); pointer()->convert(v);}voidRefSCVector::scale(double a) const{ require_nonnull(); pointer()->scale(a);}voidRefSCVector::assign(double a) const{ require_nonnull(); pointer()->assign(a);}voidRefSCVector::accumulate(const RefSCVector&a) const{ require_nonnull(); pointer()->accumulate(a.pointer());}voidRefSCVector::accumulate_product(const RefSymmSCMatrix&a, const RefSCVector&b){ require_nonnull(); pointer()->accumulate_product(a.pointer(), b.pointer());}voidRefSCVector::accumulate_product(const RefSCMatrix&a, const RefSCVector&b){ require_nonnull(); pointer()->accumulate_product(a.pointer(), b.pointer());}voidRefSCVector::element_op(const Ref<SCElementOp>&op) const{ if (nonnull()) pointer()->element_op(op);}voidRefSCVector::element_op(const Ref<SCElementOp2>&op, const RefSCVector&v) const{ if (nonnull()) pointer()->element_op(op,v.pointer());}voidRefSCVector::element_op(const Ref<SCElementOp3>&op, const RefSCVector&v, const RefSCVector&w) const{ if (nonnull()) pointer()->element_op(op,v.pointer(),w.pointer());}voidRefSCVector::print(ostream& out) const{ print(0,out);}voidRefSCVector::print(const char*title,ostream&out, int precision) const{ if (nonnull()) { pointer()->print(title,out,precision); } else { if (title) out << endl << title << endl; out << "null matrix" << endl; }}RefSCVectorRefSCVector::operator *(double a) const{ RefSCVector r(copy()); r.scale(a); return r;}RefSCVectoroperator *(double a, const RefSCVector& v){ return v*a;}voidRefSCVector::normalize() const{ require_nonnull(); pointer()->normalize();}RefSymmSCMatrixRefSCVector::symmetric_outer_product() const{ RefSymmSCMatrix result(dim(),kit()); result.assign(0.0); result.accumulate_symmetric_outer_product(pointer()); return result;}RefSCMatrixRefSCVector::outer_product(const RefSCVector&v) const{ RefSCMatrix result(dim(),v.dim(),kit()); result.assign(0.0); result.accumulate_outer_product(*this,v); return result;}doubleRefSCVector::maxabs() const{ if (null()) return 0.0; return pointer()->maxabs();}voidRefSCVector::save(StateOut&s){ if (null()) s.put(0); else { s.put(1); pointer()->save(s); }}voidRefSCVector::restore(StateIn&s){ int have_matrix; s.get(have_matrix); if (have_matrix && nonnull()) { pointer()->restore(s); } else if (have_matrix) { ExEnv::errn() << "RefSCVector::restore: vector not properly initialized" << endl; abort(); } else { clear(); }}/////////////////////////////////////////////////////////////////////////////}// Local Variables:// mode: c++// c-file-style: "CLJ"// End:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -