Combining For Loop outputs into a Matrix

5 Ansichten (letzte 30 Tage)
nico nico
nico nico am 27 Nov. 2017
Kommentiert: nico nico am 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!

Akzeptierte Antwort

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

Weitere Antworten (1)

Stephen23
Stephen23 am 27 Nov. 2017
Bearbeitet: Stephen23 am 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

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by