因此,我有一个无法解决的怪异问题。
我有一个while循环,它根据索引将值传递到 vector 中。这些值由一个称为的子功能提供。我的问题是,在第一次迭代之后,尽管代码保持运行并且不会崩溃,但 vector 停止接受子函数的值。
这发生在“S(i)= Trials;”处。

function Simulation()
N=input('How many trials would you like to run? ');
Tup=input('What is the positive boundary? ');
Tdown=input('What is the negative boundary? ');
StepLength=input('What is the step length? ');
d=0;
i=1;
S=zeros(1,N);
StepLimit=1000000;
if Tup==Tdown
     display('Please use boundaries that are not equal to eachother.');
 elseif Tup<=d||Tdown>=d
         display('Please choose logical boundaries.');
else
    while i<=N
    S(i)=Trials;
    i=i+1;
    end
end
x=0:10:max(S);
hist(S,x);
axis tight;
xlabel('Number of Steps');
ylabel('Number of Trials');

function s=Trials()
s=0;
    while ~(d<=Tdown)&&~(d>=Tup)
        m=StepLength.*RandDir(1);
        d=d+m;
        s=s+1;
        if s>=StepLimit
            display('The step limit was reached.');
            return
        end
    end

    function out = RandDir(N)
    % Generate a random vector from the set {+/- e_1, +/- e_2,..., +/- e_N}
    % where e_i is the ith basis vector. N should be an integer.
    I = round(ceil(2*N*rand));
        if rem(I,2) == 1
            sgn = -1;
        else
            sgn = 1;
        end
    out = zeros(N,1);
    out(ceil(I/2)) = sgn*1;
    end
end
end

感谢您的任何帮助

最佳答案

在不涉及语义的情况下,这是您正在做的事情:

第1步:调用函数Trials ...更改d,直到获得所需的值。

步骤2:再次致电Trials,但保持与以前相同的d。是否符合先前的结束条件?是。停止试用

步骤3:再次致电Trials,但保持与以前相同的d。是否符合先前的结束条件?是。停止试用

步骤4:再次致电Trials,但保持与以前相同的d。是否符合先前的结束条件?是。停止试用

解:

Trials函数中重新初始化d:

function s=Trials()
    d=0;
    s=0;
...

07-27 23:47