無料行列計算機

行列演算を実行します: 加算、減算、乗算、転置、行列式、逆行列。

行列A

行列B

仕組み

行列AとBの寸法を定義し、値を入力して、操作を選択します。計算機は寸法を確認し、操作を実行し、結果をクリアな行列グリッドに表示します。

サポートされている演算

よくある質問

どの行列の寸法がサポートされていますか?

最大6×6の行列がサポートされています。値を入力する前に、各行列の行数と列数を選択します。

いつ逆行列を計算できますか?

行列の逆行列は、正方行列(行と列の数が同じ)で行列式が0でない場合にのみ存在します。特異な行列(行列式 = 0)には逆行列がありません。

データは保存されますか?

いいえ。すべての計算はブラウザ内で実行されます。何も保存されたり、サーバーに送信されたりしません。

行列とは何か

行列とは行と列に数を並べた長方形の配列であり、1つの数学的オブジェクトとして扱われる。形状は行数を先にしたm × nと表記する(mが行数、nが列数)。内部の個々の数は要素(entries)または成分(elements)と呼ばれ、行i・列jにある要素は1始まりのインデックスを使ってaijと参照される。(数学論文をコードに移植する際のよくあるバグの1つは、この1始まりの慣例とC・Python・JavaScriptが使う0始まりのインデックスのミスマッチだ。)

ベクトルは1行(1 × n、「行ベクトル」)または1列(m × 1、「列ベクトル」)の行列だ。スカラーは1 × 1の行列だ。この入れ子構造は重要で、線形代数のあらゆる演算(内積・射影・変換)を行列演算として統一的に表現できることを意味する。これが1900年以降、行列が応用数学の普遍的な言語となった理由だ。

略史

最も古い先駆けは中国の九章算術(紀元前2世紀頃)で、連立1次方程式を解くために方程と呼ばれる表形式のガウス消去法を使用した。「matrix」という現代的な用語は英国の数学者James Joseph Sylvester(1850年)が造語し、「womb」(子宮)を意味するラテン語に由来する。部分行列式が育まれる構造という意味だ。基礎的な論文はSylvesterの友人で共同研究者のArthur Cayleyが1858年に書いた「A Memoir on the Theory of Matrices」で、行列の乗算・単位行列・零行列・逆行列を形式化し、行列を記法上の便宜から独立した代数に変えた。

19世紀後半から20世紀初頭にかけて、ガウス-ジョルダン消去法・固有値理論・スペクトル定理が行列を線形代数の中心的なツールとして確立した。20世紀の転換点はWerner Heisenbergの1925年の行列力学(量子論の定式化で物理学者が行列を真剣に考え始めた理由)、John von NeumannとHerman Goldstineの1947年の高次行列の数値的逆行列に関する論文(現代の数値線形代数の礎)、そして1979年のBLAS(Basic Linear Algebra Subprograms)と1992年のLAPACKのリリースだ。これらの最適化ライブラリはMATLABからNumPyまですべての科学計算プラットフォームが最終的に呼び出すものだ。

6つの基本演算の解説

加算と減算。両行列は同一の次元を持たなければならない。結果は同じ形状を持ち、各要素は成分ごとの和:cij = aij + bijとなる。2×3と3×2を加算することはできず、演算は未定義だ。行列の加算は通常の数の加算と同様に交換法則と結合法則が成り立つ。

行列の積。行列を強力にする演算であり、初めて出会う人の多くが誤解する。C = A × Bが定義されるには内側の次元が一致しなければならない:AがM × Nなら、BはN × Pでなければならず、結果CはM × Pとなる。中間の「N」が消え、外側の「M」と「P」が残る。各要素はAのある行とBのある列の内積として計算される:cij = Σ aik · bkj(kについて合計する)。

2×2の具体例:

A = [1 2]   B = [5 6]   A·B = [1·5+2·7  1·6+2·8] = [19 22]
    [3 4]       [7 8]         [3·5+4·7  3·6+4·8]   [43 50]

行列の積は可換ではない:一般にA·B ≠ B·Aであり、積が異なる形状を持つ場合もある。(Aが2×3でBが3×2なら、A·Bは2×2だがB·Aは3×3となる。)この非可換性が線形代数の豊かさの多くの源泉であり、Cayleyの1858年の論文が基礎的と見なされる理由だ。

転置ATと表記し、行と列を入れ替える。行i・列jにあった要素が行j・列iの要素になる。AがM × NならATはN × Mとなる。有用な等式:(A·B)T = BT·AT(順序が逆になる)。

行列式:正方行列を要約する1つのスカラー値だ。2×2の場合はad − bcで、より大きな行列には余因子展開による再帰的展開(4×4を超えると非実用的)またはLU分解(コンピューターが使うアルゴリズム、O(n³))が使われる。幾何学的には、行列式の絶対値は線形写像が面積(2Dの場合)・体積(3Dの場合)などをスケールする係数だ。行列式2は単位正方形が面積2の平行四辺形に写ることを意味し、負の行列式は向きが反転する(鏡映)ことを意味し、行列式0は変換がすべてを直線または点に潰すことを意味する。この行列は特異(非可逆)だ。

