2014-06-25 103 views
1

我已經嘗試過谷歌這個問題,並在這裏的問題和答案中搜索,但我發現沒有definitve回答我的問題,所以我正在做一個新的。希望它不會太麻煩!使用MATLAB函數在Simulink中生成隨機數

我在Simulink中創建一個模擬,其中我有一個「MATLAB函數」 - 應該從另一個來源(我們可以認爲這個來源是一個「常量」 - 塊)輸入的塊,然後應用一個隨機數這是從輸入上的MATLAB功能塊生成的。

我的問題是每次運行Simulink仿真時都會得到完全相同的隨機數。我想知道是否有人能幫我解決我的問題?

下面是代碼(不是全部,但它的所有的事項):

% function MC_output = randomizer(Stat_input) 
%#codegen minrand = 0.1; 
    maxrand = 1.9; 
    points = 10;  
    rand_numbers = Stat_input*minrand + rand(1, points).*(maxrand-minrand); 
    MC_output = mean(rand_numbers); 
end 

我讀過有關此解決方案:

coder.extrinsic('rng'); 
rng('shuffle'); 

我用它不同的方式,但沒有成功。一些幫助將大大appriciated!哦,順便說一句,我使用MATLAB R2012a。

由於提前,尼克拉斯

回答

5

蘭特從MATLAB FCN座被稱爲是不是會從MATLAB調用相同蘭特,因此爲什麼rng('shuffle');對Simulink中的隨機數產生沒有任何影響的原因。

你可以強制MATLAB FCN塊通過執行等同於使用MATLAB的蘭特功能,

function y = fcn 
%#codegen 
coder.extrinsic('rand','rng'); 
y = 0; 

persistent atTime0 
if isempty(atTime0) 
    rng('shuffle'); 
    atTime0 = false; 
end 

y = rand; 

或者你可以使用老式方法,用於重置隨機數的種子

function y = fcn(seed) 
%#codegen 

persistent atTime0 
if isempty(atTime0) 
    rand('seed',seed); 
    atTime0 = false; 
end 

y = rand; 

但更簡單的方法是將隨機數/向量作爲由Uniform Random Number Generator塊生成的輸入,其種子參數隨機設置(使用MATLAB的rand函數)。

+0

非常感謝!這正是我正在尋找的,它完美的工作! :) – Zantonius