matlab中的开关数

matlab中的开关数,matlab,random,Matlab,Random,我有N个时间步,并希望创建N个与每个时间步对应的实数,如下所示:数字应该在[a,b]范围内,切换概率为p。 即,如果对应于第k个时间步长的第k个数是n,则对应于第k+1个时间步长的第k+1个数是与n不同的任何其他数的概率是p。所有创建的数字应在[a,b]范围内 如何在matlab中实现这一点? 谢谢。我不确定是否满足了您的所有要求,但这可能是您正在搜索的脚本: N = 10; % count of numbers p = 0.2; % switching probability a

我有N个时间步,并希望创建N个与每个时间步对应的实数,如下所示:数字应该在[a,b]范围内,切换概率为p。 即,如果对应于第k个时间步长的第k个数是n,则对应于第k+1个时间步长的第k+1个数是与n不同的任何其他数的概率是p。所有创建的数字应在[a,b]范围内

如何在matlab中实现这一点?
谢谢。

我不确定是否满足了您的所有要求,但这可能是您正在搜索的脚本:

N = 10;     % count of numbers
p = 0.2;    % switching probability
a = 5;
b = 20; 

% init empty numbers and get the first random number
numbers = zeros(N,1);
numbers(1) = rand(1) * (b-a) + a;

for iNumber = 2:N
    % test if number must change
    if rand(1) < (1-p)
        % the number must be the same than the previous
        % copy the value and go to next number
        numbers(iNumber) = numbers(iNumber-1);
        continue;

    else 
        % a new number must be found
        while 1
            % get a new random number 
            numbers(iNumber) = rand(1) * (b-a) + a;

            % check if the new random number is different from the previous
            if numbers(iNumber) ~= numbers(iNumber-1)
                % in case they are different, the while 1 can be stopped
                break;
            end

        end % while 1

    end % if rand(1) < (1-p)
end % for iNumber = 2:N

保证超随机:

N = randi(100);
p = rand;
l1 = rand*randi(100);
l2 = rand*randi(100);

if l2 < l1
  [l2 l1] = deal(l1,l2);
end

out = []

while isempty(out)
    if rand>rand
        n = 2:N
        a = rand([N,1])*(l2-l1)+l1;
        x = rand([N-1,1])<p;
        n(x==0)=n(x==0)-1;
        n = [1 n];
        out = a(n);
    end
end

诚然,我是在猜测,但是,如果你对模拟有限马尔可夫链感兴趣,你提出问题的方式会让人困惑。我的目标和上面提出的一样。@user3489173问题不太清楚,请编辑?您在[a,b]中生成随机数还是生成k+1给定数k时遇到问题?@user3489173:如果您在堆栈溢出问题上发帖,而不先付出一些努力,这是不可取的。请自己尝试一下,当你真的被卡住时,再发一个问题。看起来没问题。谢谢你无数次。。。