Пример #1
0
        public MultivariateDistributionSettingsForm(MultivariateDistributionFunctionArgument argument) : this(false, true)
        {
            int dimension = argument.MultivariateDistributionSettings.Dimension;

            numericDimensions.Value = dimension;

            BuildTables();

            var arguments = argument.Arguments;
            var means     = argument.MultivariateDistributionSettings.Means;
            var covMatrix = argument.MultivariateDistributionSettings.CovarianceMatrix;

            for (int i = 0; i < dimension; i++)
            {
                _arguments.Rows[0][i] = arguments[i];
                _means.Rows[0][i]     = means[i];

                for (int j = 0; j < dimension; j++)
                {
                    _matrix.Rows[j][i] = covMatrix[i, j];
                }
            }

            if (argument.MultivariateDistributionSettings is MultivariateNormalDistributionSettings)
            {
                comboDistributionType.SelectedIndex = 0;
            }
            else if (argument.MultivariateDistributionSettings is MultivariateTDistributionSettings multivariateT)
            {
                numericDegreesOfFreedom.Value       = (decimal)multivariateT.DegreesOfFreedom;
                comboDistributionType.SelectedIndex = 1;
            }
        }
        private void Process()
        {
#if !DEBUG
            try
#endif
            {
                _warningsSource.Clear();

                string expression             = txtFunction.Text;
                bool   evaluateRandomsAlgebra = checkEvaluateRandomsAlgebra.Checked;
                bool   evaluateMonteCarlo     = checkEvaluateMonteCarlo.Checked;

                int samples     = (int)numericSamplesCount.Value;
                int experiments = (int)numericExperimentsCount.Value;
                int pockets     = (int)numericPocketsCount.Value;

                var univariate = DistributionFunctionArgument.CreateDictionary(_argumentsUnivariate);


                var multivariate = MultivariateDistributionFunctionArgument.CreateDictionary(_argumentsMultivariate);
                if (multivariate.Count == 0)
                {
                    multivariate = null;
                }

                Stopwatch sw = Stopwatch.StartNew();

                if (evaluateRandomsAlgebra)
                {
                    sw.Restart();
                    _distributionsPair.RandomsAlgebra = DistributionManager.RandomsAlgebraDistribution(expression, univariate, multivariate, samples);

                    if (_distributionsPair.RandomsAlgebra is ContinuousDistribution continuous)
                    {
                        //_distributionsPair.RandomsAlgebra = continuous.Discretize();
                    }


                    sw.Stop();

                    _distributionsPair.RandomsAlgebraTime = sw.Elapsed;
                }
                else
                {
                    _distributionsPair.RandomsAlgebra     = null;
                    _distributionsPair.RandomsAlgebraTime = null;
                }

                if (evaluateMonteCarlo)
                {
                    sw.Restart();
                    _distributionsPair.MonteCarlo = DistributionManager.MonteCarloDistribution(expression, univariate, multivariate, experiments, pockets);
                    sw.Stop();

                    _distributionsPair.MonteCarloTime = sw.Elapsed;
                }
                else
                {
                    _distributionsPair.MonteCarlo     = null;
                    _distributionsPair.MonteCarloTime = null;
                }

                FillResults();
                FillCharts();
            }
#if !DEBUG
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Languages.GetText("Exception"), MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
#endif
        }