Пример #1
0
        private async Task<PlotModel> ComparePdfElectron(Double step)
        {
            //var sp = new PerformanceComputing.SpeedParticle(0, 1100000, Environment.ProcessorCount);
            //await sp.DecompositionSpeedAsync();

            //var t = sp.Electrons;

            //List<double> tempList = new List<double>(970303);

            //foreach (Particle particle in t)
            //{
            //    var speed = particle.Vx + particle.Vy + particle.Vz;
            //    tempList.Add(speed);
            //}

            //tempList.Sort();

            var maxwell = new MaxwellParticleDistribution(0, 1100000, Environment.ProcessorCount);

            await maxwell.DistributionParticleAsync();
            var distributionElectrons = maxwell.ElectronsPdf();



            var plotModel = new PlotModel { Title = "Распределение электронов" };
            var linearBarSeries = new LinearBarSeries
            {
                FillColor = OxyColor.FromArgb(69, 76, 175, 80),
                StrokeThickness = 1,
                StrokeColor = OxyColor.FromArgb(255, 76, 175, 80),
                Title = "ElectronPDF"
            };
            var categoryAxis = new CategoryAxis
            {
                TickStyle = TickStyle.Outside,
                MajorStep = step,
                Title = "Скорость частиц",
                Unit = "м/с",
                TitleFontSize = 15
            };
            var k = 0;
            for (var i = 0; i < 1100000; i += 11000)
            {
                linearBarSeries.Points.Add(new DataPoint(k++, distributionElectrons[i]));
                categoryAxis.ActualLabels.Add(i.ToString());
            }

            plotModel.Axes.Add(categoryAxis);
            plotModel.Series.Add(linearBarSeries);
            return plotModel;
        }
Пример #2
0
        private async void Compare(List<Particle> speed)
        {
            var fullSpeed = new List<double>();
            speed.ForEach(p => fullSpeed.Add(p.Vx * p.Vx + p.Vy * p.Vy + p.Vz * p.Vz));
            fullSpeed.Sort();

            var h = (fullSpeed[fullSpeed.Count - 1] - fullSpeed[0]) / 100;
            var _sp = new List<Double>();

            for (int i = 0; i < 100; i++)
            {
                var Ai = fullSpeed[0] + ((i + 1) - 1) * h;
                var Bi = fullSpeed[0] + ((i + 2) - 1) * h;
                _sp.Add(fullSpeed.FindAll(x => x > Ai && x < Bi).Count);
            }

            MaxwellParticleDistribution maxwell = new MaxwellParticleDistribution(0, 1100000, 4);

            await maxwell.DistributionCarbonsAsync();

            var maxwellSpeed = new List<int>(maxwell.Carbons);

            var n = new List<double>();

            for (int i = 0; i < 100; i++)
            {
                var sp = Math.Pow(_sp[i] - 100 * maxwellSpeed[i], 2) / 100 * maxwellSpeed[i] * (1 - maxwellSpeed[i]);
                n.Add(sp);
            }

            double sum = 0;
            n.ForEach(p => sum += p);

        }
Пример #3
0
        private PlotModel ComparePdfHelium(Double step)
        {
            var maxwell = new MaxwellParticleDistribution(0, 7000, Environment.ProcessorCount);
            var distributionElectrons = maxwell.HeliumsPdf();

            var plotModel = new PlotModel { Title = "Распределение частиц гелия" };
            var linearBarSeries = new LinearBarSeries
            {
                FillColor = OxyColor.FromArgb(69, 76, 175, 80),
                StrokeThickness = 1,
                StrokeColor = OxyColor.FromArgb(255, 76, 175, 80),
                Title = "HeliumPDF"
            };
            var categoryAxis = new CategoryAxis
            {
                TickStyle = TickStyle.Outside,
                MajorStep = step,
                Title = "Скорость частиц",
                Unit = "м/с",
                TitleFontSize = 15
            };
            var k = 0;
            for (int i = 0; i < 7000; i += 100)
            {
                linearBarSeries.Points.Add(new DataPoint(k++, distributionElectrons[i]));
                categoryAxis.ActualLabels.Add(i.ToString());
            }
            plotModel.Axes.Add(categoryAxis);
            plotModel.Series.Add(linearBarSeries);
            return plotModel;
        }