Main Content

nchoosek

説明

b = nchoosek(n,k) は、n!/(k!(n - k)!) で定義される n および k の二項係数を返します。これは、n 個の中から k 個を同時に取り出す場合の組み合わせの数です。

C = nchoosek(v,k) は、ベクトル v の要素から k 個を同時に取り出すすべての可能な組み合わせの行列を返します。行列 Ckn!/(k!(n - k)!) 行です。ここで nlength(v) です。この構文で、k は非負の整数でなければなりません。

数値引数およびシンボリック引数の二項係数

次の式について二項係数を計算します。

syms n
[nchoosek(n, n), nchoosek(n, n + 1), nchoosek(n, n - 1)]
ans =
[ 1, 0, n]

どちらか一方または両方のパラメーターが負の数値の場合は、これらの数字をシンボリック オブジェクトに変換します。

[nchoosek(sym(-1), 3), nchoosek(sym(-7), 2), nchoosek(sym(-5), -5)]
ans =
[ -1, 28, 1]

どちらか一方または両方のパラメーターが複素数の場合は、これらの数値をシンボリック オブジェクトに変換します。

[nchoosek(sym(i), 3), nchoosek(sym(i), i), nchoosek(sym(i), i + 1)]
ans =
[ 1/2 + 1i/6, 1, 0]

二項係数を含む式の処理

diffexpand など、多くの関数は nchoosek を含む式を処理することができます。

二項係数を微分します。

syms n k
diff(nchoosek(n, 2))
ans =
-(psi(n - 1) - psi(n + 1))*nchoosek(n, 2)

二項係数を展開します。

expand(nchoosek(n, k))
ans =
-(n*gamma(n))/(k^2*gamma(k)*gamma(n - k) - k*n*gamma(k)*gamma(n - k))

パスカルの三角形

nchoosek を使用してパスカルの三角形を作成します。

m = 5;
for n = 0:m
    C = sym([]);
  for k = 0:n
    C = horzcat(C, nchoosek(n, k));
  end
  disp(C)
end
1
[ 1, 1]
[ 1, 2, 1]
[ 1, 3, 3, 1]
[ 1, 4, 6, 4, 1]
[ 1, 5, 10, 10, 5, 1]

ベクトル要素のすべての組み合わせ

15 列のシンボリック行ベクトルの要素を同時に 3 個および 4 個を取り出す場合のすべての組み合わせを求めます。

要素 x1x2x3x4 および x5 をもつ 15 列のシンボリック ベクトルを作成します。

v = sym('x', [1, 5])
v =
[ x1, x2, x3, x4, x5]

v の要素を同時に 3 個を取り出す場合のすべての組み合わせを求めます。

C = nchoosek(v, 3)
C =
[ x1, x2, x3]
[ x1, x2, x4]
[ x1, x3, x4]
[ x2, x3, x4]
[ x1, x2, x5]
[ x1, x3, x5]
[ x2, x3, x5]
[ x1, x4, x5]
[ x2, x4, x5]
[ x3, x4, x5]
C = nchoosek(v, 4)
C =
[ x1, x2, x3, x4]
[ x1, x2, x3, x5]
[ x1, x2, x4, x5]
[ x1, x3, x4, x5]
[ x2, x3, x4, x5]

入力引数

すべて折りたたむ

可能な選択の数。シンボリック数、変数、式または関数として指定します。

選択する数。シンボリック数、変数、式または関数として指定します。最初の引数がシンボリック ベクトル v の場合、k は非負の整数でなければなりません。

すべての選択肢の集合。シンボリック数、変数、式または関数のベクトルとして指定します。

出力引数

すべて折りたたむ

二項係数。非負のスカラー値として返されます。

v のすべての組み合わせ。v と同じ型の行列として返されます。

詳細

すべて折りたたむ

二項係数

n および k が整数で、0 ≤ k ≤ n の場合、二項係数は次のように定義されます。

(nk)=n!k!(nk)!

複素数の場合、二項係数は関数 gamma によって定義されます。

(nk)=Γ(n+1)Γ(k+1)Γ(nk+1)

ヒント

  • シンボリック オブジェクトではない数値について nchoosek を呼び出すと、MATLAB® 関数 nchoosek が呼び出されます。

  • 片方または両方のパラメーターが複素数または負の数値である場合、sym を使用してその数値をシンボリック オブジェクトに変換し、そのシンボリック オブジェクトに対して nchoosek を呼び出します。

アルゴリズム

k < 0 または n – k < 0 という条件では、nchoosek(n,k) は 0 を返します。

片方または両方の引数が複素数の場合、nchoosek は関数 gamma によって二項係数を表す式を使用します。

バージョン履歴

R2012a で導入

参考

| | |