行列式を行列のべき乗のトレースたちの多項式として表すこと

物理の本を読んでいたら、{3\times 3} 行列についての次のような公式が出てきた:
{3!|A| = (\mathrm{tr}A)^3 - 3\mathrm{tr}(A^2)\mathrm{tr}(A) + 2\mathrm{tr}(A^3).  }
気になってネットで調べると,{2\times 2} 行列のとき、次の関係式が成り立つのだそうだ:
{2!|A| = (\mathrm{tr}A)^2 - \mathrm{tr}(A^2).}
一般の{n} の場合はどうなるのか気になって考えた.

一般に,{n} 次正方行列 {A} は(適当に取った)ユニタリ行列 {U} によって,対角成分が {A} の固有値であるような上三角行列に変換できる:
{U^*AU = \left[      \begin{array}{ccc}        \lambda_1 & {} & * \\        {} & \ddots & {} \\       0 & {} & \lambda_n      \end{array}    \right].}
ユニタリ行列の性質から,任意の自然数 {k} に対して
{U^*A^kU = \left[      \begin{array}{ccc}        \lambda_1^k & {} & * \\        {} & \ddots & {} \\       0 & {} & \lambda_n^k      \end{array}    \right].}
固有多項式はユニタリ変換で不変なので,その {n-1} 次の項を比較することで次を得る:
{\mathrm{tr}(A^k) = \mathrm{tr}(U^*A^kU) = \lambda_1^k + \cdots+ \lambda_n^k.}
よって,行列のべき乗のトレースが固有値のニュートン多項式になっていることがわかる.ここで, {n} 変数の {k} 次ニュートン多項式 {S_k(x_1,...,x_n) := x_1^k + ... + x_n^k.}

さて, {n} 変数の {k} 次基本対称式 {B_k(x_1,...,x_n)} は次のように定義されるのだった:
{B_k(x_1,...,x_n) :=\sum_{1 \le j_1 < ...< j_k \le n} x_{j_1}\cdot ... \cdot x_{j_k}.}

特に,{B_n(\lambda_1, ..., \lambda_n) = |A|} となることに注意する.行列式もトレースも,ユニタリ変換で上三角化した行列の対角成分だけで決まる.このことから「行列式を行列のべき乗のトレースたちの関数として表す問題」は「{B_n}{S_1, ..., S_n} たちの関数として表す問題」に帰着できることがわかる.

基本対称式とニュートン多項式の間には次のような関係式が成り立つ:
{B_{k+1} = \frac{1}{k+1} \left\{  \left( \sum_{0\le s < k} B_{k-s} S_{s+1} \right) + (-1)^k S_{k+1} \right\}.} ただし {k=0, ..., n-1.}

順番に具体的な式を幾つか書いてみると:
{B_1=S_1.}

{B_2=\frac{1}{2}(B_1S_1 - S_2).}

{B_3 = \frac{1}{3}(B_2S_1 - B_1S_2 + S_3).}

最初の式を2番目の式に,最初と2番目の式を三番目に代入すると次のような式を得る:

{B_2=\frac{1}{2!}(S_1^2 - S_2).}

{B_3 = \frac{1}{3!}(S_1^3 - 3S_1S_2 + 2S_3 ).}

これらの式は最初に紹介した式と強く結びついていることがわかる.これ以上手計算でやるのは面倒なのでMaximaに続きをやらせることにしたいが,Maximaで関数の定義を書くのが面倒になったので次のようなHaskellの使い捨てコードを書いてみた:

