いろは3025218 views
教育150077 views
Computer370048 views
高校物理162509 views
ヒストリア294981 views
小学算数1203731 views
高校化学2933198 views
MathPython501700 views
高校国語790013 views
中学英語813624 views
Help
Tools

English

ヴァンデルモンド行列式|公式と証明

各行が等比数列になっている行列をヴァンデルモンド行列といいます。第 行は と並びます。

この行列の行列式は、成分をどれだけ増やしても、差の積というきれいな形に閉じます。

次なら 個の差を掛けるだけです。展開すれば 項ある式が、この形にまとまります。

HTML
CSS
JavaScript
<svg viewBox="0 0 460 220" width="100%" style="max-width:460px;display:block;margin:0 auto">
	<text x="230" y="22" font-size="11" fill="#9a9a9a" text-anchor="middle">各行が 1 から始まる等比数列になっています</text>
	<rect x="80" y="45" width="200" height="130" fill="none" stroke="#c8c8c8" stroke-width="1"></rect>
	<text x="110" y="75" font-size="13" fill="#1f1f1f" text-anchor="middle">1</text>
	<text x="170" y="75" font-size="13" fill="#1b81e0" text-anchor="middle">x<tspan font-size="9" dy="3">1</tspan></text>
	<text x="240" y="75" font-size="13" fill="#1b81e0" text-anchor="middle">x<tspan font-size="9" dy="3">1</tspan><tspan font-size="9" dy="-7">2</tspan></text>
	<text x="110" y="115" font-size="13" fill="#1f1f1f" text-anchor="middle">1</text>
	<text x="170" y="115" font-size="13" fill="#1b81e0" text-anchor="middle">x<tspan font-size="9" dy="3">2</tspan></text>
	<text x="240" y="115" font-size="13" fill="#1b81e0" text-anchor="middle">x<tspan font-size="9" dy="3">2</tspan><tspan font-size="9" dy="-7">2</tspan></text>
	<text x="110" y="155" font-size="13" fill="#1f1f1f" text-anchor="middle">1</text>
	<text x="170" y="155" font-size="13" fill="#1b81e0" text-anchor="middle">x<tspan font-size="9" dy="3">3</tspan></text>
	<text x="240" y="155" font-size="13" fill="#1b81e0" text-anchor="middle">x<tspan font-size="9" dy="3">3</tspan><tspan font-size="9" dy="-7">2</tspan></text>
	<line x1="295" y1="110" x2="330" y2="110" stroke="#9a9a9a" stroke-width="1"></line>
	<polygon points="333,110 324,106 324,114" fill="#9a9a9a"></polygon>
	<text x="398" y="98" font-size="12" fill="#1f1f1f" text-anchor="middle">(x2 - x1)(x3 - x1)</text>
	<text x="398" y="122" font-size="12" fill="#1f1f1f" text-anchor="middle">(x3 - x2) を掛ける</text>
	<text x="230" y="200" font-size="11" fill="#9a9a9a" text-anchor="middle">行列式は、すべての組の差を掛け合わせた形になります</text>
</svg>

ヴァンデルモンド行列とは

個の数 を並べて、第 行に の 乗から 乗までを置いた行列です。

転置した形で定義する流儀もあります。行列式は転置で変わらないので、公式はどちらでも同じです。

を節点と呼びます。多項式にいくつかの点で値を指定する場面から自然に現れる行列です。

行列式の公式

行列式は、節点のすべての組についての差の積になります。

次なら 3 個、 次なら 6 個の差を掛けます。掛ける順序は に固定しておかないと、符号が変わってしまいます。

例:3 次で確かめる

節点を 、、 とします。

サラスの方法で計算します。右下がりは 、、 で合計 、右上がりは 、、 で合計 です。

差は になります。公式のほうは で、一致しています。

例:符号が混ざる場合

節点を 、、 の順に取ります。順序を変えても公式は同じ形です。

公式に入れると です。

負の差が 2 つあるので、掛け合わせると正に戻ります。行列式を直接計算しても になります。

例:4 次では差が 6 個になる

節点を 、、、 とします。差の組は 通りです。

