2014-07-23 16 views
6

Tôi đã thử std::mt19937 gen(2007) bằng C++ và RandStream.create('mt19937ar','seed',2007) trong Matlab. Tôi cũng đã thử các cấu trúc khác nhau, nhưng tôi không thể tìm thấy một cấu trúc hạt giống cụ thể để tìm các số ngẫu nhiên giống nhau giữa Matlab và C++. Làm thế nào tôi có thể xử lý này?Có giống nào cho Matlab Random và C++ Random không?

+0

Bạn sử dụng hàm nào trong MATLAB để nhận số ngẫu nhiên? –

+0

Tôi đang sử dụng các chức năng 'gamrnd' và' randn' trong MATLAB. – taha

Trả lời

3

Bạn muốn trình tạo ngẫu nhiên xác định và hoạt động theo cùng một cách trong hai triển khai khác nhau.

Không có đảm bảo rằng Matlab và C++ :: triển khai std sẽ tạo ra kết quả tương tự. Mặc dù nó sẽ là hợp lý để nghĩ rằng họ nên - nó là cùng một thuật toán sau khi tất cả. Theo Wikipedia có những hương vị cho việc triển khai. Đáng chú ý nhất là sự khác biệt giữa 32 và 64 bit thực hiện mà tạo ra kết quả khác nhau.

Để khắc phục trở ngại này, hãy tạo các số trong một công cụ và sau đó sử dụng cùng một trình tự trong một công cụ khác. Hoặc sử dụng thuật toán của riêng bạn - một số ý tưởng here.

1

Sự khác biệt (rất có thể) bắt nguồn từ việc sử dụng các thống nhất phân phối giả ngẫu nhiên số trong C++, trong khi MATLAB mã sử dụng thường phân phối giả ngẫu nhiên số. Hãy thử rand/randi thay vì randn trong mã MATLAB (tức là các số nguyên được phân bổ không đúng định dạng thay vì đôi được phân phối thông thường).

Thông tin thêm về phía MATLAB của câu chuyện: http://www.mathworks.com/help/matlab/random-number-generation.html

Các vấn đề liên quan