Can someone do this calculation without for loops?
11 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
a = [1 2 3; 4 5 6];
b = [ 1 2 3 4];
c = [1 2 3 4 5];
for n = 1: size(a,1)
for m = 1:size(a,2)
for s = 1: length(b)
for k = 1: length(c)
L(n,m,s,k)= a(n,m) +b(s)*a(n,m)*exp(c(k)*a(n,m));
end
end
end
end
0 commentaires
Réponse acceptée
Stephen23
le 20 Juin 2016
Modifié(e) : Stephen23
le 20 Juin 2016
tmp = bsxfun(@times,a,reshape(c,1,1,1,[]));
tmp = bsxfun(@times,a,exp(tmp));
tmp = bsxfun(@times,reshape(b,1,1,[]),tmp);
tmp = bsxfun(@plus,a,tmp);
Note that the floating point error propagates slightly differently, so isequal will be false.
2 commentaires
Stephen23
le 21 Juin 2016
Well, you didn't just change the matrix dimensions, you also changed the operation by replacing the a(n,m) term inside the exp with a b(s) term. So lets do the same:
B = reshape(b,1,1,[]);
tmp = bsxfun(@times,B,reshape(c,1,1,1,[]));
tmp = bsxfun(@times,a,exp(tmp));
tmp = bsxfun(@times,B,tmp);
tmp = bsxfun(@plus,a,tmp);
and now compare some of the output values with your loop's output:
>> L(:,:,2,4)
ans =
4542.774 191.509
31.398 3096.897
>> tmp(:,:,2,4)
ans =
4542.774 191.509
31.398 3096.897
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!