/** * Description not yet available. * \param */ dmatrix outer_prod(const dvector& v1, const dvector& v2) { dmatrix tmp(v1.indexmin(),v1.indexmax(), v2.indexmin(), v2.indexmax() ); for (int i=v1.indexmin(); i<=v1.indexmax(); i++) { for (int j=v2.indexmin(); j<=v2.indexmax(); j++) { tmp.elem(i,j)=v1.elem(i)*v2.elem(j); } } return(tmp); }
/** Construct ivector with same dimensions as u. */ ivector::ivector(const dvector& u) { allocate(u); for (int i=indexmin();i<=indexmax();i++) { #ifdef OPT_LIB elem(i) = static_cast<int>(u.elem(i)); #else double ui = u.elem(i); assert(ui <= INT_MAX); elem(i) = static_cast<int>(ui); #endif } }
/** Return the total sum of the elements in values. \param values dvector */ double sum(const dvector& values) { double total = 0.0; for (int i = values.indexmin(); i <= values.indexmax(); ++i) { total += values.elem(i); } return total; }
/** * Description not yet available. * \param */ dvar_vector operator*(const dvar_matrix& m, const dvector& x) { RETURN_ARRAYS_INCREMENT(); if (x.indexmin() != m.colmin() || x.indexmax() != m.colmax()) { cerr << " Incompatible array bounds in " "dvar_vector operator * (const dvar_matrix& m, const dvar_vector& x)\n"; ad_exit(21); } kkludge_object kkk; dvar_vector tmp(m.rowmin(),m.rowmax(),kkk); double sum; for (int i=m.rowmin(); i<=m.rowmax(); i++) { sum=0.0; const dvar_vector& tt=m.elem(i); for (int j=x.indexmin(); j<=x.indexmax(); j++) { //sum+=m[i][j]*x[j]; sum+=tt.elem_value(j)*x.elem(j); } tmp.elem_value(i)=sum; } save_identifier_string("PL4"); x.save_dvector_value(); x.save_dvector_position(); m.save_dvar_matrix_position(); tmp.save_dvar_vector_position(); save_identifier_string("PLX"); gradient_structure::GRAD_STACK1-> set_gradient_stack(dmcv_prod); RETURN_ARRAYS_DECREMENT(); return(tmp); }
/** * Description not yet available. * \param */ dvar_vector operator*(const dvector& x, const dvar_matrix& m) { RETURN_ARRAYS_INCREMENT(); if (x.indexmin() != m.rowmin() || x.indexmax() != m.rowmax()) { cerr << " Incompatible array bounds in " "dvar_vector operator*(const dvector& x, const dvar_matrix& m)\n"; ad_exit(21); } dvar_vector tmp(m.colmin(),m.colmax()); dvariable sum; for (int j=m.colmin(); j<=m.colmax(); j++) { sum=0.0; for (int i=x.indexmin(); i<=x.indexmax(); i++) { sum+=x.elem(i)*m.elem(i,j); } tmp[j]=sum; } RETURN_ARRAYS_DECREMENT(); return(tmp); }