所以我有这个奇怪的问题,我无法弄明白。 我有一个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
感谢您的帮助
答案 0 :(得分:1)
没有进入语义,这就是你正在做的事情:
步骤1:您调用函数Trials ...更改d,直到获得所需的值。
步骤2:再次调用试验,但保持与先前使用的相同。它是否符合以前的最终条件?是。停止试验
步骤3:再次调用试验,但保持与先前使用的相同。它是否符合以前的最终条件?是。停止试验
步骤4:再次调用试验,但保持与先前使用的相同。它是否符合以前的最终条件?是。停止试验
溶液:
在Trials
函数中重新初始化d
:
function s=Trials()
d=0;
s=0;
...