Matlab 排列组合

Matlab 排列组合

  • 1. n的阶乘:factorial(n)
  • 2. 组合数:
    • 2.1 nchoosek
  • 3. 排列数
    • 3.1 perms(v) 向量不重复所有元素排列
    • 3.2 permn(v,n) 可重复抽取向量 v 中 n 个元素的所有可能
    • 3.2 其他遇见的问题
      • e.g. [0 0 0 1]四个数的排列问题

1. n的阶乘:factorial(n)

n 为标量、向量、实数数组、非负整数。

2. 组合数:

2.1 nchoosek

n 取 m 的值(即二项式系数):nchoosek(n,m)

b = nchoosek(5,4);
% b = 5

向量 v 中一次取 k 个的所有可能:nchoosek(n,m)

v = 2:2:10;
C = nchoosek(v,4)
C = 5×4
    2     4     6     8
    2     4     6    10
    2     4     8    10
    2     6     8    10
    4     6     8    10
    
b = nchoosek(size(v,2),4);
b = 5

3. 排列数

3.1 perms(v) 向量不重复所有元素排列

v = [2 4 6];
P = perms(v)
P = 6×3
     6     4     2
     6     2     4
     4     6     2
     4     2     6
     2     6     4
     2     4     6

官方提示,length(v)<10 比较实用。

3.2 permn(v,n) 可重复抽取向量 v 中 n 个元素的所有可能

非matlab自带,需下载附加功能
Matlab 排列组合_第1张图片

b = permn([1,2,3],2)
b = 9x2
     1     1
     1     2
     1     3
     2     1
     2     2
     2     3
     3     1
     3     2
     3     3

3.2 其他遇见的问题

e.g. [0 0 0 1]四个数的排列问题

如果直接用 perms([0 0 0 1]), matlab 会把三个 0 当成不一样的元素。加上 unique 函数就可以了。

 perms([0 0 0 1])
 ans =
     1     0     0     0
     1     0     0     0
     1     0     0     0
     1     0     0     0
     1     0     0     0
     1     0     0     0
     0     1     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1
     0     0     1     0
     0     0     0     1
     0     1     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1
     0     0     1     0
     0     0     0     1
     0     1     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1
     0     0     1     0
     0     0     0     1
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 unique(perms([0 0 0 1]),"rows")
 ans =
     0     0     0     1
     0     0     1     0
     0     1     0     0
     1     0     0     0

你可能感兴趣的:(matlab,matlab,线性代数,矩阵)