行列の対角化
行が(2, 1)と(1, 2)の行列なら、固有値3と1、対角行列D、固有ベクトルの行列Pが得られ、A = P·D·P⁻¹が成り立ちます。対角化できない行列は、その旨をはっきり示します。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
処理はブラウザ内で完結します。ファイルは送信されません。無料でご利用いただけます。
対角化行列計算ツールは、正方行列を受け取り、その完全な固有値分解を返します。固有値、それらから構成される対角行列 D、そして対応する固有ベクトルを列に持つ基底変換行列 P により、A = P·D·P⁻¹ という形が得られます。対角化は難しい問題を簡単な問題へと変換します。行列のべき乗、行列指数関数、微分方程式、マルコフ連鎖はすべて、行列を固有基底で表現できれば成分ごとの単純な演算になります。特性多項式を手で解いたり、数値計算ライブラリーをインストールしたりする代わりに、成分を送信するだけで、決定論的な一回の呼び出しで分解結果が返ってきます。すべての値はお選びいただいた精度で丸められます。同じコードがこのページ上のブラウザーで無料で動作しますので、行列を貼り付けて確認することができ、ワークフローを自動化する場合にのみお支払いいただく形になります。
行列を対角化するとはどういう意味か
正方行列 A が対角化可能であるとは、基底を構成するのに十分な個数の独立な固有ベクトル、つまり n×n 行列であれば n 個の固有ベクトルを持つことを意味します。その場合、A = P·D·P⁻¹ と書くことができます。ここで D は固有値を対角成分に持つ対角行列であり、P は固有ベクトルを同じ順序で列に持つ基底変換行列です。
この分解が線形代数の中心的な成果の一つであるのは、対角行列が極めて扱いやすいからです。D の 50 乗は、各対角成分を 50 乗するだけで求まります。対角化行列計算ツールは、ご入力いただいた成分からこの因数分解を直接計算します。
固有値は大きい順に並べて返され、対角行列 D と完全な行列 P も返されますので、恒等式 A·P = P·D をご自身で検証したり、各部分を計算の次の段階へ渡したりすることができます。
計算の仕組み
アルゴリズムは完全に決定論的です。乱数による初期値もなく、実行ごとに変わる反復回数もありませんので、同じ行列からは常に同じ分解結果が得られます。統計学、物理学、最適化の分野で頻繁に現れる対称行列は、巡回ヤコビスイープで処理されます。
これは非対角成分をゼロにしながら、回転を固有ベクトル行列へ累積していく一連の平面回転です。ヤコビ法は巨大な行列に対しては理論上低速ですが、このツールが受け付ける中小規模のサイズでは極めて高精度であり、他の手法が苦労する重複固有値にも柔軟に対応できます。
一般の非対称行列については、ウィルキンソンシフト付き QR 反復で固有値を求め、続いて逆反復法によりそれぞれに対応する固有ベクトルを復元します。結果を返す前に、固有ベクトル行列 P が可逆であるかを確認します。出力のすべての成分は、ご指定の小数精度(0 桁から 15 桁まで、既定値は 10 桁)で丸められます。
チームでの活用場面
対角化は、線形システムが時間とともに発展するあらゆる場面に現れます。マルコフ連鎖の長期的な挙動を計算するエンジニアにとって、連鎖が収束するかどうか、またどの程度の速さで収束するかを知るには固有値が必要です。支配的な固有値とその固有ベクトルが定常状態を直接示します。
漸化式や連立差分方程式を扱う開発者は、遷移行列を対角化して反復計算の代わりに閉じた形の解を得ます。グラフィックスや幾何学では、変換を分解することで空間を伸縮させる軸が明らかになります。データチームにとっては構成要素としての役割もあります。
主成分分析は共分散行列の固有値分解であり、スペクトルグラフ法はラプラシアンの固有ベクトルから始まります。この機能はグローバルエッジ上で動作し、応答後に何も保存されませんので、自動化されたパイプラインにもすっきりと組み込めます。両方を動かしているのは同じモジュールだからです。
活用例
行列のべき乗を高速に計算
P と D を一度取得すれば、A^k は P·D^k·P⁻¹ として計算できます。各固有値を k 乗するだけです。
マルコフ連鎖を分析
支配的な固有値とその固有ベクトルを取り出し、定常分布と収束速度を求められます。
宿題や課題の確認
手計算による対角化の結果を、提出前に決定論的な参照結果と照合して検証できます。
よくある質問
行列が対角化できない場合はどうなりますか?
複素固有値を持つ行列や、n 個の独立な実固有ベクトルを持たない欠陥行列は、近似値ではなく明確なエラーで拒否されます。
結果はどのような順序で返されますか?
固有値は大きい順に返され、基底変換行列 P の列も同じ順序に従います。
答えはどのように検証すればよいですか?
A·P と P·D を掛け合わせてください。両者は一致するはずです。対称行列の場合、P の列は正規直交しているため、P⁻¹ は P の転置と等しくなります。
行列はどこかに保存されますか?
いいえ。 メモリー内で処理された後に破棄され、返されるのは分解結果のみです。
対角化すると何が便利になりますか?
行列のべき乗や指数、微分方程式、マルコフ連鎖の計算が、成分ごとの簡単な計算になります。たとえばDの50乗は、対角成分をそれぞれ50乗するだけで求まります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/math/diagonalize-matrix \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"matrix":[[2,1],[1,2]]}'const res = await fetch("https://api.kit.forhosting.com/math/diagonalize-matrix", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"matrix": [
[
2,
1
],
[
1,
2
]
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/diagonalize-matrix",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"matrix": [
[
2,
1
],
[
1,
2
]
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/diagonalize-matrix", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"matrix":[[2,1],[1,2]]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"matrix":[[2,1],[1,2]]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/diagonalize-matrix", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"matrix": [
[
2,
1
],
[
1,
2
]
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.diagonalize_matrix",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_n | 50 |
max_abs_entry | 1000000000000000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
行列を対角化するとはどういう意味か
行列が正方でない場合はリクエストが拒否され、複素固有値を持つ場合や実固有ベクトルの完全な組が存在しない場合には、もっともらしく見えて実際には誤っている数値を返すのではなく、その旨を明確にお伝えします。
計算の仕組み
列がほぼ平行な場合、その行列は古典的な [[1,1],[0,1]] のような欠陥行列であり対角化できませんので、静かに壊れた答えを返すのではなく、明確なエラーでリクエストが失敗します。
チームでの活用場面
スクリプトが夜間ジョブの一部として 1 回の呼び出しにつき $0.002 で行列を送信する一方、担当者は同じ行列をブラウザーで無料確認し、バイト単位で同一の結果を得られます。無料のウェブツールと有料 API のこの一致は意図的なものです。
技術的な質問
料金はいくらですか。
API 経由の場合、1 リクエストにつき $0.002 です。このページ上のブラウザーでも無料で実行でき、結果は同一です。
どのような行列を受け付けますか。
実数の有限値からなる 50×50 までの任意の正方行列です。正方でない入力は invalid_input エラーで拒否されます。