首先,你需要使用leap,skip和scramble屬性初始化haltonset
。 您可以查看文檔,但容易說明如下:
- 爭奪 - 用於洗牌點
- 跳過 - 有助於從集合排除點的範圍
- 閏秒 - 是從當前選定點跳到下一個點的大小。中間的點被忽略。
現在你可以建立一個haltonset
對象:
p = haltonset(2,'Skip',1e2,'Leap',1e1);
p = scramble(p,'RR2');
這使得通過跳過第100號和跳躍超過10個號碼設置2D哈爾頓數。爭奪方法是在第二行應用的'PR2'。你可以看到,會產生許多問題:
p =
Halton point set in 2 dimensions (818836295885536 points)
Properties:
Skip : 100
Leap : 10
ScrambleMethod : RR2
當你有你的haltonset
對象,對,你可以通過只選擇他們訪問值:
x = p(1:10,:)
聲明:所以 ,你需要先創建對象然後使用生成的點。要獲得不同的結果,您可以使用函數的Leap和Scramble屬性。你可以做的另一件事是使用統一的分佈,如randi
每次從生成的點中選擇數字。這確保您每次訪問數據集的統一隨機部分。例如,您可以生成隨機索引向量(本例中爲4點)。然後使用這些來從halton
點中選擇點。
>> idx = randi(size(p,1),1,4)
idx =
1.0e+14 *
3.1243 6.2683 6.5114 1.5302
>> p(idx,:)
ans =
0.5723 0.2129
0.8918 0.6338
0.9650 0.1549
0.8020 0.3532
來源
2015-12-12 10:19:59
NKN
作爲第一步,檢查出的文檔上['rng'](http://se.mathworks.com/幫助/ MATLAB/REF/rng.html)。 – mikkola
這是在「可怕的黑客,可能會導致未來可能遇到的問題」類別,但如果copularnd調用mvnrnd,我認爲您可以在本地目錄中創建自己的mvnrnd函數,並且如果您從該目錄執行copularnd, mvnrnd函數將被調用(而不是Matlab內置函數)... –
是的@MatthewGunn。我正在思考這些問題。注意... qrandstream和qrand/rand組合可以解決問題而不會導致其他問題。我將在今天進行測試(一旦完成了其他工作,我必須完成)。看到我以前的評論。 –