数学では、数式中にいわゆるびっくりマーク(感嘆符)の「!」が使われる事があります。これは階乗(factorial)を表す記号です。意味としてはすごく簡単なのですが、この記事では「具体的にどのような時に階乗を使うのか」という例も多く挙げる事で詳しく解説をします。
※プログラミングでは感嘆符「!」の記号が「否定」の意味で使われる場合があります。例えばプログラミング言語の1つである C# では「!=」は「等しくない」つまり一般の数学で使う「≠」を表します。他に論理演算での否定を表す事もできて、例えば「!(a >0)」は 「a >0」の否定(つまり a ≦0, プログラム上は a <=と書く)を表します。
しかしこの記事では、そういったプログラミングでの用法ではなく一般的な数式で使われる階乗の意味としての「!」記号について説明します。
階乗の定義と計算方法
階乗は自然数(および0)に対して考えるもので、
自然数nに対して「1からnまでの全ての自然数を掛け算したもの」を表します。
記号でそれを「n!」と書きます。
階乗は0または自然数である数nに対して定義し、「nの階乗」をn!と書きます。
nの階乗は次のようなものです。
- n≧1に対して、n!は1からnまでの自然数のそれぞれを乗じたもの。
n!=n(nー1)(nー2)(nー3)・・・×3×2×1 - n=0の時は0!=1と定義する。
(英語読みの場合、階乗そのものの事を factorial と呼び、n!のひとまとまりで n’s factorial と読みます。factor は「因数」(積の形になっている数を構成する各項)の事です。)
階乗は(n-1)!のような書き方も可能で、
(n-1)!=(n-1)(n-2)(n-3)・・・×3×2×1です。
ここでは少し大きめのnを想定していますが意味としては1からnまでの自然数を全て掛け合わせるという事なので、3!=3×2×1=6であり、2!=2×1=2であり、1!=1です。
【「1の掛け算」の×1の部分はもちろん計算結果に影響しないので書かなくても問題ありませんが、ここでは意味の分かりやすさのために敢えて書いています。】
階乗を「積の記号」を使って定義する事もできます。ただしかえって表記が面倒になるので、
むしろこのような「積の記号の代わり」に「!」記号という簡便な表記方法が使われていると言ってもよいかもしれません。
そう考えると「n!」という表記の便利さも少し見えるでしょうか。
nの階乗n!を次の形の式として定義する事もできます。
$$n!=\prod_{k=1}^{n}(n+1-k)$$
$$=n(n-1)(n-2)\cdots 3\cdot 2\cdot 1$$
積の記号は、文字としては「パイ」のキャピタル(大文字)です。
和の記号であるシグマΣと同類の記号です。
k=1から始まってk=nまで、記している形の項の積(掛け算)を表します。
0!=1と定義する事は先ほどと同じです。
小さい自然数の階乗についていくつか具体例を記しますが、計算結果は何回やっても毎回同じですので、n=5くらいまでは結果を覚えられるのであれば覚えてしまってもよいかもしれません。
- 5!=120 【5・4・3・2・1=120】
- 4!=24 【4・3・2・1=24】
- 3!=6 【3・2・1=6】
- 2!=2
- 1!=1
- 0!=1【定義】
ところで、階乗は「nから1までの自然数の積」であるわけですが数が途中から始まるような、例えば「4から10までの自然数の積」を表す記号はあるのでしょうか。そのような場合は、階乗の記号を使って少し工夫をして表記するのが普通です。
「4から10までの自然数の積」であれば、それは「1から10までの自然数の積」を「1から3までの自然数の積」で割ったものに等しくなります。つまり、4×5×6×7×8×9×10=10!/3!と書けるわけです。
そのようにして「階乗同士の割り算」を考える事で3以上の自然数から始まる一連の積を表す事ができます。より一般的に、自然数mから自然数nまでの自然数のそれぞれの積は2つの階乗を考えて割り算する事で表現できます。
2つの自然数mとn(0<m<n)があった時
mからnまでの自然数のそれぞれに対する積は次のように書けます。
$$m\cdot(m+1)\cdot(m+2)\cdots(n-2)\cdot(n-1)\cdot n=\frac{n!}{(m-1)!}$$
積の記号を使って次のようにも書けます。
(k=1に対する因数はnで、k=nーm+1が因数mに対応。)
$$\prod_{k=1}^{n-m+1}(n+1-k)=\frac{n!}{(m-1)!}$$
右辺における式の分母のほうでm!ではなく(m-1)!と書いているのは自然数の数え方の都合上、そのようにする必要があります。
例えば「1から20」を何かで割って「8から20」までの積としたい時には「1から20」を「1から7」で割る必要があります。つまり「mから1を引いた自然数」に対する階乗を考えなくてはいけません。つまり(m-1)!で割る必要があるわけです。
数学の諸理論と応用における階乗の使われ方
では次に、階乗は「何に使われるのか」「どういった数式の考察で役に立つのか」を見て行きましょう。後半の内容は高校では覚える必要のない事項ですが高校等の人にも参考にはなるかと思います。
例1:順列と組み合わせ
いわゆる「場合の数」として並び方や選び方を表す順列と組み合わせは、階乗を使って一般的な式を表して理解するのが便利です。
区別されるn個の「物」の並べ方が順列(パーミテーション)で、同じく区別されるn個の物からm個選び取る組の個数が組み合わせ(コンビネーション)です。これは、もう少し数学的に考えると何個かの要素数の集合があった時に順番を区別した場合や、何個かを抜き取って新しい集合を考える事を表します。
順列では例えば要素が4つあるなら次のように考えます。
4つの中から1つ選び、残り3つの中では3通り、
残り2つから2通りで4!=24通りの並べ方があるというわけです。
{A1,A2,A3,A4}という集合があった時に、順番も区別すると
{A2,A3,A1,A4}とか{A4,A2,A3,A1}とか様々なものがあって、全部では計算すると意外と多くて24通りもあるという事です。
このように順列は一般的に階乗を使って表されます。5!=120ですから、5つの要素を並び替えるなら120通りも方法がある事を意味します。
より一般的には、n個の要素からm個を取って並び替える事も順列に含めて考えて、nPmと書きます。これは「n-m+1からnまでの自然数の積」に等しく、階乗を使って表現できます。(前述の「mからnまでの自然数の積」の考え方を使います。)例えば7個から2個選ぶなら7×6通りですが、階乗を使うなら5!で割って7P2=7!/5!=7×6=42のようになるわけです。
全ての要素を並び替えるならnPn=n!通りです。
他方、組み合わせの場合には例えば4つの中から2つを選ぶ場合の数を4C2のように書き、これはn個からm個を取って並べたnPmの順番の区別をなくした場合の数に等しいのでmPm=m!で割ります。
n≧m≧0のもとで、
順列と組み合わせは階乗を使って式で次のように表す事ができます。
$$順列\hspace{5pt}_n\mathrm{P}_m=\frac{n!}{(n-m)!}$$
$$特にn=mの時は\hspace{5pt}_n\mathrm{P}_n=n!$$
$$組み合わせ\hspace{5pt}_n\mathrm{C}_m=\frac{_n\mathrm{P}_m}{m!}=\frac{n!}{m!(n-m)!}$$
順列のほうの式で分母については (nーm)!=(nーm+1-1)!です。
これはn=mの時に0!となりますが定義により0ではなく「1」として計算上扱えます。にn個の物を全て並び替える時はそもそもn!通りになると考えもよいのですが、
0!=1と定義されている事によって計算式にn=mを代入するという形でも整合性がとれるようになっています。
順列と組み合わせの双方について、形式上m=0の場合を考える事もできて値は1になります。
このような形で、階乗を計算に使う事ができます。これらを1つ1つn(n-1)(n-2)・・・と書いたり積の記号を使って書いたりすると非常に大変です。それを比較的簡潔に済ます表記方法として階乗の記号を使えるわけです。
例2:二項定理(二項展開)
上述の「組み合わせ」と直接関連して、二項定理(または二項展開)でも係数を階乗を使って表します。
二項定理とはnを自然数として(a+b)nの形の式を直接に展開して各項の係数を「a と b の組み合わせの数」に着目して表すものです。
nを自然数として、二項定理における各項の係数は組み合わせで表されます。 $$(a+b)^n=\sum_{k=0}^{n}\hspace{1pt}_n\mathrm{C}_ka^kb^{n-k}$$ $$=\hspace{1pt}_n\mathrm{C}_0a^n+\hspace{1pt}_n\mathrm{C}_1a^{n-1}b+\hspace{1pt}_n\mathrm{C}_2a^{n-2}b^2+\cdots+\hspace{1pt}_n\mathrm{C}_ka^kb^{n-k}+\cdots+\hspace{1pt}_n\mathrm{C}_nb^n$$ $$=a^n+na^{n-1}b+\frac{n(n-1)}{2!}a^{n-2}b^2+\cdots+\frac{n!}{k!(n-k)!}a^kb^{n-k}+\cdots+nab^{n-1}+b^n$$
この二項定理によれば例えば(a+b)3や(a+b)4などに関する「展開の公式」の暗記の必要は無くて、
(a+b)3におけるab2の係数などは3C1=3と計算できます。
必要性は無いかもしれませんが(a+b)7のように指数が大きい場合でも、例えばa3b4の係数は
7C3=7!/(3!4!)=7・6・5/(3・2・1)=35と計算できるわけです。
実は式としては二項定理の指数は自然数に限らず実数でもよく、
その事を指して一般二項定理と言います。一般二項定理において自然数でない実数で展開をすると組み合わせに似た形の項で係数を表せますが、計算を進めても係数が0にならずにずっと続く無限級数となるのが普通です。
例3:初等関数の高階微分
個数や方法の数などを数える時以外にも自然数や整数が計算式で扱われる事があります。その代表的なものの1つが微分です。例えば2次関数の2次の項がx2であったとして、これを微分するとd/dx(x2)=2xとなって明確に自然数が係数として結果に表れます。(参考:初等関数の微分公式)
xnの形の式(単項式)や自然対数関数に関しては微分操作をm回行った時の一般的な式を階乗を使って書く事ができます。これは、xnを微分するとnxn-1となる事に由来します。つまりその操作を続けるとn(n-1)(n-2)・・・という形ができるわけです。2回以上に渡って微分を行う操作を「高階微分」と言い、得られる導関数を高階導関数と言います。(具体的にm回の微分なら「m階」のように当てはめて使います。)
nとmを自然数としてn≧m>0とします。
微分をm回行って得られるn階導関数について次式が成立します。
$$\frac{d^m}{dx^m}x^n=(n-1)(n-2)\cdots(n-m+1)x^{n+m}=\frac{n!}{(n-m)!}x^{n+m}$$
$$\frac{d^m}{dx^m}\mathrm{ln}x=(-1)^{m-1}\frac{(m-1)!}{x^m}$$
いずれの式も基本的に微分を繰り返す事で規則的な係数が得られますが、数学的帰納法を使うとより明確に式を証明できます。
単項式の微分については指数が実数でも同じ形の導関数が得られます。そのため高階微分についても同じ形の項式が得られますが、xrに対してrが自然数でなく(整数でもない)場合は階乗の記号は使わずに(dm/dxm)xr=r(r-1)(r-2)・・・(r-m+1)xr-mという形に留める事が普通です。
他の初等関数の高階微分に関しては、三角関数については周期的に同じ形の導関数が現れ、
自然対数の底に対する指数関数 exでは何回微分しても同じ形の関数が得られます。
(eaxのような場合はn階導関数は aneaxです。)
例4:テイラー展開とマクローリン展開
何回でも微分可能などの諸条件を満たした関数について関数の形を問わず多項式による無限級数で表す方法があり、テイラー展開と言います。(どの座標の位置で微分を考えるかで形が変化し、原点で行うテイラー展開を特にマクローリン展開と言います。)
テイラー展開においては、関数の具体的な形によらずに係数に必ず階乗の形が含ます。導出・証明方法として部分積分を使う方法を考えると、その数学的根拠は比較的見やすくなります。部分積分では微分と積分が逆演算の関係にある事(微積分学の基本定理)を利用します。そして規則的に「階乗」の形になって各項の係数に現れる自然数も単項式の微分に由来するというわけです。
考えている閉区間で関数f(x)に対して諸条件(※)が成り立つ時には f(x)を各点で無限級数展開できます。
x= a におけるテイラー展開は次式です。
$$f(x)=f(a)+f'(a)(x-a)+\frac{f^{(2)}(a)}{2!}(x-a)^2+\frac{f^{(3)}(a)}{3!}(x-a)^3+\cdots$$
$$+\frac{f^{(n)}(a)}{n!}(x-a)^n+\frac{f^{(n+1)}(a)}{(n+1)!}(x-a)^{n+1}+\cdots$$
$$(1階の微分による導関数をf'(x)と書きn階微分による導関数をf^{(n)}(x)と表記)$$
x=0における展開(マクローリン展開)は次のようになります。
$$f(x)=f(0)+f'(0)x+\frac{f^{(2)}(0)}{2!}x^2+\frac{f^{(3)}(0)}{3!}x^3+\cdots+\frac{f^{(n)}(0)}{n!}x^n+\cdots$$
※閉区間内で微分が何回でも可能である、
テイラー公式における剰余項がn→∞で0に収束するなどの条件。
それら一部の条件が満たされていなくても、テイラー公式を作る事や漸近展開を行う事は可能である場合があります。
マクローリン展開のうち、三角関数や指数関数に対するものは形が規則的で考えやすいので特に重要で、他にもマクローリン展開は平方根の展開と近似に応用できる事もあります。
例5:統計力学での例とスターリングの公式
物理学での使用例としては、前述のマクローリン展開で特定の関数を多項式で近似する他に統計力学での使用があります。数式としての「階乗」がどのような形で使われるかを見るという点に絞って要点だけ述べるに留めますが、統計力学の中で分配関数という理論上重要となる関数の導出などで階乗についての取り扱いが必要になります。
考え方としてはマクロな状態の中に多くのミクロな状態が存在していて、ミクロな状態の数は
「N個の要素をM個の組に分ける場合の数」に等しいと仮定します。その分け方は場合の数の数学上の問題なのですが、W 通りであるとすると次式になります。
$$W=\frac{N!}{N_1!N_2!N_3!\cdots N_M!}$$
理論の流れとしてはこのWが最大になるような組み合わせを考えてマクロな状態量(熱力学的な)として扱えると考えていくのですが、そのために数式の扱いとしては上式の対数(底は e )を考えます。対数の基本的な性質により、積は和に、商は差に変換できます。
$$\mathrm{ln}W=\mathrm{ln}\frac{N!}{N_1!N_2!N_3!\cdots N_M!}=\mathrm{ln}(N!)-\mathrm{ln}(N_1!)-\mathrm{ln}(N_2!)-\mathrm{ln}(N_3!)-\cdots -\mathrm{ln}(N_M!)$$
ここで数式としてはさらに階乗の部分を和の形でそのまま分解する事も可能ではありますが、分配関数を導出するための理論ではむしろスターリングの公式というものを使って ln(N!) などの項の展開と近似を考えます。
スターリングの公式とは漸近展開の一種なのですが、ln(N!) に対してNが十分大きい自然数であれば連続的な自然対数関数 ln x の積分で近似できるというのが基本的な発想と考え方です。スターリングの近似式などとも言います。
簡単にだけ述べますが、まず次のようにします。
$$\mathrm{ln}(N!)=\mathrm{ln}1+\mathrm{ln}2+\mathrm{ln}3+\cdots+\mathrm{ln}N$$
これをグラフ上での長方形の面積の集まりと考える事で「Nが十分大きい時」という条件のもとで、
同じくグラフ上の「面積」でもある定積分との差を十小さくできると考えます。
ある程度小さい実数を a として、ln(N!) を次のように近似します。
(計算しやすいようにa =1/2などにする事が多い。)
$$\mathrm{ln}(N!)≒ \int_a^{a+n}\mathrm{ln}xdx$$
これを部分積分で計算し、いくつかの項を他の項と比べて著しく小さいので無視できるとしたものがスターリングの公式になります。
Nが十分大きい自然数である時、次式を近似式として使える場合があります。 $$\mathrm{ln}(N!)≒ N\mathrm{ln}N-N$$ 対数ではなくて指数で書いた場合は次式になります。 $$N!≒ N^Ne^{-N}=\frac{N^N}{e^N}$$ このスターリングの公式で実際にはどれくらいの誤差が出るのかという問題に関しては別の議論も必要ですが、参考までにNの値が数十~200程度であると誤差は4未満ほどになります。
統計力学の理論の流れの続きとしては、スターリングの公式で近似を行った後に主に未定乗数法という方法(物理学では時々使う方法)を使って分配関数を導出します。
スターリングの公式は少し異なった考え方のもとで別の形で書かれる事もあって、そちらを使うと近似が少し良くなる傾向があります。
次の形のものをスターリングの公式、スターリングの近似式と飛ぶ場合もあります。 $$n!≒\sqrt{2\pi n}N^Ne^{-N}=\frac{\sqrt{2\pi n}N^N}{e^N}$$ これは、実は次に述べる「ガンマ関数」の近似として導出する事が多い式です。
スターリングの公式の別バージョンの形をよく見ると
N!≒NNe-N の式にさらに乗じる項を付けて値を大きくしたものになっています。
しかし対数にすると実はその項はそれほど大きな変化をもたらすものではなく、誤差を縮める程度の補正になっています。
例6:ガンマ関数(特殊関数の1つ)での例
ガンマ関数とは「特殊関数」の1つで、初等関数に属さない関数です。
基本的には次のように積分での定義になります。
端点に不連続点があり極限値として定義される「広義積分」です。(積分自体も極限値として考えるものですが、定積分を行う時にさらに極限を考えるという事です。)
次の形のx>0の範囲で定義される特殊関数をガンマ関数と言います。 $$\Gamma (x)=\int_0^{\infty}t^{x-1}e^{-t}dt=\int_0^1(\mathrm{ln}t)^{x-t}dt$$ 多くの場合は広義積分の形で書かれ、最右辺の形との関連はt→lntの変数変換になります。
また、ガンマ関数には次の定義も存在します。
x>0の範囲でガンマ関数は次の形でも定義されます。 $$\Gamma (x)=\lim_{r\to\infty}\frac{r!r^x}{x(1+x)(2+x)(3+x)\cdots(r+x)}$$ (2つの定義が同等である事は自明ではなく、証明するのは結構面倒です。)
ガンマ関数には少し変わった性質があって、例えば変数として自然数を代入すると結果は自然数で、しかも階乗の形で規則的に表されます。
$$x=n\in\mathbb{N}の時、\Gamma (n)=(n-1)!$$
また、Γ(x+1)=xΓ(x)という関係も実は成立しています。
(この関係式は部分積分の公式によって導出できます。)
他にも、別の特殊関数のゼータ関数との関係など、様々な性質を有しています。実関数としてだけでなく、複素関数として考える事もあります(その場合には実部はプラスの数とします)。
前述のスターリングの公式の別バージョンとの関係ではまずt-xlntという関数を考えて「最小値(微分で導出)におけるテイラー展開」を計算します。そこで3次以降の項を小さいものとして無視し、ガンマ関数の積分の中身に当てはめてから積分を普通に計算するとΓ(x+1)の形でスターリングの公式の別版(変数はx)が得られます。
さらに、変数が自然数である場合にはΓ(n)=(n-1)!である事とΓ(x+1)=xΓ(x)の関係を合わせてΓ(n+1)=nΓ(n)=n・(n-1)!=n!という事でスターリングの公式の別バージョンの式になるという流れです。
こうして見ると階乗の意味と計算の仕方を知っておく事で、理論物理学から純粋数学まで、考察できる事の幅が広がる事が分かるのではないかと思います。