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

2021-03-05 09:13:45 字數 5334 閱讀 4725

1樓:白肚河蟹不讓說

抄別的一個函式給你吧:

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

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概率還是有明顯偏差的。

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

2樓:牧樂志秋慕

均勻分佈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)

3樓:盛昱扈語兒

用概率密度

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

檢視原帖》

如何matlab取正態分佈隨機數

4樓:子衿悠你心

運用normrnd函式。

1. r=normrnd(mu,sigma):生成服從正態分佈(mu引數代表均值,sigma引數代表標準差)的隨機數。

輸入的向量或矩陣mu和sigma必須形式相同,輸出r也和它們形式相同。標量輸入將被擴充套件成和其它輸入具有相同維數的矩陣。

2. r=normrnd(mu,sigma,m,n): 生成m×n形式的正態分佈的隨機數矩陣。

例項:生成均值為0,標準差為1的2*2正態分佈隨機矩陣。

拓展說明:

matlab中還有個函式randn,可以產生均值為0,方差σ^2 = 1,標準差σ = 1的正態分佈的隨機數或矩陣。

y = randn(n)返回一個n*n的隨機項的矩陣;

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

5樓:匿名使用者

randn 標準正態分佈

如果你想變成你的需要的

均值和方差的話:

a+b*randn

均值是a,標準差是b。

如果你想產生很多,比如一個1000*1的向量,那麼在randn後邊加括號,寫上尺寸就行了

randn([1000,1]);

6樓:匿名使用者

使用randn或者normpdf

randn 產生標準正態分佈 轉成需要的非正態分佈: r = μ + δ*randn(m,n);

normpdf 產生正態分佈normpdf(x,μ,δ) x為範圍

想用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中生成一組在規定範圍符合指定分佈的隨機數

8樓:匿名使用者

首先要確定需要的是什麼分佈的隨機數,也就是要知道隨機數要符合的概率密度分佈函式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怎樣產生按某概率函式分佈的隨機數

9樓:休閒居大偉

對於你的問題,如果 y 是m*n的服從0~1均勻分佈的隨機矩陣: y = rand(m,n) 用統計工具箱, y = unifrnd(0,1,m,n)

10樓:跳出桎梏

matlab統計工具箱中提供了slicesample函式,用來生成任意指定分佈隨機數

rand=slecesample(initial,nasample,『pdf』,pdffun)

initial:指定一個初始值

nasample:產生隨機數的個數

『pdf』:概率分佈函式

pdffun: 概率分佈函式的控制代碼

如何用matlab生成服從t分佈的隨機數

11樓:好程式設計師

這是引數為 2, theta/2 的伽馬分佈。可以用:

matlab 怎麼產生01分佈隨機數

12樓:紫色學習

在matlab 中產生0-1上均勻分佈的隨機數方法如下:

方法1、對於問題,如果 y 是m*n的服從0~1均勻分佈的隨機矩陣:

y = rand(m,n);

方法2、用統計工具箱,y = unifrnd(0,1,m,n).

另外,提供常用的函式分佈供參考:

1、 均勻分佈u(a,b)

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

2、0-1分佈u(0,1)

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

3、二類分佈binornd(n,p,mm,nn),即產生mm*nn均值為n*p的矩陣

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

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

5、產生mm nn階期望值為 的指數分佈的隨機數矩陣:exprnd ( ,mm, nn).

13樓:佔有≠擁有

sign(fix(rand/0.3))

rand取0-1區間的隨機數

fix(rand/0.3) 則取到0-0.3區間時=0,取到0.3-1區間時≥1,概率比為3:7

sign(fix(rand/0.3))將非零數取1;即rand取在0.3-1區間時總式=1

取在0-0.3區間時總式=0

樓上的變成7:3了

14樓:

1-fix(rand/0.7)

一般的fix(rand+p)

p為取1的概率

用內建函式不就可以了

15樓:手機使用者

**用這麼費事。最好理解、也很通用的是

floor(rand+0.7)

也就是吧0.7~1.7之間的均勻分佈向下取整到0或者1,0.7就是1的概率

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

16樓:匿名使用者

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

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

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

如何用matlab生成這樣的陣列 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 6

其實你bai這個問題,du用程式設計是很簡單的。zhi但是如果單用daomatlab函式實現,我現在回只想到一個辦答法。比如 a 1 n 是你自己假定的長度 然後呼叫複製函式b repmat a,1,5 生成相同的矩陣,組合成為一個大矩陣。最後sort b,2 進行排序。就出來你想要的結果了。mat...

matlab如何按照指定的解析度儲存figure

a 1 50 產生一個1到50,增量為1的矩陣,儲存在a中 figure 1 plot a title test 用plot 畫出a,控制代碼為1 print 1,dpng test 儲存控制代碼為1的影象到 test.png,儲存目錄為當前工作路徑 試試直接在figure視窗裡直接儲存為jpg檔案...

matlab呼叫c 生成的exe如何傳遞引數

不要copy用system命令,你用dos命令試試應該bai沒問題 dos test.exe 33 傳到main int argc,char argv 裡後,duargc是系統自動計算的,應該zhi是2,第一個傳入的引數就是daoexe名稱本身,即argv 0 是 test.ext 你傳入的從第二個...