如何在MATLAB中生成一組在規定範圍符合指定分佈的隨機數

2021-03-22 03:27:02 字數 4494 閱讀 5247

1樓:匿名使用者

首先要確定需要的是什麼分佈的隨機數,也就是要知道隨機數要符合的概率密度分佈函式f(x)的定義,然後求其積分函式f(x),然後求f(x)的反函式

得到反函式的定義之後,利用函式rand產生一系列(0,1)之間的隨機數代入反函式中計算得到的結果數列就符合原來f(x)的分佈。

這種方法適用於,能夠容易得到概率密度分佈函式的積分函式的反函式的解析表示式的情況。

下面以指數分佈為例給出**和驗證影象

指數分佈的概率密度函式形式為

f(x)=   λexp(-λx)  (x>0)

0               (x<=0)

其中λ > 0是分佈的一個引數

指數分佈的累積分佈函式

f(x)= 1-exp(-λx)  (x>0)

=0                  (x<=0)

指數分佈的累積分佈函式的反函式是

g(y)= -log(1-y)/λ   (0

使用直接抽取的方法 先產生 [0,1]間的隨機數列

利用累積分佈函式的反函式,得到的結果就是符合指數分佈的序列

n=10000; %產生隨機數的個數

lambda=3; %引數λ

y=rand(1,n);  %生成n個0,1間均勻分佈隨機數

x=-log(1-y)/lambda; %生成指數分佈隨機數

[n,xout]=hist(x,30);    %分割槽間統計隨機數出現概率

nn=n/n/mean(diff(xout));

bar(xout,nn,1);hold on;  %畫圖驗證隨機數是否符合概率密度函式

plot([0 xout],lambda*exp(-lambda*([0 xout])),'r');hold off;

xlabel('x');

ylabel('p(x)');

matlab中如何輸出一個按指定分佈的隨機陣列

2樓:匿名使用者

matlab中有一個chi2rnd 函式(分佈隨機數發生器)樓主可以試試。其實樓主的方法已經做好了,那個做法很好,樓主高見啊。另外matlab有rand 產生均勻分佈隨機數,randn 產生正態分佈隨機數,poissrnd 泊松分佈隨機數發生器,normrnd 正態隨機數發生器,sprandsym 稀疏隨機對稱陣等函式。

3樓:匿名使用者

matlab,學得很少。遺傳演算法,也還沒用過。與lz等待答案

matlab 如何生成指定分佈的隨機數? 50

4樓:白肚河蟹不讓說

抄別的一個函式給你吧:

****************************************=

function y=dis_rand(x,p,n)

%dis_rand 產生離散分佈隨機數

% x:可能取值

% p:取值概率

% n:擬生成隨機數的數目

cp=cumsum(p);

y=zeros(1,n);

for i=1:n

y(i)=x(sum(cp<=rand(1))+1);

end演算法說明:利用matlab中的rand函式獲取區間[0,1]上均勻分佈的隨機數,根據希望的分佈律把[0,1]區間分段,各段的長度依次為隨機數取各個可能值的概率。當那個均勻分佈的隨機數落在其中第i個小段上時,就把第i個可能取值輸出。

****************************************=

你的問題這樣呼叫:

y=dis_rand([0 0.5 1],[1/3 1/3 1/3],100)

即按照你要的概率從0,0.5,1三個數字中產生100個隨機數。但我看了下因為rand本身在樣本數少的時候就不是很準確,這樣100個樣本下,1/3概率還是有明顯偏差的。

不過所有概率方面的東西要在小樣本下都很難」準確「了。

5樓:牧樂志秋慕

均勻分佈u(a,b):

產生m*n階[a,b]均勻分佈u(a,b)的隨機數矩陣:unifrnd

(a,b,m,

n)產生一個[a,b]均勻分佈的隨機數:unifrnd(a,b)

0-1分佈u(0,1)

產生m*n階[0,1]均勻分佈的隨機數矩陣:rand(m,n)

產生一個[0,1]均勻分佈的隨機數:rand二類分佈binornd(n,p,mm,nn)如binornd(10,0.5,mm,nn)即產生mm*nn均值為n*p的矩陣

binornd(n,p)則產生一個。而binornd(10,0.5,mm)則產生mm*mm的方陣,軍陣為n*p。

產生m*n階離散均勻分佈的隨機數矩陣:

unidrnd(n,mm,nn)

產生一個數值在1-n區間的mm*nn矩陣

產生mm

nn階期望值為

的指數分佈的隨機數矩陣:

exprnd

(,mm,nn)

6樓:盛昱扈語兒

用概率密度

擬合工具箱,命令視窗輸入:dfittool

檢視原帖》

想用matlab生成指定概率分佈的隨機數,怎麼生成

7樓:硪丨曖戀

均勻分佈u(a,b):

產生m*n階[a,b]均勻分佈u(a,b)的隨機數矩陣:unifrnd (a,b,m, n)

產生一個[a,b]均勻分佈的隨機數:unifrnd (a,b)

0-1分佈u(0,1)

產生m*n階[0,1]均勻分佈的隨機數矩陣:rand (m, n)

產生一個[0,1]均勻分佈的隨機數:rand

二類分佈binornd(n,p,mm,nn) 如binornd(10,0.5,mm,nn)

即產生mm*nn均值為n*p的矩陣

binornd(n,p)則產生一個。而binornd(10,0.5,mm)則產生mm*mm的方陣,軍陣為n*p。

產生m*n階離散均勻分佈的隨機數矩陣:

unidrnd(n,mm,nn) 產生一個數值在1-n區間的mm*nn矩陣

產生mm nn階期望值為 的指數分佈的隨機數矩陣:

exprnd ( ,mm, nn)

matlab如何隨機生成一組範圍在0到1還服從正太分佈的數?

8樓:匿名使用者

matlab函式randn:產生正態分佈

的隨機數或矩陣的函式

randn

產生均值為0,方差 σ^2 = 1,標準差σ = 1的正態分佈的隨機數或矩陣的函式。

用法:y = randn(n)

返回一個n*n的隨機項的矩陣。如果n不是個數量,將返回錯誤資訊。

y = randn(m,n) 或 y = randn([m n])返回一個m*n的隨機項矩陣。

y = randn(m,n,p,...) 或 y = randn([m n p...])

產生隨機陣列。

如何在c語言中生成一定範圍內的隨機數?

9樓:蘋果

srand((int)time(null));設定隨機數種子rand()%100;產生0-99的隨機數。

高階點的,假如要產生16-59之間的數,你可以這樣寫:rand()%44+16(這裡44由59-16+1得到)。其他情況如法炮製!

c語言中用rand()函式產生20-90的隨機整數20-90共有71個數字,所以是rand()%71+20 ;

用rand()生成-20-20的隨機數

-20-20共有41個數字,所以是rand()%41-20;

需要注意的是,在執行以上**之前最好設定一下:

srand(time(null));//用系統當前時間設定rand()隨機序列種子,保證每次執行隨機序列不一樣

10樓:喬澈旁季

用rand函式吧久用c語言太記貌似int

a=rand()%

x(x即範圍)偽隨機數

#include

srand(time(null));使用前用條語句初始化使用int

a=rand()

/rand_max*n;

真隨機數

matlab在一定範圍內生成隨機數

11樓:匿名使用者

rand([m n])產生 m行,n列(0,1)範圍內均勻分佈的偽隨機數

如果要求在區間(a,b)內產生均勻分佈的隨機數

r = a + (b-a).*rand([m n]));

