package org.jquantlib.legacy.libormarkets;

import org.jquantlib.QL;
import org.jquantlib.math.Ops;
import org.jquantlib.math.integrals.GaussKronrodAdaptive;
import org.jquantlib.math.matrixutilities.Array;
import org.jquantlib.math.matrixutilities.Matrix;
import org.jquantlib.processes.LfmCovarianceParameterization;

public class LfmCovarianceProxy extends LfmCovarianceParameterization {

    protected LmVolatilityModel  volaModel_;
    protected LmCorrelationModel corrModel_;


    public LfmCovarianceProxy(final LmVolatilityModel volaModel, final LmCorrelationModel corrModel){
        super(corrModel.size(), corrModel.factors());

        if (System.getProperty("EXPERIMENTAL") == null)
            throw new UnsupportedOperationException("Work in progress");

        this.volaModel_ = volaModel;
        this.corrModel_ = corrModel;
    }

    public LmVolatilityModel volatilityModel(){
        return volaModel_;
    }

    public LmCorrelationModel correlationModel(){
        return corrModel_;
    }

    @Override
    // TODO: review iterators
    public Matrix diffusion(/*@Time*/ final double t, final Array x){
        final Matrix pca = corrModel_.pseudoSqrt(t, x);
        // TODO: code review :: use of clone()
        final Array  vol = volaModel_.volatility(t, x);
        for (int i=0; i 

Ads help maintain this website.