Je veux parcourir tous les éléments de ma matrice et je veux qu'ils s'arrêtent quand la valeur converge de tous les éléments. J'ai écrit le code (ci-dessous) mais il me donne de mauvaises valeurs et je ne pense pas si les valeurs sont en cours dans la boucle.Arrêt de l'itération de tous les éléments d'un vecteur à la convergence dans matlab?
probability = (ones(1,2048) .* 1/2048); %vector of 2048 values
Tij = sum(StateTransitionfwd); %vector of 2048 values
Tji = sum(StateTransitionbwd); %vector of 2048 values
p = ((Tji .* probability) - (Tij .* probability)); %vector of 2048 values
threshold = (zeros(1,2048)); %vector of 2048 values
old = p; %vector of 2048 values
new = zeros(1,2048); %vector of 2048 values
while old - new > threshold %subtracting vector from the vector
old = p;
p = ((p * StateTransitionbwd) - (Tij .* p));
new = p;
end
Je pense que votre tableau ne convergera jamais vers zéro et fonctionnera donc toujours. Essayez d'augmenter le seuil ou d'inclure un nombre maximum d'itérations dans votre condition de boucle de temps. – Adriaan
@Visser J'ai essayé de le faire. les valeurs n'allaient pas dans la boucle d'abord mais en utilisant la norme (ancienne - nouvelle) ils sont. Mais maintenant je reçois des valeurs dans Inf ou NaN: s –
Tij et Tji sont des scalaires. Les multiplier par une probabilité donne un tableau contenant 2048 valeurs qui sont exactement les mêmes. La soustraction de ces deux tableaux donne à nouveau un tableau d'éléments de 2048 avec exactement les mêmes entrées. Ce n'est que lorsque vous assignez p dans la boucle while que les choses commencent à changer, fournissant StateTransitionbwd est un tableau 2048 de valeurs distinctes. – Adriaan