С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 07.05.2020
Сообщений: 4

Реализация нескольких генераторов случайных чисел с разными законами распределения в одном проекте

07.05.2020, 23:53. Показов 733. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, господа. В ходе написания диссертации встал вопрос об изложении части результатов работы в виде программы.
В институте проходил С++ на нем и решил писать, но было это лет 12 назад и не в том объеме в котором хотелось бы)
Что реализовано: генерация СЧ распределенных по Гауссу. Параметры распределения и величину ряда пользователь заводит в файл. В другой файл выводим исходный ряд и результат некоего абстрактного аналитического решения (для теста просто умножил на 10). Сверяем полученные данные с условием, считаем количество итераций удовлетворяющих условию. Считаем вероятность наступления этих положительных событий.
Суть проблемы на данном этапе: в приведенном коде один ГСЧ. А должно быть 3. Два по закону Гаусса и один по закону Вейбулла. По одному ГСЧ все отлично. Начинаю добавлять новые распределения и сразу ошибки о переопределении normal_distribution.

То что уже написано во многом заслуга этого форума) Буду рад помощи и разъяснениям!

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
#include <iostream>
#include <random>
#include <fstream>
 
using namespace std;
 
int main()
{
    int i;
    double mean;    double disp;    int n;//берем из файла
    const int N = 10000;    double m[N]; double r[N];//массив для СЧ
    const int r_kr = 40000; //критическое значение для условия
    
    setlocale(LC_ALL, "rus");   //для кириллицы
    ifstream fin("data_in.txt", ios_base::in); //файл входных данных, режим чтения
    ofstream fout("data_out.txt", ios_base::out, ios_base::trunc); //файл выходных данных, режим записи и очистки
 
    fin >> mean;    fin >> disp; fin >> n;
 
    random_device rd; //задание случайного числа (зерна) запускающего генератор
    mt19937 gen(rd()); //Вихрь Мерсенна
    normal_distribution <double> distribution(mean, disp);//Нормальное распределение
 
    double min = DBL_MAX, max = DBL_MIN;//Анализ данных
    for (int i = 0; i < N; i++)
    {       m[i] = distribution(gen);
                if (m[i] < min) min = m[i];
                    if (m[i] > max) max = m[i];     }
 
    for (int i = 0; i < n; i++)//Выводим данные по ряду в файл
    {       fout << m[i] << "\n";   }
    fin.close();    fout.close();//закрываем входной и выходной файлы
 
    for (int i = 0; i < n; i++)//обозначаем новый массив
    {       r[i] = 0;   }
        
    for (int i = 0; i < n; i++)//работаем с новым массивом 
    {       r[i] = m[i] * 10;   }
 
    int k; k = 0; i = 0;//переменная для счета количества операций удовлетворяющих условию 
    do
    {       if (r[i] < r_kr)
                k++;
                    i++;    }
                        while (i < n);
            cout << k << "\n";//выводим количество итераций удовлетворяющих условию
 
    for (int i = 0; i < n; i++)//цикл для вывода значений ряда удовлетворяющих условию
        {   if (r[i] < r_kr)   
                    cout << r[i] << "\n";       }   
        
    cout << k << "/" << n << "=" << k / static_cast <double> (n) << "\n";//делим количество итераций удовлетворяющих условию на 
                                                                        //общее число значений (задается пользователем в файле входных данных) 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.05.2020, 23:53
Ответы с готовыми решениями:

Схемы генераторов случайных чисел
Лаба по программированию на тему сложные методы шифрования.Все результаты должны быть записаны в файл...Так вот ...задание вообще...

Подскажите несколько генераторов случайных чисел на Си
Дали задание сравнить несколько ГСЧ, а я знаю только функцию rand(); в stdlib.h. Есть ли еще генераторы независимые друг от друга?

определения меры случайности генераторов случайных чисел
Ребят, доброго времени суток! У меня есть задание по курсовой, и там нужно написать программу. Уже 3 дня сижу ковыряю, а результата 0....

1
0 / 0 / 0
Регистрация: 07.05.2020
Сообщений: 4
09.05.2020, 19:03  [ТС]
Просмотры есть, а ответов нет. Значит интерес к теме есть) Кое-что наработал. Проблема с использованием нескольких генераторов: переопределение, множественная инициализация, то есть как я понял просто повторное присвоение переменной нового значения. исправилось тоже достаточно легко. Приведу часть кода только с генерацией СЧ.

