Генерация непрерывной случайной величины - 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()); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д