how to make a matrix only showing Permutation without order ?

3 views (last 30 days)
iam currently on projekt calculation every 3 Dart Single Kombination possible but without giving me the same number in a differnt order.
Code
c=[1:20 25]
c = 1×21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 25
Single1=c
Single1 = 1×21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 25
Single2=Single1;
Single3=Single1;
Singlkomb = fliplr(combvec(Single1,Single2,Single3)')
Singlkomb = 9261×3
1 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10
the combination fliplr(combvec(Single1,Single2,Single3)') brings me all the combination e.g 1 2 1, 2 1 1 and 1 1 2 but i only want that the same numbers appears one time in the matrix. I want to find a method that shows me permutation without order.
Thx

Accepted Answer

Torsten
Torsten on 28 Oct 2022
Edited: Torsten on 28 Oct 2022
You mean
nchoosek([1:20,25],3)
ans = 1330×3
1 2 3 1 2 4 1 2 5 1 2 6 1 2 7 1 2 8 1 2 9 1 2 10 1 2 11 1 2 12
nchoosek(21,3)
ans = 1330
not
21^3
ans = 9261
?
  2 Comments
Simon Gühring
Simon Gühring on 28 Oct 2022
hey thank you for your answer
no maybe i havn`t expressed myself very well i want as output
1 1 1
1 1 2
1 1 3 and so on
but every kombination should appear just once for example only 1 1 2 and not 1 2 1 or 2 1 1 its about the order.
Torsten
Torsten on 28 Oct 2022
Edited: Torsten on 28 Oct 2022
c=[1:20 25];
Single1=c;
Single2=Single1;
Single3=Single1;
Singlkomb = fliplr(combvec(Single1,Single2,Single3)')
Singlkomb = 9261×3
1 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10
Singlkomb = unique(sort(Singlkomb,2),'rows')
Singlkomb = 1771×3
1 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10
nchoosek(21,1)+nchoosek(21,2)*2+nchoosek(21,3)
ans = 1771

Sign in to comment.

More Answers (1)

Bruno Luong
Bruno Luong on 29 Oct 2022
This is called combination with repetition
You don't need to generate the permutation and filter out which can take much larger amount of memory
a=[1:20,25]
a = 1×21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 25
k=3
k = 3
c=repcomb(a, k)
c = 1771×3
1 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10
%% return combination of k elements of array a with repetition
function c = repcomb(a, k)
n=length(a);
q=n+k-1;
j=nchoosek(1:q,k)-(0:k-1);
c=a(j);
end

Categories

Find more on Vibration Analysis in Help Center and File Exchange

Products


Release

R2022b

Community Treasure Hunt

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

Start Hunting!