コレスキー分解計算機
対称正定値行列を、下三角行列 L とその転置の積に分解します。1行目が 4, 12, −16 の定番の3×3の例では、対角成分が2、1、3の L になります。連立方程式を解くときや乱数サンプルの生成に便利です。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
処理はブラウザ内で完結します。ファイルは送信されません。無料でご利用いただけます。
コレスキー分解は、連立一次方程式を解き、相関のある乱数サンプルを生成し、行列がそもそも正定値かどうかを判定するための標準的な手法です。分解が存在すれば、その行列は定義上正定値です。行列を行の配列として送信すると、因子、入力された行列、使用した手法を、1回の決定的な呼び出しで受け取れます。行列が対称でない、正方でない、または正定値でない場合、もっともらしい誤った答えを返すのではなく、その理由を正確にお知らせします。
コレスキー分解が実際に提供するもの
対称正定値行列 A は常に、下三角行列とその転置の積として A = L·Lᵀ と書くことができます。この因子 L はいわば行列の平方根であり、これがあれば、コストの高いいくつかの問題が安くなります。A·x = b を解くのに一般的な消去法はもう不要です。
L·y = b を前進代入で解き、次に Lᵀ·x = y を後退代入で解けばよく、どちらも二次時間で済みます。
行列の逆行列の計算、行列式(L の対角成分の二乗の積)の計算、乱数ベクトルの白色化や相関付けは、すべて三角行列に対する操作に帰着します。コレスキー分解計算機が返すのはまさにこの因子、つまり対角成分が正でそれより上がすべてゼロの n×n 下三角行列です。
計算は固定の丸めを伴う決定的な浮動小数点演算なので、同じ入力は常にバイト単位で同一の出力を生成し、結果をキャッシュ・比較・保存しても安全です。
分解の計算方法と検証方法
各対角位置では A の対応する成分を取り、それまでに計算した因子の行の二乗ノルムを引き、平方根を取ります。対角より下の各位置では、2つの部分行の内積を引き、既知の対角成分で割ります。この唯一の平方根は、正定値性の決定的な判定でもあります。
根号の中の量がすべての行で正であることは、行列が正定値であることと同値です。その前に入力は検証されます。最大 50 行の正方配列であること、各成分が宣言された大きさの上限内の有限数であること、鏡像の成分が相対許容誤差内で一致していることが必要です。
対称でない行列にはコレスキー分解が存在しないからです。
実務でどこに位置づくか
コレスキー分解の典型的な活躍の場は、統計学と数値計算の2つです。統計学では、共分散行列 Σ を持つ多変量正規分布からのサンプリングは、独立な標準正規乱数のベクトルに Σ のコレスキー因子を掛けることを意味します。モンテカルロエンジンはこれを何百万回も行うため、因子を事前に一度、正しく計算しておく必要があります。
数値計算では、最小二乗問題、カルマンフィルタ、内点法オプティマイザが、反復ごとに対称正定値系を解きます。コレスキー法は対称性を利用しピボット選択が不要なため、一般的な LU 分解のおよそ2倍の速さです。
共分散行列をサンプラーに渡す前に有効か確認したいとき、線形代数ライブラリをリンクせずにパイプラインで因子が必要なとき、自分のコードが出した結果についてセカンドオピニオンが欲しいときに役立ちます。行列を貼り付けて因子を確認し、呼び出しを自動化するときだけお支払いください。
活用例
サンプリング前に共分散行列を検証する
推定した共分散行列・相関行列が本当に正定値かを確認し、相関のあるモンテカルロ抽出に必要な因子を取得してから、シミュレーションを汚染するのを防ぎます。
ライブラリなしで対称系を解く
L を一度取得すれば、あとは任意の言語の自作コードで2回の三角代入により A·x = b を解けます。LAPACK や NumPy をリンクする必要はありません。
自作の線形代数コードを突き合わせる
自分の実装が生成した因子を独立した決定的な結果と比較し、インデックス付けや丸めのバグを見つけます。
よくある質問
どのような行列が受け付けられますか?
最大 50×50 の正方行列で、相対許容誤差内で対称、成分は大きさ 1e15 までの有限数です。正方でない、対称でない、または正定値でない入力は、具体的なエラーメッセージとともに拒否されます。
正確には何が返されますか?
A = L·Lᵀ を満たす下三角因子 L が、指定した精度(既定は小数 10 桁)に丸められて返されます。入力行列、次元、手法名、使用した式も含まれます。
行列は保存されますか?
いいえ。 メモリ内で処理されて破棄され、計算された応答だけが関数から返されます。
結果の精度はどのくらいですか?
因子は倍精度浮動小数点で計算され、要求された桁数に丸められます。サイズ制限内の条件の良い行列では、丸められた結果はその精度で A ≈ L·Lᵀ を満たします。
分解の結果から行列式を求めるには?
L の対角成分を掛け合わせて、その値を2乗します。元の行列の行列式は、L の対角成分を2乗したものの積に等しいからです。例では対角成分は2、1、3です。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/math/cholesky-decomposition \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"matrix":[[4,12,-16],[12,37,-43],[-16,-43,98]]}'const res = await fetch("https://api.kit.forhosting.com/math/cholesky-decomposition", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"matrix": [
[
4,
12,
-16
],
[
12,
37,
-43
],
[
-16,
-43,
98
]
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/cholesky-decomposition",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"matrix": [
[
4,
12,
-16
],
[
12,
37,
-43
],
[
-16,
-43,
98
]
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/cholesky-decomposition", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"matrix":[[4,12,-16],[12,37,-43],[-16,-43,98]]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"matrix":[[4,12,-16],[12,37,-43],[-16,-43,98]]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/cholesky-decomposition", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"matrix": [
[
4,
12,
-16
],
[
12,
37,
-43
],
[
-16,
-43,
98
]
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.cholesky_decomposition",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
コレスキー分解 API は、対称正定値行列を受け取り、その下三角因子、すなわち対角成分が正で A = L·Lᵀ を満たす一意の行列 L を返します。
コレスキー分解が実際に提供するもの
行列を JSON の行配列として送信し、必要に応じて 0 から 15 桁の精度を指定すると、その精度に丸められた因子、送信した行列、次元、アルゴリズム名を含む応答が返ります。
分解の計算方法と検証方法
エンドポイントはコレスキー・バナキェヴィチ法を実行します。これは A = L·Lᵀ の定義から直接 L を行ごとに構築する手順です。ピボットがゼロまたは負になった場合、計算は停止し、失敗した行を明示して行列が正定値でないことを API が報告します。エラーは構造化された invalid_input 応答として返され、数値のゴミが返ることはありません。
実務でどこに位置づくか
この API はそのステップを1回の呼び出しで済ませる版です。エッジで実行され後には何も残さず、1リクエスト $0.002 です。このページでは同一のコードがブラウザで無料で動きます。
技術的な質問
料金はいくらですか?
1リクエスト $0.002 です。このページのブラウザ上でも同じコードで無料で実行できます。
行列が正定値でない場合はどうなりますか?
行列が正定値でないことと、ピボットが失敗した行を示す invalid_input エラーでリクエストは失敗します。部分的な因子は返されません。