Real AnalyticPDFHestonEngine::Pv(Real s_0, Real s_t, Time t) const { const boost::shared_ptr<HestonProcess>& process = model_->process(); const DiscountFactor d= process->riskFreeRate()->discount(t) / process->dividendYield()->discount(t); const Real x_t = std::log(d * s_t/s_0); return Pv(x_t, t); }
double *cubic(double dx, double u1, double v1, double u2, double v2) { double a, b, c, d; double *dd = (double *) malloc(2*sizeof(double)); d = u2; c = v2; b = (3*u1+v1*dx+2*c*dx-3*d)/(dx*dx); a = (2*u1+v1*dx+1*c*dx-2*d)/(dx*dx*dx); dd[0] = Pu(a,b,c,d,-K*dx); dd[1] = Pv(a,b,c,d,-K*dx); return dd; }
Real AnalyticPDFHestonEngine::weightedPayoff(Real x_t, Time t) const { const boost::shared_ptr<HestonProcess>& process = model_->process(); const Real s_0 = process->s0()->value(); const DiscountFactor rD = process->riskFreeRate()->discount(t); const DiscountFactor dD = process->dividendYield()->discount(t); const Real s_t = s_0*std::exp(x_t)*dD/rD; const Real payoff = (*arguments_.payoff)(s_t); return (payoff != 0.0) ? payoff*Pv(x_t, t)*rD : 0.0; }