コード例 #1
0
        private Numerator CalculateNumerator(IntegralPoint D1)
        {
            Numerator numerator = new Numerator();

            numerator.Result = D1.Result;

            return(numerator);
        }
コード例 #2
0
        public IntegralPoint CalculateIntegralPointD1(double S, double B, double r, double sigma, double t)
        {
            IntegralPoint integralPoint = new IntegralPoint();

            integralPoint.Numerator    = CalculateNumerator(S, B, r, sigma, t);
            integralPoint.Denominator  = CalculateDenominator(sigma, t);
            integralPoint.Result.Value = integralPoint.Numerator.Result.Value / integralPoint.Denominator.Result.Value;

            return(integralPoint);
        }
コード例 #3
0
        public IntegralPoint CalculateIntegralPointD2(IntegralPoint D1, double sigma, double t)
        {
            IntegralPoint integralPoint = new IntegralPoint();

            integralPoint.Numerator    = CalculateNumerator(D1);
            integralPoint.Denominator  = CalculateDenominator(sigma, t);
            integralPoint.Result.Value = integralPoint.Numerator.Result.Value - integralPoint.Denominator.Result.Value;

            return(integralPoint);
        }
コード例 #4
0
        public async Task <IntegralFunction> CalculateAsync(int n, double T, double r, double sigma, double t, IntegralPoint D2)
        {
            IntegralFunction integralFunction = new IntegralFunction();

            UnderIntegral[] underIntegral = new UnderIntegral[n];

            for (int i = 0; i < n; i++)
            {
                UnderIntegral ui = new UnderIntegral();

                ui.h            = (T / n);
                ui.ksi          = i * ui.h;
                ui.Result.Value = CalculateUnderIntegral(r, sigma, t, ui.ksi, D2) * ui.h;

                underIntegral[i] = ui;
                integralFunction.Result.Value += ui.Result.Value;
            }

            integralFunction.UnderIntegral = underIntegral;

            return(integralFunction);
        }
コード例 #5
0
 private static double CalculateUnderIntegral(double r, double sigma, double t, double ksi, IntegralPoint D2)
 {
     return((r / sigma * Math.Sqrt(2 * Math.PI * (t - ksi))) *
            Math.Exp(-(r * (t - ksi) + (0.5 * Math.Pow(D2.Result.Value, 2)))));
 }