20#include <ql/methods/finitedifferences/operators/fdm2dblackscholesop.hpp>
21#include <ql/methods/finitedifferences/solvers/fdm2dblackscholessolver.hpp>
22#include <ql/methods/finitedifferences/solvers/fdm2dimsolver.hpp>
23#include <ql/processes/blackscholesprocess.hpp>
30 const Real correlation,
34 Real illegalLocalVolOverwrite)
35 : p1_(
std::move(p1)), p2_(
std::move(p2)), correlation_(correlation),
36 solverDesc_(
std::move(solverDesc)), schemeDesc_(schemeDesc), localVol_(localVol),
37 illegalLocalVolOverwrite_(illegalLocalVolOverwrite) {
46 ext::shared_ptr<Fdm2dBlackScholesOp> op(
60 const Real x = std::log(u);
61 const Real y = std::log(v);
63 return solver_->interpolateAt(x, y);
68 const Real x = std::log(u);
69 const Real y = std::log(v);
77 const Real x = std::log(u);
78 const Real y = std::log(v);
80 return solver_->derivativeX(x, y)/u;
86 const Real x = std::log(u);
87 const Real y = std::log(v);
89 return solver_->derivativeY(x, y)/v;
95 const Real x = std::log(u);
96 const Real y = std::log(v);
98 return (
solver_->derivativeXX(x, y)
99 -
solver_->derivativeX(x, y))/(u*u);
105 const Real x = std::log(u);
106 const Real y = std::log(v);
108 return (
solver_->derivativeYY(x, y)
109 -
solver_->derivativeY(x, y))/(v*v);
115 const Real x = std::log(u);
116 const Real y = std::log(v);
118 return solver_->derivativeXY(x, y)/(u*v);
const Handle< GeneralizedBlackScholesProcess > p2_
ext::shared_ptr< Fdm2DimSolver > solver_
void performCalculations() const override
Real gammaXYat(Real x, Real y) const
Fdm2dBlackScholesSolver(Handle< GeneralizedBlackScholesProcess > p1, Handle< GeneralizedBlackScholesProcess > p2, Real correlation, FdmSolverDesc solverDesc, const FdmSchemeDesc &schemeDesc=FdmSchemeDesc::Hundsdorfer(), bool localVol=false, Real illegalLocalVolOverwrite=-Null< Real >())
Real deltaXat(Real x, Real y) const
Real thetaAt(Real x, Real y) const
const FdmSolverDesc solverDesc_
Real valueAt(Real x, Real y) const
const Handle< GeneralizedBlackScholesProcess > p1_
Real deltaYat(Real x, Real y) const
Real gammaYat(Real x, Real y) const
Real gammaXat(Real x, Real y) const
const FdmSchemeDesc schemeDesc_
const Real illegalLocalVolOverwrite_
Shared handle to an observable.
virtual void calculate() const
std::pair< iterator, bool > registerWith(const ext::shared_ptr< Observable > &)
const ext::shared_ptr< FdmMesher > mesher