MatrixCalc

MatrixCalc について

MatrixCalc は無料のオンライン行列計算機です。最大 50×50 の行列に対して、線形代数の基本的な演算——加算、減算、積、転置、行列式、逆行列、階数、トレース、べき乗、固有値——を実行し、その多くについて完全な計算過程を表示します。答えを書き写すだけでなく、考え方をたどれるようにするためです。

なぜ作ったのか

行列を扱うツールの多くは、説明なしに数値だけを返すか、広告や会員登録の壁の下に計算機を埋めてしまっています。これはすべてブラウザ内で動き、アカウントも不要で、宿題を確認したい人にも、手早く確実な答えがほしい人にも本当に役立つように作りました。

説明は数値と同じくらい大事です。det(A) = −59 とだけ表示してそこで終わる計算機は、試験で使えるものを何も与えてくれません。だからこのサイトの各演算ページには、ボタンの向こう側にある数学が書かれています。その結果が何を意味するのか、どうすれば手で再現できるのか、どの行列にはどの方法を選ぶべきか、そしてどんな誤りが実際に点を落とすのか、ということです。

計算の仕組み

すべて JavaScript でローカルに計算されます。入力した行列が端末の外に出ることはありません。裏で数学ライブラリを使ってはおらず、アルゴリズムは直接実装されています。どれが動くかは行列によって決まります。

  • 行列式は 2×2 と 3×3 では閉じた公式を、4×4 以上では部分ピボット選択つきの LU 分解を使います。余因子展開は n! 回の演算を要し、50×50 のはるか手前で実用に耐えなくなります。
  • 逆行列と階数は、拡大係数行列へのガウス・ジョルダンの消去法から求めます。
  • 固有値は、必ず収束する対称行列にはヤコビ回転法を、それ以外には Wilkinson シフトとデフレーションを伴う QR 法を使います。
  • 特性多項式は Faddeev–LeVerrier の漸化式を使い、記号的な行列式を展開するのではなく、累乗のトレースから係数を組み立てます。
  • 計算過程のパネル厳密な有理数演算による別のエンジンで動いています。途中の値が 0.6000000001 ではなく 3/5 のような分数で表示されるのはそのためです。0 になるはずの行はきちんと 0 になり、主成分と数えられてしまう 1e−16 のような残差を残しません。

結果をどう検証しているか

計算エンジンには、四則演算・掃き出し・分解・べき乗・固有値・行列の性質を対象とする自動テスト一式があり、何かがサイトに届く前に、変更のたびに実行されます。テストは、不具合を何度も直すのではなく一度で直すための方法です。誤った結果の報告が届いたとき、失敗した行列がまずテストケースになり、修正はそのあとに続きます。

固有値の処理もそうやって直りました。以前の版はシフトなしの QR 反復を使っており、ごく普通の非対称行列で収束しませんでした。固有値が 2、3、4 の三角行列だけで壊れてしまったのです。現在の版はデフレーションを伴う Wilkinson シフトを使っており、この後戻りはテストで固定されています。

既知の制限

  • 結果は 50×50 まで計算します。計算過程は 8×8 で止まります。それ以上では何百もの行列を並べることになり、何も伝わらないからです。
  • 固有値は数値的に求めるため、固有値にしか収束しません。スペクトルが複素の行列——たとえば回転——は、答えをでっち上げずに収束しなかったと報告します。
  • 固有値と固有ベクトルには計算過程のパネルがありません。アルゴリズムが代数的ではなく反復的なので、途中の値は丸めによるものであって、手で追える推論ではないからです。
  • 数値結果を出す経路は浮動小数点を使っています。厳密なのは計算過程のエンジンだけです。

言語

画面と解説文は 10 言語に対応しています:英語、ポルトガル語、スペイン語、フランス語、ドイツ語、ロシア語、インドネシア語、中国語、日本語、アラビア語。どの言語にも固有の URL と固有の文章があり、別の言語のページを機械翻訳して旗だけ差し替えたものは一つもありません。選択はブラウザに記憶されます。

お問い合わせ

不具合を見つけた、答えが間違っていた、この演算も追加してほしい——そんなときは franfactory.store@gmail.com までご連絡ください。誤った結果を報告する場合は、行列と実行した演算を添えていただけると、修正がずっと早くなります。