J'ai cet algorithme, mais je ne suis pas trop intéressé par les nombreuses if-statements. Est-ce que quelqu'un peut voir si cette fonction peut être écrite de manière plus propre?Cet algorithme peut-il être simplifié (nettoyeur écrit)?
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
Que faut-il faire? Peut-être que c'est déjà aussi simple que possible compte tenu des exigences. –
Le X (i) = Xi à la fin de la boucle ressemble à un bug. Si ce n'est pas le cas, il y a beaucoup de choses inutiles dans les ifs imbriqués où X (i) est temporairement assigné à quelque chose d'autre, puis jamais utilisé. Vous pouvez simplifier cela pour une instruction if qui définit Xi = Yi. –
Le dernier X (i) = Xi est destiné. Mais je ne vous suis pas tout à fait, ce qui n'est jamais utilisé? –