Spectrum Spectrum::add(double coeff_this, double coeff, const Spectrum & rhs) const { assert(elems.size()==rhs.elems.size()); const size_t n = elems.size(); Spectrum result(n); for(size_t i=0; i<n; ++i){ result.elems[i] = coeff_this * elems[i] + coeff * rhs.elems[i]; } const double ct2 = coeff_this * coeff_this; const double c2 = coeff * coeff; for(size_t i=0; i<n; ++i){ for(size_t j=0; j<n; ++j){ result.cov_(i,j) = ct2 * cov_(i,j) + c2 * rhs.cov_(i, j); } } return result; }