Генерация непрерывной случайной величины - C#
Формулировка задачи:
Нужно сгенерировать методом фон Неймана(методом исключений) непрерывную случайную величину с плотностью как на прикрепленном фото. Нужно сделать на формах. Буду рад любой помощи, почитал литературу и ничего не понял... Надеюсь на вас!
Решение задачи: «Генерация непрерывной случайной величины»
textual
Листинг программы
- class MainForm : Form
- {
- private Chart _chart;
- public MainForm()
- {
- _chart = new Chart { Parent = this, Dock = DockStyle.Fill };
- var values = new List<float>();
- var random = new Random();
- for (int i = 0; i < 100000; i++)
- values.Add(NextRandom(random, Distribution, 0, 8, 0.25f));
- var x = Enumerable.Range(0, 1000).Select(i => 8f / 1000 * i).ToList();
- var y = x.Select(e => values.Count(v => v >= e && v <= e + 8f / 1000)).ToList();
- var name = "res";
- _chart.ChartAreas.Add(name);
- _chart.Series.Add(name);
- _chart.Series[name].ChartType = SeriesChartType.Spline;
- _chart.Series[name].Color = Color.Red;
- _chart.Series[name].Points.DataBindXY(x, y);
- AddSeries("prob", Color.Blue, Distribution, 0, 8);
- }
- private void AddSeries(string name, Color color, Func<float, float> f, float left, float right, float step = 1e-2f)
- {
- _chart.ChartAreas.Add(name);
- _chart.Series.Add(name);
- _chart.Series[name].ChartType = SeriesChartType.Spline;
- _chart.Series[name].Color = color;
- var x = new List<float>();
- var y = new List<float>();
- for (;left <= right; left += step)
- {
- x.Add(left);
- y.Add(f(left));
- }
- _chart.Series[name].Points.DataBindXY(x, y);
- }
- private float Distribution(float value)
- {
- value %= 2;
- return value * 0.25f / 2;
- }
- private float NextRandom(Random random, Func<float, float> distribution, float min, float max, float maxDistribution)
- {
- while (true)
- {
- var k1 = (float)random.NextDouble();
- var k2 = (float)random.NextDouble();
- var derivedK1 = min + (max - min) * k1;
- var derivedK2 = maxDistribution * k2;
- if (derivedK2 <= distribution(derivedK1))
- return derivedK1;
- }
- }
- }
- void Main()
- {
- Application.Run(new MainForm());
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д