Combining For Loop outputs into a Matrix

3 vues (au cours des 30 derniers jours)
nico nico
nico nico le 27 Nov 2017
Commenté : nico nico le 28 Nov 2017
Hi, I'm relatively new to Matlab. This is my code:
b = 0:3;
for q = 0:10:20
XY = (40 + 2*q) + cosd(b)
end
And the output on the command window would be:
XY =
41.0000 40.9998 40.9994 40.9986
XY =
61.0000 60.9998 60.9994 60.9986
XY =
81.0000 80.9998 80.9994 80.9986
I'm struggling to combine the outputs into one matrix like this:
XY =
41.0000 40.9998 40.9994 40.9986
61.0000 60.9998 60.9994 60.9986
81.0000 80.9998 80.9994 80.9986
Suggestions/hints would be much appreciated, thanks!

Réponse acceptée

dpb
dpb le 27 Nov 2017
With a loop, you just index...
b = 0:3;
XY=zeros(3,length(b)); % preallocate the output array
irow=0; % row counter
for q = 0:10:20
irow=irow+1; % increment counter
XY(irow,:) = (40 + 2*q) + cosd(b);
end
BUT, you "don't need no steenkin' loops!" with Matlab; that's the power of the language with the vectorized functions--
> [Q,B]=meshgrid(q,b); % generate the grid of points in bot variables
>> XY = [(40 + 2*Q) + cosd(B)].'
XY =
41.0000 40.9998 40.9994 40.9986
61.0000 60.9998 60.9994 60.9986
81.0000 80.9998 80.9994 80.9986
>>

Plus de réponses (1)

Stephen23
Stephen23 le 27 Nov 2017
Modifié(e) : Stephen23 le 27 Nov 2017
>> b = 0:3;
>> q = 0:10:20;
>> XY = bsxfun(@plus,40+2*q(:),cosd(b))
XY =
41 40.9998476951564 40.9993908270191 40.9986295347546
61 60.9998476951564 60.9993908270191 60.9986295347546
81 80.9998476951564 80.9993908270191 80.9986295347546

Catégories

En savoir plus sur Creating and Concatenating Matrices 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!

Translated by