極分解の計算
行が (2, 1) と (0, 3) の行列は、回転 U と対称な伸縮 P に分けられ、A = U P となります。16×16までの正方行列を入力すると、2つの因子、特異値、残差が分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
極分解は、実正方行列 A を直交行列 U と一意の対称半正定値行列 P の積として因数分解し、A = U P と書きます。ストレッチ因子 P は A の転置と A の積の行列平方根です。直交因子 U はフロベニウスノルムで A に最も近い回転または反射であり、左右の特異ベクトルから得られます。連続体力学のコードはこの方法で変形勾配から回転を復元し、ロボティクスやコンピュータグラフィックスのパイプラインは線形写像から剛体運動を取り出し、数値解析者は計算された行列を SO(n) または O(n) へ戻して射影します。
A = U P の意味と、両方の因子が一意である理由
実正方行列 A の右極分解は、U が直交(U の転置と U の積が単位行列)で P が対称かつ半正定値である因数分解 A = U P です。ストレッチ因子 P はあらゆる正方の A に対して一意であり、グラム行列(A の転置と A の積)の一意な半正定値平方根です。A が正則なとき直交因子も一意であり、A に P の逆行列を掛けたものに一致します。
A が特異なときでも、U はフロベニウスノルムで A に最も近い直交行列の一つであり、特異値分解 A = W Σ V-転置から積 U = W V-転置として得られ、P は V Σ V-転置に一致します。幾何学的には U は回転、または反射を合成した回転であり、P は A の特異値だけ正規直交な軸に沿って伸縮します。
だから連続体力学は変形勾配を R U(または V R)と書き、直交プロクルステス問題は交差共分散の極因子で解かれます。左極分解 A = P_left U は同じ直交因子と、A と A の転置の積の平方根を使います。本計算機は右形 A = U P を返します。
これはほとんどの教科書と本番コードが採用する慣習です。1 行 1 列の行列では因子は成分の符号とその絶対値に縮約され、ゼロの符号はプラス 1 とみなします。すでに直交な行列ではストレッチは単位行列で U は A に一致します。
すでに対称半正定値な行列では直交因子は単位行列で P は A に一致します。これら三つの検算は、シミュレーション出力の一般的な 3 行 3 列変形勾配を信じる前に実装を確かめる最も速い方法です。
極分解が役に立つ場面
教室や線形代数のノートでは、3 行 3 列の宿題行列のために本格的な数式処理システムを立ち上げることなく、U の転置と U の積が単位行列であること、および P が P の転置に等しく固有値が非負であることを学習者が確認できるように、極分解計算機を使います。
連続体力学および有限要素の後処理は、変形勾配 F から直交因子を読んで回転テンソルを復元し、正の因子からストレッチテンソルを復元します。これはあらゆる連続体の授業で教える右極分解 F = R U そのものです。
ロボティクス、コンピュータビジョン、グラフィックスのパイプラインは、計算された 3 行 3 列写像に最も近い回転を求める直交プロクルステス問題を、その写像の極因子を取ることで解きます。密な SVD ライブラリを明示的に組み込むより、エッジワーカー上では安く安定します。
雑音の多い更新のあとほぼ直交な行列を O(n) へ戻して射影しなければならない制御・同定コードも、同じ射影を一回の呼び出しで行います。検証失敗は残高を消費しません。n を最大 16 に保ち、丸めた因子をテストに固定すれば、密な線形代数ライブラリを自前で取り込むことなく、宿題、LMS プラグイン、エッジワーカー向けに再現可能な U と P が得られます。
活用例
変形勾配から回転とストレッチへ
連続体力学の変形勾配 F = R U を、後処理や構成則の確認のために直交回転と一意の半正定値ストレッチへ分けます。
最近傍の直交行列(プロクルステス)
雑音のある正方写像を、フロベニウスノルムで一意に最も近い回転または反射である直交極因子を読んで O(n) へ射影します。
教室とノートでの検算
学習者に n 行 n 列行列を送らせ、教科書の方法と照合して U 転置 U = I、P = P 転置、A = U P を確認させます。
よくある質問
正方行列の極分解はどのように求めますか?
有限数の正方配列を matrix(別名 a、A、mat)に送ってください。
行列が特異な場合はどうなりますか?
極分解はなお存在します。P は A 転置 A の一意な PSD 平方根のままです。U は SVD から得た最近傍の直交行列です(核はグラム・シュミットで補完されます)。
極分解は SVD や QR と何が違いますか?
SVD は二つの直交行列と対角行列で A = W Σ V-転置と書きます。極分解はそれを一つの直交と一つの PSD ストレッチの A = U P に畳みます(U = W V-転置、P = V Σ V-転置)。QR は三角因子を使い、PSD ではありません。
2つの因子は図形的に何を表しますか?
U は回転、または回転と鏡映の組み合わせで、P は互いに直交する軸に沿って特異値の分だけ空間を伸ばします。先に P、次に U をかけると元の行列に戻ります。
これは右極分解ですか、左極分解ですか?
右極分解 A = U P で、多くの教科書が使う形です。左極分解は A とその転置の積から作った伸縮を U の左に置く形で、直交因子 U は共通です。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/math/polar-decomposition \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"matrix":[[2,1],[0,3]]}'const res = await fetch("https://api.kit.forhosting.com/math/polar-decomposition", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"matrix": [
[
2,
1
],
[
0,
3
]
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/polar-decomposition",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"matrix": [
[
2,
1
],
[
0,
3
]
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/polar-decomposition", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"matrix":[[2,1],[0,3]]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"matrix":[[2,1],[0,3]]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/polar-decomposition", 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
],
[
0,
3
]
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.polar_decomposition",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_n | 16 |
max_abs_entry | 1000000000000000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
このエンドポイントは有限数の n 行 n 列配列を受け取り、ネットワークも乱数も使わない決定的なヤコビ特異値分解を実行し、両方の因子行列に加えて特異値、det(U)、A から U P を引いた残差、可逆性フラグを返します。正方でない、または数値でないペイロードは invalid_input で失敗し、課金されません。
入力契約、ヤコビ SVD 経路、応答の形
行数は n、各行の列数もちょうど n で、n は 1 以上 16 以下です。別名 a、A、mat も受け付けます。内部ではソルバーがグラム行列 G = A-転置 A を作り、G の巡回ヤコビ固有分解で G = V Λ V-転置を得て、特異値を切り詰めた固有値の平方根として取り、P = V diag(σ) V-転置を作り、各右特異ベクトルを A に通してその特異値で割って左特異ベクトル W を組み立て、標準基底に対する修正グラム・シュミットで核を補完し、U = W V-転置と置きます。図が必要なら二つの因子行列をご自身の作図と組み合わせてください。必須フィールド matrix が有限数の行からなる正方配列である JSON 本体を送信してください。任意の整数 precision は 0 から 15(既定は 10)で、応答の各数値フィールドを丸める小数桁を決めます。matrix の欠落、配列でない値、ギザギザまたは長方形の配置、空行、有限でない成分、絶対値が 10 の 15 乗を超える成分、公開上限を超える n は、いずれもフィールド名付きの invalid_input で失敗し、課金されません。応答は n、解析済み行列、直交因子、半正定値因子、降順の特異値、det_orthogonal(条件の良い U ではプラスマイナス 1)、真偽値 is_invertible、A から U P を引いたフロベニウス残差、使用した精度、短い公式文字列をエコーします。このエンドポイントは数値だけを返し、formula 欄を超える手順説明は出しません。
技術的な質問
入力が正方の数値行列でない場合は。
タスクは invalid_input で失敗します。長方形、ギザギザ、空、欠落、非数値のペイロードは拒否され、課金されません。
極分解計算機の料金はいくらですか。
ブラウザツールは無料です。API 要求は成功した呼び出し 1 件につき前払い KIT 残高から $0.002 です。無効な入力は課金されません。