逆行列A⁻¹と表記し、A · A⁻¹ = A⁻¹ · A = Iを満たす唯一の行列だ(ここでIは単位行列)。逆行列はAの操作を「元に戻す」。非ゼロの行列式を持つ正方行列にのみ存在する。コンピューターはガウス-ジョルダン消去法またはLU分解によって逆行列を計算する。2×2の場合の有名な公式は(1/det) × [d, -b; -c, a]だ。

テキスト教科書の数学を超えた行列の重要性

現代のコンピューティングではすべての線形変換が行列で表されるため、行列はあらゆる場所に存在する:

知っておくべき特殊行列

数値的安定性の注意点

浮動小数点演算の行列演算には教科書の例では現れない落とし穴がある。行列の条件数は逆行列が入力の微小な摂動をどれだけ増幅するかを測定する。悪条件の行列では、ある要素の0.1%の誤差が結果に1000%の誤差をもたらすことがある。古典的な病的な例はHilbert行列(要素1/(i+j-1))で、その条件数はサイズに対して指数関数的に爆発する。6×6のHilbert行列はすでに条件数が約10⁷であり、逆行列では7桁の精度が失われることを意味する。

実際には、数値計算科学者がA⁻¹を明示的に計算することはほとんどない。A·x = bを解くにはLUまたはQR分解を使用し、逆行列を暗黙的に使用するには分解によってA⁻¹·bを計算し、A⁻¹を先に構築しない。悪条件または長方形の連立方程式にはSVDベースの疑似逆行列(Moore-Penrose逆行列)が好まれる。このツールは教育目的で明示的な逆行列を計算するが、小さいサイズでは問題なく、スケールアップ時には留意すべきだ。

正直なスコープ

このツールは最大6×6の行列に対して加算/減算/乗算/転置/行列式/逆行列を計算する。線形代数の最初のコースで学ぶ演算だ。固有値・固有ベクトル・行列分解(LU・QR・SVD)は計算しない。行の簡約ステップも表示しない。記号式や分数も扱わない。複素数も扱わない。A²·BTのような行列式も受け付けない。これらの機能が必要な場合はSymbolab・Wolfram Alpha・MATLAB・NumPy・Octave・SageMathが適切な次のステップだ。

さらなる質問

行列の積はなぜ可換でないのか?

行列は変換を表し、変換を適用する順序が重要だからだ。回転してから平行移動することは、平行移動してから回転することとは異なる。平行移動の動きは出発時の向きによって変わる。行列積の非可換性はこの物理的な事実の代数的なエンコードであり、3Dグラフィックスと量子力学が興味深い(そして難しい)理由だ。

行列が可逆でないのはいつか?

行列式がゼロのとき(同等に、行(または列)が線形従属のとき)、換言すると行列が表す線形変換が何らかの非ゼロベクトルをゼロに写すとき。幾何学的には、行列は高次元空間をより低次元の部分空間に写し、失った次元を回復できない。このような行列は「特異」と呼ばれる。悪条件だが技術的に可逆な行列の場合、逆行列は理論上は存在するが浮動小数点では非常に不正確になる。上記の数値的安定性のセクションを参照。

数学では1始まり、コードでは0始まりなのはなぜか?

数学の慣例は何世紀も前に遡る。最初の行は行1で、数え始めが1だからだ。プログラミング言語が0始まりのインデックスを選んだのは、配列メモリへのポインター演算が簡単になるからだ:オフセットiの要素はbase + i × element_sizeにあり、-1の補正係数が不要だ。どちらの慣例も深く根付いており、「行3」と言っている論文をmatrix[2]が必要なコードに変換することが最も信頼できるバグの源の一つだ。

最速の行列乗算アルゴリズムはあるか?

単純な三重ループアルゴリズムはO(n³)で動作する。Volker Strassenは1969年に2×2に対して(8回ではなく)7回の乗算で十分であることを示し、再帰的に適用するとO(n^2.807)の漸近的計算量を実現した。数十年にわたる改良で理論的な下限は約O(n^2.371)まで押し下げられたが、定数が非常に大きいため実際に遭遇するどんな行列に対してもBLAS/cuBLAS内で実装された単純なO(n³)が勝つ。下限は数学的に未解決で、少なくともO(n²)であることは分かっているが、正確な答えは誰も知らない。

サーバーに何か送信されますか?

いいえ。演算はブラウザー内のJavaScriptによる単純な浮動小数点演算だ。行列についての何もページから出ない。ツールは一度読み込まれればオフラインでも動作する。

関連ツール