# Binary matrix for all possible unique results of X(i) variables

How to generate a binary matrix for all possible permutations of 'i' variables X, where " i " can be any number between 1 and infinite. I know that the resultant matrix will have 2^ i unique answers, but don't know how to generate it.  Let me explain by example:

variables x1, x2 (i=2) each with a possible value of 1 or 0, so the resultant matrx would be:

X2  X1
0     0
0     1
1     0
1     1

but what if i=120 for example, how do we generate the matrix for x(i) from 1 to 120? There would be 2^ 120 results.

The logic is simple, but I can not seem to translate to code:

x4 x3 x2 x1
0    0   0   0
0    0   0   1
0    0   1   0
0    0  1    1
0   1   0   0
0   1   0    1
0    1  1   0
0   1   1   1
1   0   0   0
1    0   0   1
1    0   1   0
1    0  1    1
1   1   0   0
1   1   0    1
1    1  1   0
1   1   1   1

generate matrix 2^i by i size
start with all x(i) values at 0
get value of x(i)
if x(i)=1
increment i
else set x(i)=1 then start checking values from beginning
if i reaches count of total variables for that row OR leftmost variable is 1 move to next row

or something like above
LVL 6
Asked:
###### Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Commented:
I don't know the mathlab programming language but I can give it to you in vbscript.  If you stick it in a file, say bitpat.vbs and run it from the command line under windows using

cscript bitpat.vbs

You'll get your patterns
``````bits = 5 ' number of bits required
count = 5^2
for c = 0 to count
disp = ""
val = c
for b = 1 to bits
if (val and 1) = 1 then
disp = " 1" & disp
else
disp = " 0" & disp
end if
val = val \ 2 ' shift right
next
WScript.echo disp
next
``````
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Author Commented:
cup, thanks for the VB script. It works for i=5, but I tested it for 6, or 7 and it fell short and stopped before all final values were 1. It also uses a string logic that does not truly "read" the previous values, which is OK, but not the "smart" solution I am looking for.

PS: I refuse to believe no one has ever had to come up with this problem before, and a true solution must exist. Come one programming experts, take a swing!
0
Author Commented:
I was able to resolve this using a MatLab function available here: http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=7147&objectType=FILE

I also attached it for review purposes. The function code was hard for me to understand, I would still be interested into a more logical approach to this that's more language independent and easier to understand.
combn.m.txt
0
Commented:
Sorry - the 5^2 should have been

count = (2^ bits) - 1

As for your program,  the notation is beyond me.
0
Author Commented:
that function is beyond me as well, but I only need to call it to get the desired results.

CUP, your updated script is working quite well, I will try to get a MatLab version of it up.

``````%combn.m function required
%define the matrix columns
i=5;
%create the matrix M for all binary combinations
M=combn([0 1],i);
%display M on screen
disp(M);
``````
0
###### It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Programming Languages-Other

From novice to tech pro — start learning today.