(++#) :: String -> String -> String
(++#) a [] = a
(++#) a b = a ++ "," ++ b

sn :: Int -> String
sn n = "(" ++ foldr (++#) "" [ "S"++show k | k <- [1 .. n]] ++ ")"

f :: Int -> IO ()
f k =
	let out = 
		"B" ++ (show (k+1)) ++ sn(k+1) 
		++ ":=(1/" ++ (show (k+1)) ++ ")*("
		++ foldr (++) "" [ "(-1)^" ++ show t 
		++ "*B" ++ show(k-t) ++ sn(k-t) 
		++ "*S" ++ show(t+1) ++ "+" | t <- [0 .. k-1]]
		++ "(-1)^" ++ show k ++ "*S" ++ show(k+1) ++ ");"
	in putStrLn out
$ ghci
Prelude>:l a.hs
[1 of 1] Compiling Main             ( a.hs, interpreted )
Ok, modules loaded: Main.
*Main>  mapM_ f [0 .. 10]
B1(S1):=(1/1)*((-1)^0*S1);
B2(S1,S2):=(1/2)*((-1)^0*B1(S1)*S1+(-1)^1*S2);
B3(S1,S2,S3):=(1/3)*((-1)^0*B2(S1,S2)*S1+(-1)^1*B1(S1)*S2+(-1)^2*S3);
B4(S1,S2,S3,S4):=(1/4)*((-1)^0*B3(S1,S2,S3)*S1+(-1)^1*B2(S1,S2)*S2+(-1)^2*B1(S1)*S3+(-1)^3*S4);
B5(S1,S2,S3,S4,S5):=(1/5)*((-1)^0*B4(S1,S2,S3,S4)*S1+(-1)^1*B3(S1,S2,S3)*S2+(-1)^2*B2(S1,S2)*S3+(-1)^3*B1(S1)*S4+(-1)^4*S5);
B6(S1,S2,S3,S4,S5,S6):=(1/6)*((-1)^0*B5(S1,S2,S3,S4,S5)*S1+(-1)^1*B4(S1,S2,S3,S4)*S2+(-1)^2*B3(S1,S2,S3)*S3+(-1)^3*B2(S1,S2)*S4+(-1)^4*B1(S1)*S5+(-1)^5*S6);
B7(S1,S2,S3,S4,S5,S6,S7):=(1/7)*((-1)^0*B6(S1,S2,S3,S4,S5,S6)*S1+(-1)^1*B5(S1,S2,S3,S4,S5)*S2+(-1)^2*B4(S1,S2,S3,S4)*S3+(-1)^3*B3(S1,S2,S3)*S4+(-1)^4*B2(S1,S2)*S5+(-1)^5*B1(S1)*S6+(-1)^6*S7);
B8(S1,S2,S3,S4,S5,S6,S7,S8):=(1/8)*((-1)^0*B7(S1,S2,S3,S4,S5,S6,S7)*S1+(-1)^1*B6(S1,S2,S3,S4,S5,S6)*S2+(-1)^2*B5(S1,S2,S3,S4,S5)*S3+(-1)^3*B4(S1,S2,S3,S4)*S4+(-1)^4*B3(S1,S2,S3)*S5+(-1)^5*B2(S1,S2)*S6+(-1)^6*B1(S1)*S7+(-1)^7*S8);
B9(S1,S2,S3,S4,S5,S6,S7,S8,S9):=(1/9)*((-1)^0*B8(S1,S2,S3,S4,S5,S6,S7,S8)*S1+(-1)^1*B7(S1,S2,S3,S4,S5,S6,S7)*S2+(-1)^2*B6(S1,S2,S3,S4,S5,S6)*S3+(-1)^3*B5(S1,S2,S3,S4,S5)*S4+(-1)^4*B4(S1,S2,S3,S4)*S5+(-1)^5*B3(S1,S2,S3)*S6+(-1)^6*B2(S1,S2)*S7+(-1)^7*B1(S1)*S8+(-1)^8*S9);
B10(S1,S2,S3,S4,S5,S6,S7,S8,S9,S10):=(1/10)*((-1)^0*B9(S1,S2,S3,S4,S5,S6,S7,S8,S9)*S1+(-1)^1*B8(S1,S2,S3,S4,S5,S6,S7,S8)*S2+(-1)^2*B7(S1,S2,S3,S4,S5,S6,S7)*S3+(-1)^3*B6(S1,S2,S3,S4,S5,S6)*S4+(-1)^4*B5(S1,S2,S3,S4,S5)*S5+(-1)^5*B4(S1,S2,S3,S4)*S6+(-1)^6*B3(S1,S2,S3)*S7+(-1)^7*B2(S1,S2)*S8+(-1)^8*B1(S1)*S9+(-1)^9*S10);
B11(S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11):=(1/11)*((-1)^0*B10(S1,S2,S3,S4,S5,S6,S7,S8,S9,S10)*S1+(-1)^1*B9(S1,S2,S3,S4,S5,S6,S7,S8,S9)*S2+(-1)^2*B8(S1,S2,S3,S4,S5,S6,S7,S8)*S3+(-1)^3*B7(S1,S2,S3,S4,S5,S6,S7)*S4+(-1)^4*B6(S1,S2,S3,S4,S5,S6)*S5+(-1)^5*B5(S1,S2,S3,S4,S5)*S6+(-1)^6*B4(S1,S2,S3,S4)*S7+(-1)^7*B3(S1,S2,S3)*S8+(-1)^8*B2(S1,S2)*S9+(-1)^9*B1(S1)*S10+(-1)^10*S11);

これらの式をMaximaにコピペしてやってから例えば

expand(ratsimp( 3! * B3(S1, S2, S3)));

としてやると {2\,S3-3\,S1\,S2+{S1}^{3}} が出てくるので,どうやらうまく行っている様子だ.
同様にして計算すれば,{n} 次正方行列についての {n!\, |A|} は次のように求まる:

{4!\, |A| = -6\,\mathrm{tr}(A^4)+8\,\mathrm{tr}(A)\,\mathrm{tr}(A^3)+3\,{\mathrm{tr}(A^2)}^{2}-6\,{\mathrm{tr}(A)}^{2}\,\mathrm{tr}(A^2)+{\mathrm{tr}(A)}^{4}.}

{5!\,|A| = 24\,\mathrm{tr}(A^5)-30\,\mathrm{tr}(A)\,\mathrm{tr}(A^4)-20\,\mathrm{tr}(A^2)\,\mathrm{tr}(A^3)}
{ +20\,{\mathrm{tr}(A)}^{2}\,\mathrm{tr}(A^3)+15\,\mathrm{tr}(A)\,{\mathrm{tr}(A^2)}^{2}-10\,{\mathrm{tr}(A)}^{3}\,\mathrm{tr}(A^2)}
{   +{\mathrm{tr}(A)}^{5}.}

{6!\,|A| = -120\,\mathrm{tr}(A^6)+144\,\mathrm{tr}(A)\,\mathrm{tr}(A^5)+90\,\mathrm{tr}(A^2)\,\mathrm{tr}(A^4)}
{    -90\,{\mathrm{tr}(A)}^{2}\,\mathrm{tr}(A^4)+40\,{\mathrm{tr}(A^3)}^{2}-120\,\mathrm{tr}(A)\,\mathrm{tr}(A^2)\,\mathrm{tr}(A^3)}
{    +40\,{\mathrm{tr}(A)}^{3}\,\mathrm{tr}(A^3)-15\,{\mathrm{tr}(A^2)}^{3}+45\,{\mathrm{tr}(A)}^{2}\,{\mathrm{tr}(A^2)}^{2}-15\,{\mathrm{tr}(A)}^{4}\,\mathrm{tr}(A^2)+{\mathrm{tr}(A)}^{6}.}

{7!\,|A| = 720\,\mathrm{tr}(A^7)-840\,\mathrm{tr}(A)\,\mathrm{tr}(A^6)-504\,\mathrm{tr}(A^2)\,\mathrm{tr}(A^5)}
{+504\,{\mathrm{tr}(A)}^{2}\,\mathrm{tr}(A^5)-420\,\mathrm{tr}(A^3)\,\mathrm{tr}(A^4)+630\,\mathrm{tr}(A)\,\mathrm{tr}(A^2)\,\mathrm{tr}(A^4)}
{-210\,{\mathrm{tr}(A)}^{3}\,\mathrm{tr}(A^4)+280\,\mathrm{tr}(A)\,{\mathrm{tr}(A^3)}^{2}+210\,{\mathrm{tr}(A^2)}^{2}\,\mathrm{tr}(A^3)}
{-420\,{\mathrm{tr}(A)}^{2}\,\mathrm{tr}(A^2)\,\mathrm{tr}(A^3)+70\,{\mathrm{tr}(A)}^{4}\,\mathrm{tr}(A^3)}
{-105\,\mathrm{tr}(A)\,{\mathrm{tr}(A^2)}^{3}+105\,{\mathrm{tr}(A)}^{3}\,{\mathrm{tr}(A^2)}^{2}-21\,{\mathrm{tr}(A)}^{5}\,\mathrm{tr}(A^2)}
{+{\mathrm{tr}(A)}^{7}.}

こうして眺めていても規則性がわからなかったが,WikipediaのExpressing elementary symmetric polynomials in terms of power sumsを見ると,一般項がどのような形になるか書いてある.興味が出てきたら考えてみることにする.