Combining For Loop outputs into a Matrix

5 visualizzazioni (ultimi 30 giorni)
nico nico
nico nico il 27 Nov 2017
Commentato: nico nico il 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!

Risposta accettata

dpb
dpb il 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
>>

Più risposte (1)

Stephen23
Stephen23 il 27 Nov 2017
Modificato: Stephen23 il 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

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by