質問

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

浮動小数点演算では、通常、随伴行列を作成し、行列式で除算します(例:総当たり解法)。これまでのところうまくいきましたが、固定小数点数を扱うとき、使用されるすべての乗算のために許容できない精度の損失が発生します。

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

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

役に立ちましたか?

解決

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

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

他のヒント

メタアンサー:それは本当に一般的な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行列。)

固定小数点の精度を失うため、おそらくこれに勝るものはありません。

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

ジェイソンSが提起した質問の2番目に挙げたいのは、マトリックスを逆にする必要があるということです。これはほとんど必要ありません。それだけでなく、それはしばしば悪い考えです。 Ax = bを解く必要がある場合、bにAを乗算するよりも、システムを直接解く方が数値的に安定です。

bの多くの値についてAx = bを何度も解かなければならない場合でも、Aを反転することはまだ良い考えではありません。毎回その作業をやり直すのではなく、因数分解を使用して毎回システムを解決するように、係数を保存します。

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

切り捨てエラーやその他の問題を最小限に抑えるには、「ピボット」を使用します。 -数値レシピの逆行列に関する章を参照してください。彼らは私がこれまでに見つけた最高の説明を持っています。

通常のアルゴリズムを実行する前に、1.31に倍増することを検討してください。乗算の数は2倍になりますが、マトリックスの反転を実行しているため、実行する処理はすべて、プロセッサの乗算器にかなり縛られます。

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

マトリックスの反転があなたのために何をするのか、そしてそれが他の処理とどのように適合するかについてのアイデアを教えていただければ、代替案を提案できるかもしれません。

-アダム

単純な古いガウス消去法はうまく機能します。

使用しているライブラリ/クラス/構造によって異なります。 GSL をご覧ください。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top