/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* Copyright (C) 2002, 2003 Decillion Pty(Ltd) This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license for more details. */ #include #include namespace QuantLib { CompoundForward::CompoundForward(const Date & referenceDate, const std::vector &dates, const std::vector &forwards, const Calendar & calendar, const BusinessDayConvention conv, const Integer compounding, const DayCounter & dayCounter) : ForwardRateStructure(referenceDate, calendar, dayCounter), conv_(conv), compounding_(compounding), needsBootstrap_(true), dates_(dates), forwards_(forwards) { QL_REQUIRE(!dates_.empty(), "no input dates given"); QL_REQUIRE(!forwards_.empty(), "no input rates given"); QL_REQUIRE(dates_.size() == forwards_.size(), "inconsistent number of dates/forward rates"); calibrateNodes(); } void CompoundForward::calibrateNodes() const { Size i; Integer ci; times_.resize(dates_.size()); for (i = 0; i < dates_.size(); i++) times_[i] = dayCounter().yearFraction(referenceDate(),dates_[i]); fwdinterp_ = LinearInterpolation(times_.begin(), times_.end(), forwards_.begin()); fwdinterp_.update(); std::vector dates = dates_; std::vector