CurveFromProductOfCurves.java

/*
 * (c) Copyright Christian P. Fries, Germany. Contact: email@christian-fries.de.
 *
 * Created on 20.05.2005
 */
package net.finmath.marketdata.model.curves;

import java.io.Serializable;
import java.time.LocalDate;

import net.finmath.marketdata.model.AnalyticModel;

/**
 * A curve derived from other curves by multiplying the values.
 *
 * @author Christian Fries
 * @version 1.0
 */
public class CurveFromProductOfCurves extends AbstractCurve implements Serializable, Curve {

	private static final long serialVersionUID = 8850409340966149755L;

	private final Curve[] curves;

	/**
	 * Create a curve using one or more curves.
	 *
	 * @param name The name of this curve.
	 * @param referenceDate The reference date of this curve.
	 * @param curves Argument list or array of curves.
	 */
	public CurveFromProductOfCurves(final String name, final LocalDate referenceDate, final Curve... curves) {
		super(name, referenceDate);

		this.curves = curves;
	}

	@Override
	public double getValue(final AnalyticModel model, final double time) {
		double value = 1.0;

		for(final Curve curve : curves) {
			value *= curve.getValue(model, time);
		}

		return value;
	}


	@Override
	public double[] getParameter() {
		return null;
	}

	@Override
	public void setParameter(final double[] parameter) {
	}

	@Override
	public CurveBuilder getCloneBuilder() throws CloneNotSupportedException {
		throw new CloneNotSupportedException("Cloning is unsupported for this curve.");
	}
}