Входной файл содержит параметры распределений и значение выборки (1000 членов). Выводится в файл в три столбика.

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
#include <iostream>
#include <random>
#include <fstream>
 
using namespace std;
 
int main()
{
    double mean_ro; double disp_ro; int n; double mean_lambda; double disp_lambda; double a; double b;//берем из файла
    const int N = 10000;
    double gauss_ro[N]; double gauss_lambda[N]; double weibull_c[N]; //double geom[g]; //переменные для рядов СЧ
    //double r[N]; //массив для результатов
 
    const int r_kr = 40000; //критическое значение для условия
 
    setlocale(LC_ALL, "rus");   //для кириллицы
    ifstream fin("data_in.txt", ios_base::in); //файл входных данных, режим чтения
    ofstream fout("data_out.txt", ios_base::out, ios_base::trunc); //файл выходных данных, режим записи и очистки
 
    fin >> n; fin >> mean_ro;   fin >> disp_ro;  fin >> mean_lambda; fin >> disp_lambda; fin >> a; fin >> b;
 
    random_device rd; //задание случайного числа (зерна) запускающего генератор
    mt19937 gen(rd()); //Вихрь Мерсенна
 
    normal_distribution <double> distribution_ro(mean_ro, disp_ro);//Нормальное распределение плотность и удельная теплоемкость?
        double min = DBL_MAX, max = DBL_MIN;//Анализ данных Гаусс Плотность
    for (int i = 0; i < N; i++)
    {
        gauss_ro[i] = distribution_ro(gen);
        if (gauss_ro[i] < min) min = gauss_ro[i];
        if (gauss_ro[i] > max) max = gauss_ro[i];
    }
 
    normal_distribution <double> distribution_lambda(mean_lambda, disp_lambda);
            for (int i = 0; i < N; i++)
    {
        gauss_lambda[i] = distribution_lambda(gen);
        if (gauss_lambda[i] < min) min = gauss_lambda[i];
        if (gauss_lambda[i] > max) max = gauss_lambda[i];
    }
 
   weibull_distribution <double> distribution_c(a, b);//Распределение Вейбулла: ФОРМА - МАСШТАБ
        for (int i = 0; i < N; i++)
    {
        weibull_c[i] = distribution_c(gen);
        if (weibull_c[i] < min) min = weibull_c[i];
        if (weibull_c[i] > max) max = weibull_c[i];
    }
 
    for (int i = 0; i < n; i++)//Выводим данные по ряду в файл
    {
        fout << gauss_ro[i] << "\t" << gauss_lambda[i] << "\t"<< weibull_c[i] << "\n";
    }
 
    fin.close();    fout.close();//закрываем входной и выходной файлы
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.05.2020, 19:03
Помогаю со студенческими работами здесь

Реализация QueryFullProcessImageNameW и GetModuleFileNameEx в одном проекте
Здравствуйте ув. форумчане! Так сегодняшняя проблема в функциях которые позволяют получить пути до запущенных процессов... 1)...

Поддержка нескольких версий API в одном проекте
Такая ситуация: есть два сервера с разными REST Api - рабочий и тестовый. К проекту в Xcode прикручен github. Как организовать проект,...

Построение нескольких графиков на одном с разными x осями
Здравствуйте, уважаемые программисты. Очень нуждаюсь в вашей помощи. Необходимо построить на одном графике графики исходной,...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru