コード例 #1
0
        /// <summary>
        /// This is faster for longer span
        /// </summary>
        /// <param name="data"></param>
        /// <param name="average"></param>
        /// <param name="periodic"></param>
        /// <param name="variance"></param>
        /// <returns></returns>
        public static double Next(double[] data, ref double average, ref List <double> periodic, ref double variance)
        {
            double[] PDR = MonteCarloSimulation.PeriodicChange(data, ref periodic);
            average  = AMath.Average(PDR, average);
            variance = AMath.Variance(PDR, average, variance, false);
            double Drift             = average - (variance / 2.0);
            double StandardDeviation = Math.Sqrt(variance); //AMath.StandarDeviation(Variance);

            return(data.Last() * Math.Exp(Drift + StandardDeviation * AExcel.NORMSINV(AMath.Random())));
        }
コード例 #2
0
        /// <summary>
        /// confidence must be from (0 to 100)
        /// </summary>
        /// <param name="data"></param>
        /// <param name="average"></param>
        /// <param name="confidence"></param>
        /// <param name="population"></param>
        /// <returns></returns>
        public static double StandarConfidence(double[] data, double average, double confidence, bool population = false)
        {
            if (data == null || data.Length <= 0)
            {
                return(double.NaN);
            }

            double sigma       = Math.Sqrt(AMath.Variance(data, average, population));
            double multiplayer = (AExcel.NORMSINV((double)confidence / 100) + 1.5) / 2;

            return(sigma * multiplayer);
        }
コード例 #3
0
        /// <summary>
        /// this is faster for short span
        /// Simulates next value of double set
        /// </summary>
        /// <param name="data"></param>
        /// <returns>future random output</returns>
        public static double Next(double[] data)
        {
            if (data == null || data.Length <= 0)
            {
                return(double.NaN);
            }

            double[] PFR               = MonteCarloSimulation.PeriodicChange(data);
            double   Averange          = AMath.Average(PFR);
            double   Variance          = AMath.Variance(PFR, Averange, false);
            double   Drift             = Averange - (Variance / 2.0);
            double   StandardDeviation = Math.Sqrt(Variance); //AMath.StandarDeviation(Variance);

            return(data.Last() * Math.Exp(Drift + StandardDeviation * AExcel.NORMSINV(AMath.Random())));
        }