20#include <ql/methods/finitedifferences/operators/fdmcirop.hpp>
21#include <ql/methods/finitedifferences/solvers/fdm2dimsolver.hpp>
22#include <ql/methods/finitedifferences/solvers/fdmcirsolver.hpp>
23#include <ql/processes/hestonprocess.hpp>
34 : bsProcess_(
std::move(bsProcess)), cirProcess_(
std::move(cirProcess)),
35 solverDesc_(
std::move(solverDesc)), schemeDesc_(schemeDesc), rho_(rho), strike_(strike) {
41 ext::shared_ptr<FdmLinearOpComposite> op(
42 ext::make_shared<FdmCIROp>(
54 return solver_->interpolateAt(std::log(s), r);
59 return solver_->derivativeX(std::log(s), r)/s;
64 const Real x = std::log(s);
65 return (
solver_->derivativeXX(x, r)-
solver_->derivativeX(x, r))/(s*s);
70 return solver_->thetaAt(std::log(s), r);
ext::shared_ptr< Fdm2DimSolver > solver_
const Handle< CoxIngersollRossProcess > cirProcess_
void performCalculations() const override
Real thetaAt(Real s, Real v) const
const Handle< GeneralizedBlackScholesProcess > bsProcess_
const FdmSolverDesc solverDesc_
Real gammaAt(Real s, Real v) const
Real valueAt(Real s, Real v) const
Real deltaAt(Real s, Real v) const
FdmCIRSolver(Handle< CoxIngersollRossProcess > process, Handle< GeneralizedBlackScholesProcess > bsProcess, FdmSolverDesc solverDesc, const FdmSchemeDesc &schemeDesc=FdmSchemeDesc::Hundsdorfer(), Real rho=1.0, Real strike=1.0)
const FdmSchemeDesc schemeDesc_
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