次の行列式を定義どおりに展開すれば 項ありますが、答は という小さな数にまとまります。

節点が等間隔なら、差の積は階乗の積の形になります。 から までを節点に取ると、 です。

0 になるのは同じ節点があるとき

差の積なので、 となるのは、どれか 2 つの節点が等しいときに限られます。

そのとき行列には同じ行が 2 つ並びます。行列式が になるのは当然です。

裏を返せば、節点がすべて異なれば は正則です。この言い換えが、あとで補間の話につながります。

証明:多項式と見て根を数える

だけを変数 と見て、 を の多項式として扱います。最後の行だけに が入るので、次数は 以下です。

のいずれかに一致すると、同じ行が 2 つできて行列式は になります。 個の根が分かったことになります。

したがって で割り切れます。次数が なので、残りは定数倍です。

その定数は の係数で、余因子展開すると 次のヴァンデルモンド行列式そのものです。あとは帰納法で結論が出ます。

証明:列を引いて次数を落とす

もうひとつの筋は、列に手を入れる方法です。右の列から順に、ひとつ左の列の 倍を引きます。

第 1 行はすべて になり、左上の だけが残ります。ほかの行では、第 列に が並びます。

各行から共通因数 をくくり出すと、 次のヴァンデルモンド行列が現れます。ここでも帰納法が使えます。

例:3 次で列操作をなぞる

節点 、、 の行列で実際にやってみます。第 3 列から第 2 列の 倍を、第 2 列から第 1 列の 倍を引きます。

第 1 行で展開すると、右下の 2 次の行列式だけが残ります。値は です。

その 2 次の行列は、第 1 行が 、第 2 行が という形をしています。共通因数 と をくくり出せば、節点 、 のヴァンデルモンド行列が出てきます。

くくり出した が に、残った行列式 が にあたります。

多項式補間との対応

個の点 を通る 次以下の多項式を探します。係数を と置くと、条件は連立一次方程式になります。

この係数行列がヴァンデルモンド行列です。節点がすべて異なれば正則なので、解がただ一つ決まります。

点を通る 次以下の多項式が一通りに決まる、という事実の中身がこれです。

例:3 点を通る 2 次式を求める

点 、、 を通る 2 次以下の多項式を求めます。

第 2 式から第 1 式を引くと 、第 3 式から第 2 式を引くと です。

差を取って 、そこから 、 が決まります。求める多項式は です。

を入れると 、、 に戻ります。係数行列の行列式が で でなかったので、この答以外にはありません。

HTML
CSS
JavaScript
<svg viewBox="0 0 460 220" width="100%" style="max-width:460px;display:block;margin:0 auto">
	<text x="230" y="22" font-size="11" fill="#9a9a9a" text-anchor="middle">3 点を通る 2 次以下の多項式は、ただ 1 つに決まります</text>
	<line x1="70" y1="190" x2="410" y2="190" stroke="#c8c8c8" stroke-width="1"></line>
	<line x1="80" y1="40" x2="80" y2="195" stroke="#c8c8c8" stroke-width="1"></line>
	<polyline points="91,177 133,173 176,163 219,147 261,126 304,100 347,68 368,49" fill="none" stroke="#1b81e0" stroke-width="1.5"></polyline>
	<circle cx="133" cy="173" r="3.5" fill="#1f1f1f"></circle>
	<circle cx="240" cy="138" r="3.5" fill="#1f1f1f"></circle>
	<circle cx="347" cy="68" r="3.5" fill="#1f1f1f"></circle>
	<text x="133" y="207" font-size="11" fill="#9a9a9a" text-anchor="middle">1</text>
	<text x="240" y="207" font-size="11" fill="#9a9a9a" text-anchor="middle">2</text>
	<text x="347" y="207" font-size="11" fill="#9a9a9a" text-anchor="middle">3</text>
	<text x="152" y="170" font-size="11" fill="#1f1f1f">(1, 1)</text>
	<text x="252" y="135" font-size="11" fill="#1f1f1f">(2, 3)</text>
	<text x="300" y="60" font-size="11" fill="#1f1f1f">(3, 7)</text>
	<text x="392" y="60" font-size="11" fill="#1b81e0" text-anchor="end">y = x² - x + 1</text>
