13

4x4 マトリックスを反転したい。私の番号は固定小数点形式 (正確には 1.15.16) で保存されます。

浮動小数点演算では、通常、随伴行列を作成し、行列式で除算します (たとえば、力ずくで解を求めます)。これまでのところはうまくいきましたが、固定小数点数を扱う場合、すべての乗算が使用されるため、許容できない精度の低下が発生します。

注: 固定小数点演算では、常に即時結果の最下位ビットの一部を破棄します。

だから - 行列を反転するための最も数値的に安定した方法は何ですか? パフォーマンスについてはあまり気にしませんが、単純に浮動小数点に移行すると、ターゲット アーキテクチャが遅くなります。

4

6 に答える 6

18

メタ回答: 本当に一般的な 4x4 マトリックスですか? 行列に特別な形式がある場合は、高速で操作のカウントダウンを抑える反転の直接式があります。

たとえば、次のようなグラフィックスからの標準的な同次座標変換の場合:

[ux vx wx tx]
[uy vy wy ty]
[uz vz wz tz]
[ 0  0  0  1]

(回転、スケール、並進行列の合成を想定)

次に、簡単に導出できる直接式があります。

[ux uy uz -dot(u,t)]
[vx vy vz -dot(v,t)]
[wx wy wz -dot(w,t)]
[ 0  0  0     1    ]

(リンクされたページから盗まれた ASCII マトリックス。)

固定小数点の精度が失われるため、おそらくそれを打ち負かすことはできません。

マトリックスがより多くの構造を持っていることがわかっているドメインから来ている場合、簡単な答えがある可能性があります。

于 2008-10-01T00:24:52.063 に答える
6

これに対する答えは、マトリックスの正確な形式に依存すると思います。ピボット (必須) を使用した標準的な分解方法 (LU、QR、Cholesky など) は、特に小さな 4x4 行列の場合、固定小数点ではかなり優れています。プレスらの本「Numerical Recipes」を参照してください。これらのメソッドの説明については。

この論文はいくつかの有用なアルゴリズムを提供しますが、残念ながらペイウォールの背後にあります. 彼らは、複雑すぎてここにリストできないいくつかの追加機能を備えた (ピボットされた) コレスキー分解を推奨しています。

于 2008-10-01T00:23:51.037 に答える
5

Jason S が提起した質問に 2 番目の質問をしたいと思います: 行列を反転する必要があると確信していますか? これはほとんど必要ありません。それだけでなく、それはしばしば悪い考えです。Ax = b を解く必要がある場合、b に A 逆数を掛けるよりも、系を直接解く方が数値的に安定します。

多くの b の値に対して Ax = b を何度も解かなければならない場合でも、A を反転することはまだ良い考えではありません。毎回機能しますが、因数分解を使用して毎回システムを解決します。

于 2008-12-10T15:02:19.570 に答える
1

通常のアルゴリズムを実行する前に、1.31 に倍増することを検討してください。乗算の数は 2 倍になりますが、行列の反転を行っているため、行うことはすべてプロセッサの乗数にかなり結び付けられます。

4x4 反転の方程式を見つけることに興味がある人は、シンボリック数学パッケージを使用して解決できます。数分かかりますが、TI-89 はそれを実行します。

マトリックス インバートが何をするのか、またそれが残りの処理にどのように適合するのかを教えていただければ、代替案を提案できるかもしれません。

-アダム

于 2008-10-01T00:36:38.680 に答える
1

別の質問をさせてください.行列を逆にする必要がありますか(Mと呼びます),それとも逆行列を使用して他の方程式を解く必要がありますか? (例: 既知の M, b に対して Mx = b) 多くの場合、逆数を明示的に計算する必要なく、これを行う方法が他にもあります。または、行列 M が時間の関数であり、ゆっくりと変化する場合は、完全な逆行列を一度計算することができ、それを更新する反復的な方法があります。

于 2008-12-10T14:48:42.810 に答える
-3

行列がアフィン変換を表す場合 (スケーリング コンポーネントを導入しない限り、多くの場合、4x4 行列でこれが当てはまります)、逆は単純に最後の列が否定された上位 3x3 回転部分の転置です。明らかに、一般化されたソリューションが必要な場合は、ガウス消去法を調べるのがおそらく最も簡単です。

于 2008-10-01T00:29:31.833 に答える