我有这个算法,但我并不太热衷于很多if语句。这个算法可以简化(书写更清晰)吗?
有人可以看到,如果这个功能可以写得更干净吗?
rand('twister',101)
n = 10;
f = A.^(0:n)./factorial(0:n);
f = f/sum(f);
n = 10000;
Xi = 2;
X = zeros(1,n);
for i =1:n,
dXi = (-1)^round(rand);
Yi = Xi + dXi;
if Yi > 0 & Yi <= length(f),
if f(Yi) >= f(Xi),
X(i) = Yi;
Xi = Yi;
else
if rand <= f(Yi)/f(Xi),
X(i) = Yi;
Xi = Yi;
else
X(i) = Xi;
end
end
end
X(i) = Xi;
end
这是什么做?考虑到要求,它可能已经尽可能简单。 – 2010-07-17 21:16:04
循环结尾处的X(i)= Xi看起来像一个错误。如果不是这样,嵌套ifs中有很多不必要的东西,其中X(i)暂时分配给其他东西,然后从未使用过。如果声明设置Xi = Yi,你可以将其简化为一个。 – 2010-07-17 21:36:13
最后的X(i)= Xi是打算的。但我不太关注你,什么是从未用过的? – 2010-07-17 21:43:47