</svg>

例:ラグランジュ基底で同じ答を出す

連立方程式を解くかわりに、基底を先に作る道もあります。節点 、、 に対する基底は次の 3 つです。

それぞれ、自分の節点で 、ほかの節点で になります。、 という具合です。

値を重みにして足します。

展開すると になり、さきほどと同じ答です。 の係数は と数えられます。

例:節点が重なると解けなくなる

節点を 、、 と取ってしまった場合を見ます。公式の差の積に が現れるので、行列式は です。

第 1 行と第 3 行が同じ並びになっているので、これは当たり前です。

での値を 2 通り指定してしまえば、そもそも問題として無理があります。異なる値を指定すれば解なし、同じ値なら解が無数にあります。

逆行列とラグランジュ基底

の逆行列の列には、ラグランジュ基底多項式の係数が並びます。

は で 、ほかの節点で になる多項式です。補間多項式は と書けます。

連立方程式を解く道と、基底を先に作る道は、同じ答に行き着きます。逆行列を明示的に書き下したものがラグランジュの公式だと見られます。

数値計算では条件数が悪い

理論の上ではきれいですが、数値計算では扱いにくい行列です。節点の数が増えると条件数が急に大きくなり、桁落ちが起きます。

原因は基底の選び方にあります。 は互いに似た形をしていて、区別がつきにくくなるからです。

実際の補間では、ニュートンの差分商やラグランジュの形で直接組み立てます。ヴァンデルモンド行列を作って解く方法は、次数が上がると避けられます。

例:節点が近いと行列式が急に小さくなる

節点を 、、 と、ごく近くに取ってみます。

差はそれぞれ 、、 です。積を取ると になります。

成分はどれも の近くにあり、行列そのものは小さくも大きくもありません。それでも行列式だけが極端に小さくなります。

節点の間隔が 分の になると、 次では行列式が 分の になります。逆行列の成分はその逆数で効くので、わずかな誤差が大きく増幅されます。

節点が重なるときの拡張

同じ節点で値と微分係数を指定したい場合には、合流型と呼ばれる拡張があります。重なった行を、微分した行に置き換える形です。

こうすると行列式は にならず、エルミート補間の問題が解けるようになります。もとの公式も、極限の形で引き継がれます。

他の話題とのつながり

離散フーリエ変換の行列は、節点を の 乗根に取ったヴァンデルモンド行列です。差の積が にならないことが、変換が可逆であることを保証します。

行列式の計算そのものは余因子展開やサラスの方法の記事に、 次までの具体的な計算はそちらにあります。連立方程式の可解性は、連立一次方程式の解の構造の記事とつながります。

よくある誤り

差の向きを にそろえないと符号が変わります。 で掛けると、組の個数が奇数のとき符号が反転します
節点の順序を入れ替えると、行列式の符号は変わります。値の絶対値は同じでも、符号までは保たれません
行列式が でないことと、補間多項式が存在することは同じ話ではありません。存在は次数を上げれば言えて、一意性のほうが行列式の条件に対応します
公式は正方の場合の話です。行と列の数が違うヴァンデルモンド行列には行列式がありません
条件数が悪いのは行列の性質であって、補間の問題そのものが悪いわけではありません。基底を変えれば安定に解けます
節点が近いだけでも数値的には苦しくなります。差が小さいと行列式が急に小さくなるからです
転置しても行列式は同じですが、行と列の役割は入れ替わります。どちらの流儀で書いているかは、はじめに確かめてください

参考文献

Vandermonde matrix - Wikipedia
Vandermonde-Matrix - Wikipedia(ドイツ語)
Matrice de Vandermonde - Wikipédia(フランス語)
范德蒙矩阵 - 维基百科(中国語)
各行が等比数列になっている行列の行列式は、節点の差をすべて掛け合わせた形にまとまります。公式の意味、多項式と見て根を数える証明、列を引いて次数を落とす証明、節点が重なると 0 になること、3 点を通る多項式が一通りに決まる理由、数値計算で条件数が悪くなる事情を、計算例をつけて解説します。