當前位置:編程學習大全網 - 源碼下載 - Octmatlab源代碼

Octmatlab源代碼

function [R,ind] = randinterval(N,區間,權重)

% RANDINTERVAL -多個區間內的隨機數

%

% R = RANDINTERVAL(N,INTERVALS)返回壹個N乘N的隨機數矩陣R

%取自多個時間間隔內的均勻分布。

%

%類似RAND,RANDINTERVAL([N M],..)返回壹個N乘M的矩陣,並且

% RANDINTERVAL([N...],..)返回壹個N乘M乘P乘-..數組。註意

%表示類似於rand(N,M,P,..)不可用。

%

% INTERVALS是壹個N乘2的矩陣,其中的行指定從

%其中的數字是畫出來的。每個區間都有壹個下界

%(在間隔的第壹列)和上限(的第二列

%區間)。如果下限等於上限,沒有數字會

從該間隔中抽取%。上限不能小於

%下限。

%如果間隔是向量(K乘1或1乘K),則間隔為

%形成為(區間(1),區間(2)),(區間(2),區間(3)),

% ...,(區間(K-1),區間(K))。在這種情況下,數量

%間隔N比元素K的數量小1,即N=K-1。

%區間的相對長度決定了

從該間隔中抽取%數。例如,當間隔為[1

% 2 ;10 12],從第壹個數字中抽取壹個數字的概率

%區間(1,2)是1取3,vs第二區間(10,12)是2取3。

%

% R = RANDINTERVAL(N,區間,權重)允許對每個區間進行加權

特別是%區間。權重是N個數字的向量。這些數字

%指定,結合相應區間的長度,

%每個區間的相對可能性(即權重)。更大的

W(k)的%值增加了從

第% k個間隔。

%例如,當間隔為[11 12;20 21]而權重是[3 1],則

從第壹個區間抽取號碼的概率是3/10

% 4,vs 1第二間隔4。請註意,兩個間隔都有

%相同的長度。當間隔不具有相同的長度時

從長度為L(k)的區間k中抽取壹個數的可能性百分比

%和重量W(k)由下式給出:

% p(k) = (W(k) x L(k)) / sum(W(i)。/ L(i)),i=1:N

%

% [R,IND] =隨機區間(..)還返回壹個索引數組IND,它具有

%與r的大小相同。IND包含1和之間的數字

%間隔。長度和/或權重為零的區間不會

%存在於IND中。

%

%備註:

% -允許重疊間隔,但可能會產生難以調試的問題

%結果。在這種情況下,會發出警告。另壹方面,這樣的

%重疊間隔可以(ab-)用於從特定的

%分布。

% -對於單個區間(A B ),該函數相當於

% A + (B-A) *蘭特(N)

%

%示例:

% %基本使用,無重量

% R = randinterval([1,10000],[1 3;5 7 ;10 15 ;20 26]) ;

% %返回1和3之間的10000個數字的行向量,介於

% % 5和7,介於10和15之間,或者介於20和26之間。大約

% % 2/5的數字介於20和26之間:

% N = histc(R,[-Inf 1 3 5 7 10 15 20 26 Inf]),N = N ./ sum(N),bar(N)

%

% %重量

% [R,n] = randinterval([10,100],[1 2;100 200 ;-2 -1 ;12 12], [1 0 2 3]) ;

% %返回壹個10乘100的矩陣,其值在區間(-2,-1)內

% %或(1,2)。大約有666個數字是負數:

% sum(R(:)& lt;0)、sum(n(:)==3)

% %區間(100,200)的權重為零,區間

% % (12,12)長度為零;這些都是“忽略”的。

% histc(n(:),1:4)

%

% %帶權重的相鄰間隔:

% [R,n] = randinterval([10000,1],[-2:2],[1 4 2 8]);

% bar(-2:2,histc(R,-2:2)/100,' histc ');ylabel('百分比')

%

%參見RAND,RANDN,RANDPERM

% RANDSAMPLE(統計工具箱)

文件交換

%適用於Matlab R13及更高版本

%版本1.0(2008年10月)

% (c)何塞·範德爾吉斯特

%電子郵件:jos@jasen.nl

%歷史記錄

%創建時間:2008年10月

修訂百分比:-

%參數檢查

error(nargchk(2,3,nargin));

