【发布时间】:2015-08-24 08:06:05
【问题描述】:
我想迭代矩阵中的所有元素,并希望它们在所有元素的值收敛时停止。我编写了代码(如下),但它给了我错误的值,我不认为值是否真的在循环中。
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
【问题讨论】:
-
我认为你的数组永远不会收敛到零,因此总是运行。尝试将阈值设置得更高或在您的 while 循环条件中包含最大迭代次数。
-
@Visser 我试过这样做。值并没有首先进入循环,而是通过使用 norm(old - new) 进入循环。但现在我得到了 Inf 或 NaN 的值:s
-
Tij 和 Tji 都是标量。将它们与概率相乘得到一个包含 2048 个完全相同的值的数组。再次减去这两个数组会得到一个包含完全相同条目的 2048 元素数组。只有当您在 while 循环中分配 p 时,事情才会开始发生变化,提供 StateTransitionbwd 是一个 2048 个不同值的数组。
-
元素的数量保持不变(即 2048),但它们的值是 NaN 或 inf。
标签: matlab loops iteration convergence