/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.interestrate; import org.apache.commons.lang.Validate; import com.opengamma.analytics.math.function.Function1D; import com.opengamma.analytics.math.matrix.DoubleMatrix1D; /** * @deprecated {@link YieldCurveBundle} is deprecated */ @Deprecated public class MultipleYieldCurveFinderFunction extends Function1D<DoubleMatrix1D, DoubleMatrix1D> { private final InstrumentDerivativeVisitor<YieldCurveBundle, Double> _calculator; private final MultipleYieldCurveFinderDataBundle _data; private final YieldCurveBundleBuildingFunction _curveBuilderFunction; //TODO this could be moved into MultipleYieldCurveFinderDataBundle public MultipleYieldCurveFinderFunction(final MultipleYieldCurveFinderDataBundle data, final InstrumentDerivativeVisitor<YieldCurveBundle, Double> calculator) { Validate.notNull(data, "data"); Validate.notNull(calculator, "calculator"); _calculator = calculator; _data = data; _curveBuilderFunction = new InterpolatedYieldCurveBuildingFunction(data.getUnknownCurveNodePoints(), data.getUnknownCurveInterpolators()); } @Override public DoubleMatrix1D evaluate(final DoubleMatrix1D x) { final YieldCurveBundle curves = _curveBuilderFunction.evaluate(x); // set any known (i.e. fixed) curves final YieldCurveBundle knownCurves = _data.getKnownCurves(); if (knownCurves != null) { curves.addAll(knownCurves); } final double[] res = new double[_data.getNumInstruments()]; for (int i = 0; i < _data.getNumInstruments(); i++) { res[i] = _data.getDerivative(i).accept(_calculator, curves) - _data.getMarketValue(i); } return new DoubleMatrix1D(res); } }