How to create an mxn matrix with a for-loop

Hello all,
I would like to display (x(i),y(j)) in separate columns according to the x(i)'s.
i.e.:
(0,0) (1,0) (2,0)
(0,1) (1,1) (2,1)
(0,2) (1,2) (2,2), etc.
I am currently using a nested for-loop to calculate all (x(i),y(j)) as follows:
for i = 1:3
a = i-1;
for j = 1:3
b = j-1;
X = [a b];
disp(X);
end
end
I get the output as follows:
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
I tried using reshape to display the output as above, however in fiddling with the program, I discovered that MATLAB considers each line of output to be a separate 1x2 matrix. Do you have any suggestions as to how to get MATLAB to recognize the outputs as a 9x2 matrix? This is an extremely scaled-down version of what I need the program to do.
Thank you!!

4 comentarios

@Dominique Brasee: why waste time and space writing nested loops? MATLAB is a high-level language, so you don't need to rely on loops to solve all of your tasks (see dpb's comment how).
There is also no point in reinventing the wheel: you can use the excellent FEX submission permn
>> permn(0:2,2)
ans =
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
dpb
dpb el 28 de Jul. de 2016
Nice find,Stephen...I should check FEX more often, meself... :)
ABISHAI JOY
ABISHAI JOY el 16 de Feb. de 2020
How will you put cos (x+y) in to a matrix and it should generate random values with x, y between [0,2pi].
dpb
dpb el 16 de Feb. de 2020
Use rand(), maybe???

Iniciar sesión para comentar.

 Respuesta aceptada

dpb
dpb el 28 de Jul. de 2016
As you've written it, you only have a 1x2 (row) vector at any one time, you overwrite X on each pass. There are certainly more efficient ways to generate this, but the issue with respect to building an array is simple to handle; I presume there's something much more than this going on in the real problem...
N=3;
k=0;
for i=0:N-1
for j=0:N-1
k=k+1;
X(k,:) = [i j];
end
end
disp(X)

2 comentarios

Dominique Brasee
Dominique Brasee el 28 de Jul. de 2016
In the real program I will be computing a very large set of coordinates but I am trying to get a feel for a generic method (work asked me to do some modeling to fix some bugs in an existing program and I want to make sure I don't look like a complete idiot, since I am the intern haha).
Thank you for your help!
You recognize that looping isn't very Matlab-like here, I presume?
>> [reshape(repmat(0:N-1,N,1),[],1) repmat(0:N-1,1,N).']
ans =
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
>>

Iniciar sesión para comentar.

Más respuestas (3)

Lam Nguyen Van
Lam Nguyen Van el 10 de Mzo. de 2020

1 voto

Hi,
I want to creat matrices automatically with for loop in Matlab?
phi1=30; phi2=45; phi3=90;
After running the code I want to have a matric A with the following elements:
A=[sin(phi1) cos(phi1) sin(phi1)*cos(phi1);
sin(phi2) cos(phi2) sin(phi2)*cos(phi2);
sin(phi3) cos(phi3) sin(phi3)*cos(phi3);]

1 comentario

Rik
Rik el 6 de Nov. de 2020
Your answers look like questions. Please post them as questions. Have a read here and here. It will greatly improve your chances of getting an answer.

Iniciar sesión para comentar.

Lam Nguyen Van
Lam Nguyen Van el 16 de Abr. de 2020

0 votos

https://www.mathworks.com/matlabcentral/answers/372036-can-you-create-a-matrix-using-a-for-loop?s_tid=mlc_ans_email_view&utm_source=zalo&utm_medium=zalo&utm_campaign=zalo&zarsrc=1303
Lam Nguyen Van
Lam Nguyen Van el 17 de Abr. de 2020

0 votos

clear;
phi=[30, 45, 90];
n=length(phi);
A=zeros(n,3);
for i=1:n
[d]= ham_luong_giac (phi(i));
A(i,:)=[d];
end
A
function [xuat] = ham_luong_giac (phi)
a1=sin(phi);
a2=cos(phi);
a3=sin(phi).*cos(phi);
xuat= [a1, a2, a3];
end

Categorías

Preguntada:

el 28 de Jul. de 2016

Comentada:

Rik
el 6 de Nov. de 2020

Community Treasure Hunt

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

Start Hunting!

Translated by