輪子——matlab中的隨機數矩陣(rand randn randi 種子 normrnd randperm 對稱)

在matlab中進行仿真時,經常需要對真實數據添加隨機數噪聲。本文內容參考內容見文末,對其進行適當總結並不定期再補充。

rand

  • rand(m,n):產生均值爲0.5、幅度在0~1之間的m×nm\times n均勻分佈僞隨機數矩陣。
  • rand(m,n,‘double’):生成指定double精度的均值爲0.5、幅度在0~1之間的m×nm\times n僞隨機數矩陣,可選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,大小爲M×NM\times N的正太分佈的隨機數矩陣

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章