26#include <ql/instruments/basketoption.hpp>
27#include <ql/math/integrals/simpsonintegral.hpp>
28#include <ql/methods/finitedifferences/meshers/fdmmesher.hpp>
29#include <ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp>
30#include <ql/methods/finitedifferences/utilities/fdminnervaluecalculator.hpp>
31#include <ql/payoff.hpp>
38 struct mapped_payoff {
39 explicit mapped_payoff(
41 const ext::function<
Real(
Real)>& gridMapping)
42 : payoff(payoff), gridMapping_(gridMapping) {}
44 Real operator()(
Real x)
const {
return payoff(gridMapping_(x)); }
47 const ext::function<
Real(
Real)>& gridMapping_;
52 ext::shared_ptr<FdmMesher> mesher,
54 ext::function<
Real(
Real)> gridMapping)
55 : payoff_(
std::move(payoff)), mesher_(
std::move(mesher)), direction_(direction),
56 gridMapping_(
std::move(gridMapping)) {}
69 for (
const auto& i : *
mesher_->layout()) {
71 if (!initialized[xn]) {
72 initialized[xn] =
true;
85 if (coord == 0 || coord == dim-1)
97 = ((f(a) != 0.0 || f(b) != 0.0) ?
Real((f(a)+f(b))*5e-5) : 1e-4);
109 const ext::shared_ptr<Payoff>& payoff,
110 const ext::shared_ptr<FdmMesher>& mesher,
113 payoff, mesher, direction,
117 FdmLogBasketInnerValue::FdmLogBasketInnerValue(ext::shared_ptr<BasketPayoff> payoff,
118 ext::shared_ptr<FdmMesher> mesher)
119 : payoff_(
std::move(payoff)), mesher_(
std::move(mesher)) {}
125 x[i] = std::exp(
mesher_->location(iter, i));
1-D array used in linear algebra.
Size size() const
dimension of the array
Real avgInnerValue(const FdmLinearOpIterator &iter, Time t) override
const ext::shared_ptr< FdmMesher > mesher_
std::vector< Real > avgInnerValues_
FdmCellAveragingInnerValue(ext::shared_ptr< Payoff > payoff, ext::shared_ptr< FdmMesher > mesher, Size direction, ext::function< Real(Real)> gridMapping=[](Real x){ return x;})
Real avgInnerValueCalc(const FdmLinearOpIterator &iter, Time t)
Real innerValue(const FdmLinearOpIterator &iter, Time) override
const ext::function< Real(Real)> gridMapping_
const ext::shared_ptr< Payoff > payoff_
const std::vector< Size > & coordinates() const
Real avgInnerValue(const FdmLinearOpIterator &iter, Time) override
const ext::shared_ptr< BasketPayoff > payoff_
const ext::shared_ptr< FdmMesher > mesher_
Real innerValue(const FdmLinearOpIterator &iter, Time) override
FdmLogInnerValue(const ext::shared_ptr< Payoff > &payoff, const ext::shared_ptr< FdmMesher > &mesher, Size direction)
Integral of a one-dimensional function.
Real Time
continuous quantity with 1-year units
std::size_t Size
size of a container