我想迭代矩阵中的所有元素,并希望它们在所有元素的值收敛时停止。我写了代码(下面),但它给了我错误的值,我不认为值是否实际上在循环中。
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
答案 0 :(得分:0)
您停止条件old - new > threshold
是有问题的,因为它不会被评估为标量布尔值,而是评估为布尔值的向量。
您应该测量差异向量的范数,例如
while max( abs( old-new) ) > threshold
或者
while norm( old-new) > threshold
答案 1 :(得分:0)
在我看来,你的旧矢量也可能是0矢量。如果在测试循环条件时遇到NaN或inf的错误,那是因为你试图用norm(old-new)找到零向量的范数。矢量的范数由v / || v ||计算所以,如果|| v ||是0,你的矢量将是NaN。