При попытке передать через некоторый код Matlab в F #, я стараюсь, чтобы переводы были точными. На данный момент есть случаи, когда я не совсем уверен, есть ли ошибки. Так как большая часть кода является статистической по своей природе, было бы удобно иметь возможность генерировать генераторы F # в том же состоянии, что и Matlab. Это также поможет с триангуляцией точных уравнений, которые являются неправильными. Хотелось спросить, прежде чем я начал сбрасывать случайные числа Matlab в csv-файлы и решать эту проблему вручную.Семенной F # случайный генератор в том же состоянии, что и Matlab
ответ
Это не окончательный ответ, поскольку, вероятно, реализация собственного генератора случайных чисел в Matlab и F # должна давать наиболее надежные результаты. Вы также должны столкнуться с проблемами безопасности потоков в .NET и формами матриц в Matlab. Например
В MATLAB:
rng(200,'twister')
rand(1,5)
ANS =
0.9476 0.2265 0.5944 0.4283 0.7641
В F #:
open MathNet.Numerics.Random
let random1b = MersenneTwister(200)
random1b.NextDoubles(5)
вал это: всплывают [] = [| 0,9476 322592; 0,4941436297; 0,2265474238; 0,1485590497; 0,5944201448 |]
1-й, 3-й и 5-й случайные числа соответствуют.
Теперь возможно, что вы можете воспроизвести это как-то, играя с различными версиями и/или размерами F # и Matlab.
Я ничего не знаю о F #, но похоже, что вы можете хранить вывод 'random1b.NextDoubles' как' float'. Может быть, поэтому подходит только любое другое значение? – horchler
@horchler Я понимаю, почему это выглядит запутанным. На самом деле это компилятор F #, выводящий тип 'float array'. Что является правильным, поскольку [float - это псевдоним типа для двоичного кода в этом случае] (https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/primitive-types-%5Bfsharp%5D), представляющий 64-битное плавающее номера точек. Я просто могу догадаться, что разница в том, как последовательность случайных чисел генерируется в Matlab и .NET. – s952163
Это не просто вопрос о посеве - это алгоритмы одинаковые? –
Я бы подумал, что можно выбрать между основными, нет? Мерсин-твистер находится за случайным потоком по умолчанию в Matlab. Я был бы удивлен, если бы не было выбора в F #. –
Я не думаю, что это гарантировано - я считаю, что даже для twers Mersenne есть параметры, которые вы можете настроить. Лучше всего просто прочитать случайные числа из файла. –