creating loop with two variables

1 vue (au cours des 30 derniers jours)
sermet
sermet le 7 Déc 2017
Réponse apportée : Jan le 7 Déc 2017
For example;
a=0:2:10;
b=0:2:6;
% number of elements of a is always bigger than b
I need to create for loop as below;
result(1)=a(1)-b(1);
result(2)=a(2)-b(2);
result(3)=a(3)-b(3);
result(4)=a(4)-b(4);
result(5)=a(5)-b(4);
result(6)=a(6)-b(4);
Since a and b variables' number isn't constant for each problem. How can I create this loop for working properly with arbitrary numbers of a and b?

Réponse acceptée

Birdman
Birdman le 7 Déc 2017
Modifié(e) : Birdman le 7 Déc 2017
for i=1:max(numel(a),numel(b))
if(i>=min(numel(a),numel(b)))
result(i)=a(i)-b(min(numel(a),numel(b)));
else
result(i)=a(i)-b(i);
end
end
  3 commentaires
Birdman
Birdman le 7 Déc 2017
Your answer is of course simpler but he mentioned to do it with a for loop, therefore I wrote this. Otherwise of course I would have written something like you did.
KL
KL le 7 Déc 2017
You could call numel, outside the loop and store its output in a variable (after finding min and max) and only use this variable inside the loop.
Now, you're calling min and numel so many times (sometimes even twice within the same iteration).

Connectez-vous pour commenter.

Plus de réponses (2)

Stephen23
Stephen23 le 7 Déc 2017
Modifié(e) : Stephen23 le 7 Déc 2017
Why waste time writing an ugly loop? Here is a simpler solution in just two lines:
>> a = 0:2:10;
>> b = 0:2:6;
>> v = 1:max(numel(a),numel(b));
>> a(min(v,end))-b(min(end,v))
ans =
0 0 0 0 2 4

Jan
Jan le 7 Déc 2017
% number of elements of a is always bigger than b
This was not considered in the other suggestions. Another solution:
a = 0:2:10;
b = 0:2:6;
result = a - b(min(1:numel(a), numel(b)))

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by