Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

how to write code to try every combination of N-dim vector?

Asked by C Zeng

C Zeng (view profile)

on 22 May 2012

Hello, I want to write a code to try every combination of a N-dimentional vector(with entry 0 or 1 or 2). For example, if N=3, all combinations are (0,0,0)(0,0,1)...(2,2,2) and there are 3^N=27.

One brutal way is for commands: for i=0:2->for j=... but I have to write N these for commands, which is not wise. I wonder it there a fast and smart way to try all combinations?

Thanks a lot!

0 Comments

C Zeng

C Zeng (view profile)

Products

No products are associated with this question.

2 Answers

Answer by Sean de Wolski

Sean de Wolski (view profile)

on 22 May 2012
Accepted answer
[xx yy zz] = ndgrid(0:2);
[xx(:) yy(:) zz(:)]

Generalized (fixed)

n = 4
[C{1:n}] = ndgrid(0:2);
for ii = n:-1:1
  M(:,ii) = C{ii}(:);
end

9 Comments

C Zeng

C Zeng (view profile)

on 22 May 2012

Can I write like this:
For i=1 to 3^N
[a1,a2,a3,a4]=M(i,:);
then define function and solve the value;
compare and find the maximizer;
end;

It works well I think.

C Zeng

C Zeng (view profile)

on 24 May 2012

Hi, the code does not work and try all combinations:
n = 4
[C{1:n}] = ndgrid(0:2);
reshape(vertcat(C{:}),[],n)

In deed, it has many same combinations.

Sean de Wolski

Sean de Wolski (view profile)

on 25 May 2012

This is true. I messed up on thinking reshape() would account for the order of the cells being stacked. It did not, see update.

Sean de Wolski

Sean de Wolski (view profile)

Answer by Daniel

Daniel (view profile)

on 24 May 2012
x = fullfact([3,3,3])-1

2 Comments

Oleg Komarov

Oleg Komarov (view profile)

on 24 May 2012

Thanks again!

C Zeng

C Zeng (view profile)

on 25 May 2012

Thank you, Daniel, it works here!

Daniel

Daniel (view profile)

Contact us