예제 #1
0
        public Fdm1DimSolver(FdmSolverDesc solverDesc,
                             FdmSchemeDesc schemeDesc,
                             FdmLinearOpComposite op)
        {
            solverDesc_     = solverDesc;
            schemeDesc_     = schemeDesc;
            op_             = op;
            thetaCondition_ = new FdmSnapshotCondition(
                0.99 * Math.Min(1.0 / 365.0,
                                solverDesc.condition.stoppingTimes().empty()
                            ? solverDesc.maturity
                            : solverDesc.condition.stoppingTimes().First()));

            conditions_ = FdmStepConditionComposite.joinConditions(thetaCondition_,
                                                                   solverDesc.condition);
            x_             = new InitializedList <double>(solverDesc.mesher.layout().size());
            initialValues_ = new InitializedList <double>(solverDesc.mesher.layout().size());
            resultValues_  = new Vector(solverDesc.mesher.layout().size());

            FdmMesher         mesher = solverDesc.mesher;
            FdmLinearOpLayout layout = mesher.layout();

            FdmLinearOpIterator endIter = layout.end();

            for (FdmLinearOpIterator iter = layout.begin(); iter != endIter;
                 ++iter)
            {
                initialValues_[iter.index()]
                    = solverDesc_.calculator.avgInnerValue(iter,
                                                           solverDesc.maturity);
                x_[iter.index()] = mesher.location(iter, 0);
            }
        }
예제 #2
0
        public static FdmStepConditionComposite joinConditions(FdmSnapshotCondition c1,
                                                               FdmStepConditionComposite c2)
        {
            List <List <double> > stoppingTimes = new List <List <double> >();

            stoppingTimes.Add(c2.stoppingTimes());
            stoppingTimes.Add(new InitializedList <double>(1, c1.getTime()));

            List <IStepCondition <Vector> > conditions = new List <IStepCondition <Vector> >();

            conditions.Add(c2);
            conditions.Add(c1);

            return(new FdmStepConditionComposite(stoppingTimes, conditions));
        }