public double thetaAt(double x) { Utils.QL_REQUIRE(conditions_.stoppingTimes().First() > 0.0, () => "stopping time at zero-> can't calculate theta"); calculate(); Vector thetaValues = new Vector(resultValues_.size()); thetaValues = thetaCondition_.getValues(); double temp = new MonotonicCubicNaturalSpline( x_, x_.Count, thetaValues).value(x); return((temp - interpolateAt(x)) / thetaCondition_.getTime()); }
protected override void performCalculations() { object rhs = new Vector(initialValues_.Count); for (int i = 0; i < initialValues_.Count; i++) { (rhs as Vector)[i] = initialValues_[i]; } new FdmBackwardSolver(op_, solverDesc_.bcSet, conditions_, schemeDesc_) .rollback(ref rhs, solverDesc_.maturity, 0.0, solverDesc_.timeSteps, solverDesc_.dampingSteps); for (int i = 0; i < initialValues_.Count; i++) { resultValues_[i] = (rhs as Vector)[i]; } interpolation_ = new MonotonicCubicNaturalSpline(x_, x_.Count, resultValues_); }