if ndims(Interval)~ = 2 | | ~ is numeric(Interval)| | numel(Interval)& lt;2,

錯誤([mfilename]:interval wrongsize '],...

間隔應該是N乘2(或N乘1,N > 0。1)數值矩陣。)

結束

如果min(大小(區間))== 1,

% Interval是壹個向量。生成邊界列向量

lower bound = shape(Interval(1:end-1),[],1);

upper bound = shape(Interval(2:end),[],1);

elseif size(Interval,2)~= 2

錯誤([mfilename]:interval wrongsize '],...

間隔應該是壹個N乘2(或N乘1)的數字矩陣。)

其他

%獲取間隔的下限和上限

LowerBound = Interval(:,1);

UpperBound = Interval(:,2);

結束

如果有(UpperBound & lt下界),

錯誤([mfilename ':NegativeInterval'],...

間隔不能小於0’);

結束

如果nargin = = 3 & amp& amp(~ is empty(Weight)| | ~ is numeric(Weight)),

如果numel(重量)~= numel(下限),

錯誤([mfilename]:WeightsWrongSize '],...

重量的數量應該與間隔的數量相匹配。) ;

結束

如果有(重量& lt0)

錯誤([mfilename]:weights negative '],...

權重不能為負。)

結束

其他

%默認情況下,所有間隔的可能性相等

重量= 1;

結束

tmp =[lower bound upper bound];

如果有(isnan(tmp(:))| isinf(tmp(:))| | any(isnan(Weight(:))| isinf(Weight(:))),

錯誤('間隔或權重不能包含nan或INF。') ;

結束

%當間隔重疊時給出警告是很好的。如果他們這樣做了

間隔的%下限小於前壹個間隔的上限

%間隔,當間隔按排序順序排列時

tmp = sort rows(tmp);

如果有的話(tmp(2:end,1)& lt;tmp(1:end-1,2)),

警告([mfilename]:OverlappingIntervals '],...

音程重疊。) ;

結束

%訣竅是把所有的音程放在壹起。間隔為

%較大的權重應該會變大,所以更有可能。整個

% range跨越0和IntervalEdges之間的數字(結束):

IntervalSize =(upper bound-lower bound);

interval edges =[0;累計和(權重(:)。* IntervalSize(:))】。;

如果IntervalEdges(end) == 0,

%所有間隔的長度和/或權重都為零,因此

%無事可做!

錯誤([mfilename ':AllZero'],...

所有區間的長度和/或權重都為零。) ;

結束

嘗試

%讓RAND捕捉大小參數中的錯誤

R =蘭特(N);% 0到1之間的隨機數

捕捉

%重新表述錯誤

ERR = lasterror

ERR.message = strrep(ERR.message,' rand ',[mfilename '(在對RAND的調用中)']);

rethrow(ERR);

結束

如果isempty(R),

%無事可做,例如當N包含0時。

ind =[];

返回

結束

%這些隨機的隨機數屬於哪個區間

[ind,ind]= histc(IntervalEdges(end)* R(:),IntervalEdges);% #好,不使用第壹個輸出

%現在將0到1之間的壹系列新隨機數映射到它們的

%各自的間隔。我們必須創造壹個新的系列,否則就不行了

%區間內的所有值都是可能的。

r(:)= lower bound(ind)+interval size(ind)。*蘭德(numel(R),1);

%也返回與R形狀相同的區間數

ind = reshape(ind,size(R));

% % #調試圖

% E = linspace(min(Interval(:)),max(Interval(:)),100);

% N2 = histc(R(:),E);

%圖;

%支線劇情(2,1,1);酒吧(東,N2,“歷史”)

%支線劇情(2,1,2);繪圖(排序(R(:),' k . ')

%%%%%%%%這是函數。存起來直接調用!

& gt& gt[k1,k2]= rand interval([1 10],[1 2;5 6],[3 1])

k1 =

5.6154 1.7919 1.9218 1.7382 5.1763 5.4057 1.9355 1.9169 5.4103 1.8936

k2 =

2 1 1 1 2 2 1 1 2 1

  • 上一篇:補碼就是在補碼後面加1。那1是怎麽加的?
  • 下一篇:立竿見影:這是莊家為驅逐獲利盤而精心制造的震倉,是進場的良機,並非出局信號
  • copyright 2024編程學習大全網