programming to find out all possible combination of numbers a,b,c,d in which 0<a<b<c<d<90.
Show older comments
all possible combination of numbers a,b,c,d in which 0<a<b<c<d<90.
2 Comments
Guillaume
on 26 Aug 2015
You have to clarify what you mean by numbers. There is of course an infinity of numbers between 0 and 90. Do you mean integers?
UJJWAL BARMAN
on 26 Aug 2015
Accepted Answer
More Answers (4)
Walter Roberson
on 26 Aug 2015
1 vote
There will be 4636033603912859644 choices for "a" alone, for a total of 19247532396881346240525890574203961674141911582083171582958740223586992125 combinations. That is roughly the cube of the number of fundamental particles in the observable universe, so there is no known means for recording all of those combinations.
8 Comments
Guillaume
on 26 Aug 2015
Am I missing something? Even if you remove the ordering relationship, all combinations of four integers between 1 and 89 is only 89^4 = 62742241 combinations.
Walter Roberson
on 26 Aug 2015
You are assuming integers. I, though, have answered several questions from the same poster in which the poster has been trying to find four angles in the range 0 to 90 which satisfy a particular set of simultaneous equations. (My investigations at the time suggested firmly that there were no real-valued solutions in that range -- though there were solutions if at least one or more of the angles was allowed to exceed that range.)
Guillaume
on 26 Aug 2015
Oh yes, if it's not integer, then of course the question makes no sense.
John D'Errico
on 26 Aug 2015
Well, you cannot really say there is no known means. Simply listing the combinations in theory is adequate. It just might take a wee bit more time than most people are willing to invest.
Walter Roberson
on 26 Aug 2015
There isn't enough energy in the universe to be able to output them all on any known display.
Walter Roberson
on 27 Aug 2015
[A,B,C,D] = ndgrid(1:86, 2:87, 3:88, 4:89);
ABCD = [A(:), B(:), C(:), D(:)];
idx = ABCD(:,1) < ABCD(:,2);
ABCD = ABCD(idx,:);
idx = ABCD(:,2) < ABCD(:,3);
ABCD = ABCD(idx,:);
idx = ABCD(:,3) < ABCD(:,4);
ABCD = ABCD(idx,:);
Now ABCD will be an N x 4 array in which column 1 corresponds to an A value, column 2 to a B value, column 3 to a C value, column 4 to a D value.
UJJWAL BARMAN
on 27 Aug 2015
Walter Roberson
on 27 Aug 2015
A = ABCD(:, 1); B = ABCD(:, 2);
etc. The 5th solution would be A(5),B(5),C(5),D(5)
You asked for all of the solutions and this is all of the solutions. Millions of them.
Kelly Kearney
on 27 Aug 2015
For just the integers:
tmp = nchoosek(1:89,4);
a = tmp(:,1);
b = tmp(:,2);
c = tmp(:,3);
d = tmp(:,4);
The nchoosek function automatically sorts its results, so you don't have to worry about the inequality check. You could use the same function to test non-integers, too, though as everyone has pointed out the size of your arrays will quickly get out of control as you increase resolution.
1 Comment
Roger Stafford
on 4 Sep 2015
Kelly's answer using 'nchoosek' is the best one, Ujjwal, and you should accept it. It will give you 89!/4!/85! = 2,441,626 possible combinations.
Note however that he misstates things a bit where he asserts that 'nchoosek' sorts the results. It does not. It actually uses the same order as was present in the received vector argument, which in the case of 1:89 would happen to be sorted.
UJJWAL BARMAN
on 4 Sep 2015
0 votes
1 Comment
Guillaume
on 4 Sep 2015
Please use comments rather than answering your own question with another question.
To solve your problem, simply move the save after the end of the last loop and save aa, bb, etc. instead of a, b, etc.
UJJWAL BARMAN
on 5 Sep 2015
0 votes
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!