1. 今回のスコープ
2. Vandermondeの行列式
前提ルール
- 行列の余因子展開
- 行列$A$の行列式の計算において、ある列の$\alpha$倍を他の行から引くとき、det($A$)の値は変わらない
- 行列Aのある行を非ゼロ定数$\beta$倍するとき、$\text{det}(A)$は$\alpha$倍となる
命題
\[\text{det}\left(
\begin{array}{ccccc}
1 & a_1 & \cdots & a_1^{n-2} & a_1^{n-1}\\
1&a_2 & \cdots & a_2^{n-2} & a_2^{n-1}\\
\vdots&\vdots & \cdots & \vdots & \vdots\\
1 & a_{n-1} & \cdots & a_{n-1}^{n-2} & a_{n-1}^{n-1}\\
1 & a_n & \cdots & a_n^{n-2} & a_n^{n-1}
\end{array}
\right)= (-1)^{n(n-1)/2}{\displaystyle\prod_{1\leq i<j\leq n}}(a_i - a_j)\]
証明
証明は帰納法を用います。(1) $n = 1$のときは両辺が1で成立。念の為、(2) $n = 2$のときを見てみると、
\(\text{det}\left(\begin{array}{cc}1 & a_1\\1&a_2\end{array}\right) = (a_2 - a_1)\)
で成立します。
(3) $n=k$ の場合:
$n=k-1$で成立することを仮定します。このとき、$n=k$でみてみます。なお簡略化のため
\(A \equiv \left(
\begin{array}{ccccc}
1 & a_1 & \cdots & a_1^{k-2} & a_1^{k-1}\\
1&a_2 & \cdots & a_2^{k-2} & a_2^{k-1}\\
\vdots&\vdots & \cdots & \vdots & \vdots\\
1 & a_{k-1} & \cdots & a_{k-1}^{k-2} & a_{k-1}^{k-1}\\
1 & a_k & \cdots & a_k^{k-2} & a_k^{k-1}
\end{array} \right)\)
と表記します。
まず、(k-1)列目を$a_1$倍して、k列目から引きます。
\(\text(det)(A) = \text(det)\left(
\begin{array}{ccccc}
1 & a_1 & \cdots & a_1^{k-2} & 0\\
1&a_2 & \cdots & a_2^{k-2} & a_2^{k-2}(a_2 - a_1)\\
\vdots&\vdots & \cdots & \vdots & \vdots\\
1 & a_{k-1} & \cdots & a_{k-1}^{k-2} & a_{k-1}^{k-2}(a_{k-1} - a_1)\\
1 & a_k & \cdots & a_k^{k-2} & a_k^{k-2}(a_k - a_1)
\end{array} \right)\)
次に(k-2)列目を$a_1$倍して、(k-1)列目から引きます。
\[\text{det}(A) = \text(det)\left(
\begin{array}{ccccc}
1 & a_1 & \cdots & a_1^{k-2} & 0\\
1&a_2 & \cdots & a_2^{k-2} & a_2^{k-2}(a_2 - a_1)\\
\vdots&\vdots & \cdots & \vdots & \vdots\\
1 & a_{k-1} & \cdots & a_{k-1}^{k-2} & a_{k-1}^{k-2}(a_{k-1} - a_1)\\
1 & a_k & \cdots & a_k^{k-2} & a_k^{k-2}(a_k - a_1)
\end{array} \right) =
\text{det}\left(
\begin{array}{ccccc}
1 & a_1 & \cdots & 0 & 0\\
1&a_2 & \cdots & a_2^{k-3}(a_2-a_1) & a_2^{k-2}(a_2 - a_1)\\
\vdots&\vdots & \cdots & \vdots & \vdots\\
1 & a_{k-1} & \cdots & a_{k-1}^{k-3}(a_{k-1}-a_1) & a_{k-1}^{k-2}(a_{k-1} - a_1)\\
1 & a_k & \cdots & a_k^{k-3}(a_k-a_1) & a_k^{k-2}(a_k - a_1)
\end{array} \right)\]
これを繰り返していき
\[\begin{aligned}
\text{det}(A) &= \text{det}\left(
\begin{array}{ccccc}
1 & 0 & \cdots & 0 & 0\\
1&a_2-a_1 & \cdots & a_2^{k-3}(a_2-a_1) & a_2^{k-2}(a_2 - a_1)\\
\vdots&\vdots & \cdots & \vdots & \vdots\\
1 & a_{k-1}-a_1 & \cdots & a_{k-1}^{k-3}(a_{k-1}-a_1) & a_{k-1}^{k-2}(a_{k-1} - a_1)\\
1 & a_k-a_1 & \cdots & a_k^{k-3}(a_k-a_1) & a_k^{k-2}(a_k - a_1)
\end{array} \right)\\
&= \text{det}\left(
\begin{array}{ccccc}
1 & 0 & \cdots & 0 & 0\\
0&a_2-a_1 & \cdots & a_2^{k-3}(a_2-a_1) & a_2^{k-2}(a_2 - a_1)\\
\vdots&\vdots & \cdots & \vdots & \vdots\\
0 & a_{k-1}-a_1 & \cdots & a_{k-1}^{k-3}(a_{k-1}-a_1) & a_{k-1}^{k-2}(a_{k-1} - a_1)\\
0 & a_k-a_1 & \cdots & a_k^{k-3}(a_k-a_1) & a_k^{k-2}(a_k - a_1)
\end{array} \right)
\end{aligned}\]
を得ます。余因子展開からわかるように
\[\text{det}\left(
\begin{array}{ccccc}
1 & 0 & \cdots & 0 & 0\\
0&a_2-a_1 & \cdots & a_2^{k-3}(a_2-a_1) & a_2^{k-2}(a_2 - a_1)\\
\vdots&\vdots & \cdots & \vdots & \vdots\\
0 & a_{k-1}-a_1 & \cdots & a_{k-1}^{k-3}(a_{k-1}-a_1) & a_{k-1}^{k-2}(a_{k-1} - a_1)\\
0 & a_k-a_1 & \cdots & a_k^{k-3}(a_k-a_1) & a_k^{k-2}(a_k - a_1)
\end{array} \right)=\text{det}\left(
\begin{array}{cccc}
a_2-a_1 & \cdots & a_2^{k-3}(a_2-a_1) & a_2^{k-2}(a_2 - a_1)\\
\vdots & \cdots & \vdots & \vdots\\
a_{k-1}-a_1 & \cdots & a_{k-1}^{k-3}(a_{k-1}-a_1) & a_{k-1}^{k-2}(a_{k-1} - a_1)\\
a_k-a_1 & \cdots & a_k^{k-3}(a_k-a_1) & a_k^{k-2}(a_k - a_1)
\end{array} \right)\]
前提ルール3より
\[\begin{aligned}
\text{det}\left(
\begin{array}{cccc}
a_2-a_1 & \cdots & a_2^{k-3}(a_2-a_1) & a_2^{k-2}(a_2 - a_1)\\
\vdots & \cdots & \vdots & \vdots\\
a_{k-1}-a_1 & \cdots & a_{k-1}^{k-3}(a_{k-1}-a_1) & a_{k-1}^{k-2}(a_{k-1} - a_1)\\
a_k-a_1 & \cdots & a_k^{k-3}(a_k-a_1) & a_k^{k-2}(a_k - a_1)
\end{array} \right) &=(a_2-a_1)\cdots(a_k-a_1)\text{det}\left(
\begin{array}{cccc}
1& \cdots & a_2^{k-3} & a_2^{k-2}\\
\vdots & \cdots & \vdots & \vdots\\
1 & \cdots & a_{k-1}^{k-3} & a_{k-1}^{k-2}\\
1 & \cdots & a_k^{k-3} & a_k^{k-2}
\end{array} \right) \\
&= (-1)^k(a_1-a_2)\cdots(a_1-a_k)(-1)^{(k-1)(k-2)/2}{\displaystyle\prod_{2\leq i<j\leq k}}(a_i - a_j)\\
&= (-1)^{k(k-1)/2}{\displaystyle\prod_{1\leq i<j\leq k}}(a_i - a_j)
\end{aligned}\]
証明終了。
3. Pythonでの計算方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| import numpy as np
def vandermonde(A):
"""
INPUT:
[[ 1 2 4 8]
[ 1 3 9 27]
[ 1 4 16 64]
[ 1 5 25 125]]
Returns:
determinant
"""
det = 1
#array_size = A.shape[0]
#col_array = A[:, 1]
col_array = [i[1] for i in A]
array_size = len(col_array)
for i in range(array_size):
for j in range(i):
det *= (col_array[j] - col_array[i])
return det * (-1) ** (array_size*(array_size-1)/2)
def main():
A = np.vander(np.arange(2, 6))[:, ::-1]
A = [l.tolist() for l in list(A)]
res = vandermonde(A)
print(res)
if __name__ = 'main':
main()
|
Share Buttons
Share on:
Feature Tags
Leave a Comment
(注意:GitHub Accountが必要となります)