带子函数调用的奇数'while'循环行为(MATLAB)

时间:2012-11-07 02:38:55

标签: function matlab error-handling while-loop

所以我有这个奇怪的问题,我无法弄明白。 我有一个while循环,它根据索引将值传递给向量。这些值由调用的子函数提供。我的问题是,在第一次迭代之后,向量停止接受来自子函数的值,尽管代码保持运行并且不会中断。 这发生在'S(i)=试验;'。

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 个答案:

答案 0 :(得分:1)

没有进入语义,这就是你正在做的事情:

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

步骤2:再次调用试验,但保持与先前使用的相同。它是否符合以前的最终条件?是。停止试验

步骤3:再次调用试验,但保持与先前使用的相同。它是否符合以前的最终条件?是。停止试验

步骤4:再次调用试验,但保持与先前使用的相同。它是否符合以前的最终条件?是。停止试验

溶液:

Trials函数中重新初始化d

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