Given vector with N entries, generate all combinations with K entries such that K > N, vector entries can repeat

조회 수: 1 (최근 30일)
I'm writing a script to work some ideas I had with eigenvalues in a triangular matrix, and part of that is generating all the possible permutations of the eigenvalues in an arbitrarily sized matrix. To do this I want to generate vectors I can feed into the diag(v) function where v is composed solely of 1x1 symbolic variables.
For example: I have 2 symbolc variables a and b, that I want to feed into a 4x4 matrix so that I get all combinations of a and b across the main diagonal. This would create a matrix (or a set of vectors) that looks something like:
[a a a a
a a a b
a a b a
a b a a
a a b b
a b a b
a b b a
a b b b
b b b b
b b b a
b b a b
b a b b
b b a a
b a b a
b a a b
b a a a]
which I'll then be able to iterate over to feed into diag.
Thanks!

채택된 답변

Matt J
Matt J 2023년 10월 20일
편집: Matt J 2023년 10월 20일
syms a b
k=4;
[C{k:-1:1}]=ndgrid([a,b]);
result=reshape(cat(k+1,C{:}) ,[],k)
result = 

추가 답변 (2개)

Matt J
Matt J 2023년 10월 20일
편집: Matt J 2023년 10월 20일
Starting with R2023a,
syms a b
k=4;
v=repmat( {[a,b]},1,k);
result=table2array(combinations(v{:}))
result = 
  댓글 수: 4
Bruno Luong
Bruno Luong 2023년 10월 20일
편집: Bruno Luong 2023년 10월 20일
I prefer cell array for mixed data types (would not know if I ever use that use case), array on pure numerical data.
At least I want an option to do it. Table is NOT a serious computing data types in my opinion. Nobody really knows the internal structure and complexity of accessing data (what I know is row access is poor). I would not use it in any program excepted for importing data, and final reprentation for user interface.
Alexander
Alexander 2023년 10월 20일
Thanks for the two answers, I had to use your other one because I'm on R2022a (student, don't feel like continuously paying for updates) but Bruno does bring up a good point about the table datatype not being the best for serious computing.

댓글을 달려면 로그인하십시오.


Voss
Voss 2023년 10월 20일
syms a b
v = [a b];
n = numel(v);
k = 4;
result = v(dec2base(0:n^k-1,n)-'0'+1)
result = 

카테고리

Help CenterFile Exchange에서 Number Theory에 대해 자세히 알아보기

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by