我有這個算法,但我並不太熱衷於很多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