在matlab中進行仿真時,經常需要對真實數據添加隨機數噪聲。本文內容參考內容見文末,對其進行適當總結並不定期再補充。
rand
- rand(m,n):產生均值爲0.5、幅度在0~1之間的均勻分佈僞隨機數矩陣。
- rand(m,n,‘double’):生成指定double精度的均值爲0.5、幅度在0~1之間的僞隨機數矩陣,可選single。
randn
- randn(m,n):生成標準正態分佈的僞隨機數(均值爲0,方差爲1),語法與rand一致。
- 若要生成均值p, 方差q的正態分佈隨機數序列x:
x = p +sqrt(q)*randn(m,n)
randi
- randi 生成均勻分佈的僞隨機整數
- randi(iMax)在開區間(0,iMax)生成均勻分佈的僞隨機整數
- randi(iMax,m,n)在開區間(0,iMax)生成mXn型隨機矩陣
- randi([iMin,iMax],m,n)在開區間(iMin,iMax)生成mXn型隨機矩陣
設定種子1
matlab的rand、randn、randi函數生的是僞隨機數,即由種子遞推出來的,相同的種子,生成相同的隨機數。
如果需要多次運行生成相同的隨機數,用
rand(‘state’,S)設定種子,S種子,最簡單的設爲0就好
例:
設定種子2
第二種設定種子的方法靠程序的邏輯控制,matlab代碼如下
clc
clear
%% 仿真數據準備
% 判斷是否存在仿真數據?導入:生成
strDataName = 'myData.mat';
if exist(strDataName,'file')==2
load(strDataName);
end
if exist(strDataName,'file')==0
A = rand(5,5);
save(strDataName)
end
%% 算法實現
% :) @*%#!$*%#......
normrnd
- R = normrnd(MU,SIGMA,M,N):產生均值爲MU,方差爲SIGMA,大小爲的正太分佈的隨機數矩陣
randperm
- randperm(n) : 產生1到n的均勻分佈的隨機整數序列
注:可以用於打亂序列
隨機數對稱矩陣
仿真時偶爾需要用到對稱的隨機矩陣,生成方法如下:
- 對於任何方陣X,X+XT是對稱矩陣
例:
A = rand(3)
C=(A'+A)/2.0; % 除以2.0是爲了保持隨機數的統計特性不變
輸出得到:
A =
0.9797 0.8757 0.0118
0.2714 0.7373 0.8939
0.2523 0.1365 0.1991
本文參考:
【1】https://blog.csdn.net/linhd1102/article/details/51193793
【2】https://wenku.baidu.com/view/6500290d4a7302768e9939f2.html