net.finmath.montecarlo.interestrate.models.covariance.TermStructCovarianceModelFromLIBORCovarianceModelParametric Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of finmath-lib Show documentation
Show all versions of finmath-lib Show documentation
finmath lib is a Mathematical Finance Library in Java.
It provides algorithms and methodologies related to mathematical finance.
/*
* (c) Copyright Christian P. Fries, Germany. Contact: [email protected].
*
* Created on 22.12.2016
*/
package net.finmath.montecarlo.interestrate.models.covariance;
import net.finmath.montecarlo.interestrate.TermStructureModel;
import net.finmath.stochastic.RandomVariable;
import net.finmath.time.TimeDiscretization;
/**
* @author Christian Fries
*
* @version 1.0
*/
public class TermStructCovarianceModelFromLIBORCovarianceModelParametric extends TermStructureCovarianceModelParametric {
private final TermStructureTenorTimeScalingInterface tenorTimeScalingModel;
private final AbstractLIBORCovarianceModelParametric covarianceModel;
/**
* @param tenorTimeScalingModel The model used for the tenor time re-scaling (providing the scaling coefficients).
* @param covarianceModel The model implementing AbstractLIBORCovarianceModelParametric.
*/
public TermStructCovarianceModelFromLIBORCovarianceModelParametric(TermStructureTenorTimeScalingInterface tenorTimeScalingModel, AbstractLIBORCovarianceModelParametric covarianceModel) {
this.tenorTimeScalingModel = tenorTimeScalingModel;
this.covarianceModel = covarianceModel;
}
@Override
public double getScaledTenorTime(double periodStart, double periodEnd) {
if(tenorTimeScalingModel == null) {
return periodEnd-periodStart;
}
return tenorTimeScalingModel.getScaledTenorTime(periodStart, periodEnd);
}
@Override
public RandomVariable[] getFactorLoading(double time, double periodStart, double periodEnd, TimeDiscretization periodDiscretization, RandomVariable[] realizationAtTimeIndex, TermStructureModel model) {
TimeDiscretization liborPeriodDiscretization = covarianceModel.getLiborPeriodDiscretization();
int periodStartIndex = liborPeriodDiscretization.getTimeIndex(periodStart);
int periodEndIndex = liborPeriodDiscretization.getTimeIndex(periodEnd);
RandomVariable[] factorLoadings = covarianceModel.getFactorLoading(time, periodStartIndex, null);
if(periodEndIndex > periodStartIndex+1) {
// Need to sum factor loadings
for(int factorIndex = 0; factorIndex
© 2015 - 2025 Weber Informatics LLC | Privacy Policy