Exemplo n.º 1
0
 /// <summary>
 /// This function defines the drift in the Pelsser Markov process.
 /// The formula to calculate the A component is
 /// A = - alpha * previous State.
 /// This is the version which handles a vectorial execution.
 /// </summary>
 /// <param name="i">The parameter is not used.</param>
 /// <param name="x">The state Matrix at the previous state.</param>
 /// <param name="a">The output of the function.</param>
 public void va(int i, Matrix x, Matrix a)
 {
     VectorNP x1 = new VectorNP(x.GetRowReference(0));
     VectorNP tmp = -this.alpha1Temp * x1;
     tmp.CopyTo(a);
 }
        /// <summary>
        /// Vectorial version of method a.
        /// </summary>
        /// <param name="i">The discrete time-step.</param>
        /// <param name="x">The actual state matrix.</param>
        /// <param name="a">The output drift matrix.</param>
        public unsafe void va(int i, Matrix x, Matrix a)
        {
            // Gets the reference to the state and drift components.
            VectorNP x1 = new VectorNP(x.GetRowReference(0));
            VectorNP x2 = new VectorNP(x.GetRowReference(1));

            VectorNP a1 = new VectorNP(a.GetRowReference(0));
            VectorNP a2 = new VectorNP(a.GetRowReference(1));

            if (transformedSimulation)
            {
                VectorNP delta_r = this.theta[i] - alpha1 * x1;
                if (DVPLI.SolverAssumptions.UseRiskNeutralMeasure)
                    delta_r += this.driftAdjustment.vfV();

                delta_r.CopyTo(a1);
            }
            else
            {
                // Does a straight simulation.
                VectorNP delta_r = this.theta[i] + x2 - alpha1 * x1;
                delta_r.CopyTo(a2);
            }

            VectorNP delta_r2 = -alpha2 * x1;
            delta_r2.CopyTo(a2);
        }