Vectorizing a recursive for loop avoiding numerical underflow
Afficher commentaires plus anciens
Hi all,
I'm currently trying to vectorize a couple nested for loops that have a scaling coefficient (c) in there to prevent numerical underflow (note a(i,j) always less than 1). Any help is much appreciate!
Thanks,
Josh
N = 4;
T = 120000000;
M = 170;
O = randi(M,1,T);
B = zeros(N,M);
alpha = zeros(N,T);
A = rand(N);
B = rand(N,M);
c = zeros(1,T);
%compute alpha_t(i)
for t = 2:T
for j = 1:N
for i = 1:N
alpha(j,t) = alpha(j,t) + alpha(i,t-1)*A(i,j);
end %i
alpha(j,t) = alpha(j,t)*B(j,O(t));
c(t) = c(t) + alpha(j,t);
end %j
%scale alpha_t
c(t) = 1/c(t);
for j = 1:N
alpha(j,t) = c(t)*alpha(j,t);
end
end %t
3 commentaires
Sindar
le 24 Mar 2020
Are these right?
alpha = zeros(N,T);
c = zeros(1,T);
It looks to me like your final answer will be zero regardless of A,B
Sriram Tadavarty
le 24 Mar 2020
The last loop can be removed directly with
alpha(:,t) = c(t)*alpha(:,t);
Josh Parks
le 24 Mar 2020
Réponses (0)
Catégories
En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!