Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 106
Завершенные тесты: 1
#1

Генерация непрерывной случайной величины

07.03.2017, 17:38. Просмотров 853. Ответов 2
Метки нет (Все метки)

Нужно сгенерировать методом фон Неймана(методом исключений) непрерывную случайную величину с плотностью как на прикрепленном фото. Нужно сделать на формах. Буду рад любой помощи, почитал литературу и ничего не понял... Надеюсь на вас!
0
Миниатюры
Генерация непрерывной случайной величины  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2017, 17:38
Ответы с готовыми решениями:

Законы распределения случайной величины
Здравствуйте. Возник вопрос: есть ли стандартные методы генерации нормального,...

Генерация случайной буквы от A до я
Как получить случайную букву от A до z?когда делаю такой код:...

Генерация случайной последовательности
Ребят, как сделать генерацию случайной последовательности пароля, учитывая, что...

Как создать ступенчатый массив случайной величины
как создать ступенчатый массив случайной величины?

Реализовать алгоритм генерации случайной величины распределенной по нормальному закону Гаусса
Здравствуйте. Хотелось бы узнать как можно на visual c# реализовать алгоритм...

2
TopLayer
767 / 568 / 300
Регистрация: 23.10.2016
Сообщений: 1,343
Завершенные тесты: 7
07.03.2017, 18:35 #2
Лучший ответ Сообщение было отмечено Dialkord228 как решение

Решение

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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());
}
1
Миниатюры
Генерация непрерывной случайной величины  
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 106
Завершенные тесты: 1
07.03.2017, 20:21  [ТС] #3
TopLayer, а это WindowsForms или WPF?

Добавлено через 22 минуты
TopLayer, все, разобрался, спасибо! А скажите еще, а можно ли сделать так чтобы когда я запускаю программу у меня выводился список этих сгенерированых случайных чисел в каком-то листбоксе, и как-то засунуть гистограмму в кнопку, чтобы при открытии программы показывало эти числа, а как на кновку нажму, то в дочерней форме гистограмма вылезет? Пойду пока-что сам попробую это реализовать, но буду благодарен, если что-нибудь посоветуете!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2017, 20:21

Распределение (не совсем)случайной величины
Здравствуйте. Возникла идея визуального отображение функции, которая...

Система непрерывной интеграции CI
Доброго времени суток! Уважаемые форумчане, помогите разобраться с CI! На...

Плотность непрерывной случайной величины
Здравствуйте!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru