0

我想迭代矩阵中的所有元素,并希望它们在所有元素的值收敛时停止。我编写了代码(如下),但它给了我错误的值,我不认为值是否真的在循环中。

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 
4

2 回答 2

0

您的停止条件old - new > threshold是有问题的,因为它不是被评估为一个标量布尔值,而是一个布尔值向量
您应该改为测量差异向量的范数,例如

while max( abs( old-new) ) > threshold

或者

while norm( old-new) > threshold
于 2015-08-24T08:20:29.620 回答
0

在我看来,您的旧向量也可能是 0 向量。如果在测试循环条件时遇到 NaN 或 inf 错误,那是因为您尝试使用 norm(old-new) 找到零向量的范数。向量的范数由 v/||v|| 计算 所以如果 ||v|| 为 0,您的向量将为 NaN。

于 2015-08-24T12:26:01.370 回答