使用随机步骤定义矢量

Joa*_*oan 6 arrays random matlab

我想创建一个具有增量随机步骤的数组,我已经使用了这个简单的代码.

t_inici=(0:10*rand:100);
Run Code Online (Sandbox Code Playgroud)

问题是随机数在步骤之间保持不变.有没有简单的方法来改变每一步中随机数的种子?

Wol*_*fie 5

如果你有个定数,说nPts,那你就可以做到以下几点

nPts = 10;         % Could use 'randi' here for random number of points
lims = [0, 10]     % Start and end points
x = rand(1, nPts); % Create random numbers  
% Sort and scale x to fit your limits and be ordered 
x = diff(lims) * ( sort(x) - min(x) ) / diff(minmax(x)) + lims(1) 
Run Code Online (Sandbox Code Playgroud)

这种方法总是包括你的终点,这种0:dx:10方法不一定如此.


如果你有个的一些最大数,说nPtsMax,那你就可以做到以下几点

nPtsMax = 1000;      % Max number of points
lims = [0,10];       % Start and end points
% Could do 10* or any other multiplier as in your example in front of 'rand'
x = lims(1) + [0 cumsum(rand(1, nPtsMax))];     
x(x > lims(2)) = []; % remove values above maximum limit
Run Code Online (Sandbox Code Playgroud)

这种方法可能较慢,但仍然相当快,更好地代表了您问题中的行为.


And*_*uri 3

我的第一个方法是生成 N-2 个样本,其中 N 是随机所需的样本数量,对它们进行排序,然后添加极值:

N=50;
endpoint=100;
initpoint=0;
randsamples=sort(rand(1, N-2)*(endpoint-initpoint)+initpoint);
t_inici=[initpoint randsamples endpoint];
Run Code Online (Sandbox Code Playgroud)

然而,不确定这是多么“均匀随机”,因为您“伪造”了最后两个数据,以包含极值。这会在某种程度上扭曲纯粹的随机性(我认为)。如果您不一定对包含极值感兴趣,则只需删除最后一行并生成 N 个点即可。这将确保它们确实是随机的(或者 MATLAB 可以创建它们的随机性)。