因此,我有一个无法解决的怪异问题。
我有一个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;
...