2016-04-02 2 views
1

В моей C++ МПИ проект я создал функцию:C++, МПД: самый простой способ создания случайных данных

RandomDataInitialization(pMatrix, pVector, Size); 

и я пытаюсь сформировать значения для матрицы А и вектора Ь в функции RandomDataInitialization. Поэтому я хочу спросить, может, кто-то знает самый простой и эффективный способ сделать это?

+0

помочь мне здесь. как данные лежат в матричном классе? –

ответ

1

В целом.

Способ C++ стандарт случайных функций работы заключается в следующем:

  1. создать псевдослучайного двигатель.
  2. инициализирует его со случайным семени (хороший источник этого, являющегося станд :: random_device)
  3. создать объект распределения (например, uniform_int_distribution или uniform_real_distribution)
  4. частот, генерируемых псевдослучайных чисел (генерируемую двигателем) через объект распределения, чтобы дать случайные числа.

Например, чтобы рандомизация массива или вектора (вероятный механизм для хранения вашей матрицы):

#include <random> 
#include <array> 
#include <algorithm> 


int main() 
{ 
    // a 3x3 matrix of doubles 
    std::array<double, 9> matrix_data; 

    // make an instance of a random device to generate one real random number 
    // this is "slow" so we do it as little as possible. 
    std::random_device rd {}; 

    // create the random engine and seed it from the random device 
    auto engine = std::default_random_engine(rd()); 

    // create a uniform distribution generator which gives values in the range 
    // 0.0 to 1.0 
    auto distribution = std::uniform_real_distribution<double>(0, 1.0); 

    // generate the random data by passing random numbers generated by the 
    // engine through the distribution object. 
    std::generate(std::begin(matrix_data), std::end(matrix_data), 
        [&distribution, &engine] 
        { 
         return distribution(engine); 
        }); 
} 
+0

Этот ответ не учитывает, что D1'so использует MPI. Если ему нужна матрица, распределенная по нескольким процессам, то имеет смысл засеять двигатель с помощью идентификатора MPI. Тогда ни один из процессов не будет иметь одно и то же случайное поле. – Chiel

Смежные вопросы