void BetaShifted_HGVolatilityParam::initializeShiftMatrix( LMMTenorStructure_PTR pLMMTenorStructure, const LowerTriangularMatrix& betas, const std::vector<double>& liborsInitValues) { assert(betas.size1() == betas.size2() && betas.size2() == liborsInitValues.size() && pLMMTenorStructure->get_nbLIBOR()); //unused first column, first row is automatically null since it is lower triangular matrix LowerTriangularMatrix m(betas.size1(), betas.size2()); for(size_t k=0; k<m.size1();++k) { shift_matrix_(k,0) = 1.0e100; } for(size_t liborIndex=1; liborIndex<m.size1();++liborIndex) { for(size_t timeIndex=1;timeIndex<=liborIndex;++timeIndex) { double beta = betas(liborIndex,timeIndex); double liborInitValue = liborsInitValues[liborIndex]; shift_matrix_(liborIndex,timeIndex) = 1+ (1-beta)/beta*liborInitValue; } } }
void Shifted_HGVolatilityParam::reset_g_matrix(const LowerTriangularMatrix& other_g) { assert(other_g.size1() == g_matrix_.size1() ); assert(other_g.size2() == g_matrix_.size2() ); for(size_t indexLibor=1; indexLibor<g_matrix_.size1();++indexLibor) { for(size_t indexTime=1; indexTime<=indexLibor; ++indexTime) { g_matrix_(indexLibor,indexTime) = other_g(indexLibor,indexTime); } } }