/*-------------------------------------------------------------*/ void AzDmat::prod(const AzDmat *m0, const AzDmat *m1, bool is_m0_tran, bool is_m1_tran) { const char *eyec = "AzDmat::prod"; if (is_m1_tran) { throw new AzException(eyec, "No support for the transpose of the second matrix"); } if (is_m0_tran) { reform(m0->colNum(), m1->colNum()); for (int col = 0; col < m1->colNum(); ++col) { AzDvect *myv = col_u(col); const AzDvect *v1 = m1->col(col); for (int row = 0; row < rowNum(); ++row) { double val = m0->col(col)->innerProduct(v1); myv->set(row, val); } } } else { reform(m0->rowNum(), m1->colNum()); for (int col = 0; col < m1->colNum(); ++col) { AzDvect *myv = col_u(col); const AzDvect *v1 = m1->col(col); for (int row1 = 0; row1 < v1->rowNum(); ++row1) { myv->add(m0->col(row1), v1->get(row1)); } } } }
void count(const AzPmat *m) { if (v_border.rowNum() == 0) init_count(); AzDmat md; m->get(&md); const double *border = v_border.point(); int row, col; for (col = 0; col < md.colNum(); ++col) { for (row = 0; row < md.rowNum(); ++row) { double val = md.get(row, col); int bx; for (bx = 0; bx < v_border.rowNum(); ++bx) { if (val <= border[bx]) { v_pop.add(bx, 1); break; } } } } }
void resetTarDw_residual(const AzDvect *v_p) { /* only for LS */ v_tar_dw.set(&v_y); v_tar_dw.add(v_p, -1); }