如何在matlab中生成一組在規定範圍符合指定分佈的隨機數

12樓:匿名使用者

1,rand 生成均勻分佈的偽隨機數。分佈在(0~1)之間

2,randn 生成標準正態分佈的偽隨機數(均值為0,方差為1)

3, randi 生成均勻分佈的偽隨機整數

如何在ecel中求一組資料方差,如何在excel中求一組資料方差

假設你的資料再a1到a10,方差為 devsq a1 a10 假設資料在a1 a10 varp a1 a10 怎樣用excel算一組資料的方差 varp number1,number2,如何利用excel求一組資料的中位數 眾數 極差 方差 資料區域為a1 a100 中位數 median a1 a1...

很多資料怎麼在matlab中生成矩陣

matlab中生成所有元素均為bai1的矩du陣的方法為 使用內建的ones 函式 zhi。下面給出具體的示例dao 1 在matlab的命內令視窗輸入 ones 3 表容示生成3行3列且所有元素均為1的矩陣 輸出結果如下 向左轉 向右轉 2 在matlab的命令視窗輸入 ones 2,4 表示生成...

EXCEL裡如何生成符合確定平均數的一組隨機數

生成符合確定平均數的隨機數的方法 單元格中輸入 rand 回車後單元格即返回了一個隨機數字。rand 函式返回的隨機數字的範圍是大於0小於1。因此,也可以用它做基礎來生成給定範圍內的隨機數字。生成制定範圍的隨機數方法是這樣的,假設給定數字範圍最小是a,最大是b,公式是 a rand b a roun...