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);
    }
Beispiel #2
0
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;
    }