How can I write this with a for loop?
Afficher commentaires plus anciens
r = (1/70).*( exp(i.*Y(:,3)) + exp(i.*Y(:,6)) + exp(i.*Y(:,9)) + exp(i.*Y(:,12)) + exp(i.*Y(:,15)) ...
+exp(i.*Y(:,18)) +exp(i.*Y(:,21)) +exp(i.*Y(:,24)) + exp(i.*Y(:,27)) + exp(i.*Y(:,30)) + exp(i.*Y(:,33)) ...
+ exp(i.*Y(:,36)) + exp(i.*Y(:,39)) +exp(i.*Y(:,42)) + exp(i.*Y(:,45)) + exp(i.*Y(:,48)) + exp(i.*Y(:,51)) ...
+ exp(i.*Y(:,54))+ exp(i.*Y(:,57)) + exp(i.*Y(:,60)) + exp(i.*Y(:,63)) + exp(i.*Y(:,66)) + exp(i.*Y(:,69)) ...
+ exp(i.*Y(:,72)) + exp(i.*Y(:,75)) + exp(i.*Y(:,78)) + exp(i.*Y(:,81)) + exp(i.*Y(:,84)) + exp(i.*Y(:,87)) ...
+ exp(i.*Y(:,90)) + exp(i.*Y(:,93)) + exp(i.*Y(:,96)) + exp(i.*Y(:,99)) + exp(i.*Y(:,102)) + exp(i.*Y(:,105))...
+ exp(i.*Y(:,108)) + exp(i.*Y(:,111)) + exp(i.*Y(:,114))+ exp(i.*Y(:,117)) + exp(i.*Y(:,120)) + exp(i.*Y(:,123))...
+ exp(i.*Y(:,126)) + exp(i.*Y(:,129)) + exp(i.*Y(:,132)) + exp(i.*Y(:,135)) + exp(i.*Y(:,138)) + exp(i.*Y(:,141))...
+ exp(i.*Y(:,144)) + exp(i.*Y(:,147)) + exp(i.*Y(:,150)) + exp(i.*Y(:,153)) + exp(i.*Y(:,156)) + exp(i.*Y(:,159)) ...
+ exp(i.*Y(:,162)) + exp(i.*Y(:,165)) + exp(i.*Y(:,168)) + exp(i.*Y(:,171)) + exp(i.*Y(:,174)) + exp(i.*Y(:,177)) ...
+ exp(i.*Y(:,180)) + exp(i.*Y(:,183))+ exp(i.*Y(:,186)) + exp(i.*Y(:,189)) + exp(i.*Y(:,192)) + exp(i.*Y(:,195)) ...
+ exp(i.*Y(:,198)) + exp(i.*Y(:,201))+ exp(i.*Y(:,204)) + exp(i.*Y(:,207)) + exp(i.*Y(:,210)));
1 commentaire
Stephen23
le 14 Fév 2023
Why do you need to use a loop? Vectorized code would be simpler:
Réponses (2)
Dyuman Joshi
le 14 Fév 2023
Modifié(e) : Dyuman Joshi
le 14 Fév 2023
Vectorization would be the best approach here -
r = (1./70).*sum(exp(i*Y(:,3:3:210)),2)
Dr. W. Kurt Dobson
le 14 Fév 2023
Looks like the index you are using starts with 3, then increments by 3 up to 210.
Y looks like a matrix...
So, let's say the incrementing number is k, therefore you could do a for loop or just a vector computation.
For Loop Version (slower due to loop)
%
r = (1/70).*( exp(i.*Y(:,3)); % setup the first term
for k = 6:3:210 % increment by three
r = r + exp(i.*Y(:,k)); % for each term add, the prior to current
end
%
Vector Version (much faster)
k = 6:3:210; % gen k vector start at 3, increment by 6 to 210
r = (1/70).*( exp(i.*Y(:,3)); % setup the first term
r = r + exp(i.*Y(:,k)); % vector calculation on remaining terms
1 commentaire
Dr. W. Kurt Dobson
le 14 Fév 2023
Oops, forgot a semicolon,
k = 6:3:210; % gen k vector start at 3, increment by 6 to 210
r = (1/70).*( exp(i.*Y(:,3))); % setup the first term
r = r + exp(i.*Y(:,k)); %
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!