Могу ли я очистить генератор default_random_engine после каждого использования? - PullRequest
0 голосов
/ 11 апреля 2020

1) директивы препроцессора

#include <iostream>
#include <random>
#include <math.h>

2) Создание функции для генерации случайного значения в заданном диапазоне a -> b

double RandomRealGenerator(double a, double b)
{
    std::default_random_engine generator;
    std::uniform_real_distribution<double> realDistribution(a, b);

    return realDistribution(generator);
}

3) Функция для создания матрица со случайными значениями, сгенерированными выше как элементы

double arrays()
{
    // Declare a 3x3 matrix
    double MatrixA[3][3];

    // Give random values to each element in MatrixA
    MatrixA[0][0] = RandomRealGenerator(0, 1);  // element 1,1
    MatrixA[0][1] = RandomRealGenerator(0, 1);  // element 1,2
    MatrixA[0][2] = RandomRealGenerator(0, 1);  // element 1,3
    MatrixA[1][0] = RandomRealGenerator(0, 1);  // element 2,1
    MatrixA[1][1] = RandomRealGenerator(0, 1);  // element 2,2
    MatrixA[1][2] = RandomRealGenerator(0, 1);  // element 2,3
    MatrixA[2][0] = RandomRealGenerator(0, 1);  // element 3,1
    MatrixA[2][1] = RandomRealGenerator(0, 1);  // element 3,2
    MatrixA[2][2] = RandomRealGenerator(0, 1);  // element 3,3

    std::cout << MatrixA[0][0] << "  " << MatrixA[0][1] << "  " << MatrixA[0][2] << std::endl;
    std::cout << MatrixA[1][0] << "  " << MatrixA[1][1] << "  " << MatrixA[1][2] << std::endl;
    std::cout << MatrixA[2][0] << "  " << MatrixA[2][1] << "  " << MatrixA[2][2] << std::endl;
    std::cout << "\nIt's still not generating random doubles\n";
}

4) Я продолжаю получать матрицу, где все элементы одинаковы

0.0850324  0.0850324  0.0850324
0.0850324  0.0850324  0.0850324
0.0850324  0.0850324  0.0850324

5) Я не специальность информатика, и я обычно работаю в Python, поэтому, если есть что-то простое, я сильно упускаю из виду, я был бы признателен, если бы кто-то, по крайней мере, указал мне правильное направление. Спасибо.

ОБНОВЛЕНИЕ

6) это сработало, но я все же хотел бы иметь быструю функцию, которую я могу использовать для генерации случайного числа между любыми диапазонами, которые я бы хотел в данный момент. Я использую случайные значения в различных диапазонах, чтобы исследовать решения для вычислений в данном математическом пространстве. Я делаю это для сбора данных о допустимых значениях для свободных параметров в определенных строковых моделях. В очередной раз благодарим за помощь.

// Declare a 3x3 matrix
double MatrixA[3][3];
std::default_random_engine generator;
std::uniform_real_distribution<double> realDistribution(0, 1);

// Give random values to each element in MatrixA
MatrixA[0][0] = realDistribution(generator);  // element 1,1
MatrixA[0][1] = realDistribution(generator);  // element 1,2
MatrixA[0][2] = realDistribution(generator);  // element 1,3
MatrixA[1][0] = realDistribution(generator);  // element 2,1
MatrixA[1][1] = realDistribution(generator);  // element 2,2
MatrixA[1][2] = realDistribution(generator);  // element 2,3
MatrixA[2][0] = realDistribution(generator);  // element 3,1
MatrixA[2][1] = realDistribution(generator);  // element 3,2
MatrixA[2][2] = realDistribution(generator);  // element 3,3

1 Ответ

1 голос
/ 11 апреля 2020

std::default_random_engine определяется реализацией. В зависимости от стандартной библиотеки C ++:

  • default_random_engine может инициировать двигатель с фиксированным значением при создании или не может.
  • default_random_engine может производить ту же последовательность числа, если начальное число не задано, или оно может отсутствовать.
  • default_random_engine может быть определено как один из стандартных механизмов C ++ или не может быть.

Для достижения чего Вы хотите (генерировать случайные действительные числа в диапазоне), передать engine , а не распределение, в функцию, предназначенную для этой цели (например, RealGenerator(double, double, default_random_engine&)).

...