MATLAB,Python,Scilab,Julia比較 第3章 その80【アフィン行列の合成④】

MATLAB,Python,Scilab,Julia比較 第3章 その80【アフィン行列の合成④】 数値計算
MATLAB,Python,Scilab,Julia比較 第3章 その80【アフィン行列の合成④】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia3-backnumber/

はじめに

アフィン変換のアフィン行列は合成できる。
今回は、アフィン逆変換であるがゆえに追加で証明する必要があるものたちについて。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

追加で証明?

太郎くん
太郎くん

アフィン行列の合成ができるってわかったから、
次は実際にプログラムで組んでみる感じかな。

フクさん
フクさん

ちょっと待った!

太郎くん
太郎くん

(まだあるんか・・・。)

フクさん
フクさん

アフィン変換としてはOKなのだが、
今回、我々が実際に利用しているのはアフィン逆変換のアルゴリズムだ。

太郎くん
太郎くん

まぁ、そうなんだろうけど、そこになんの問題があるの?

フクさん
フクさん

渡してる行列がアフィン行列じゃなくて、アフィン逆行列になってる。

太郎くん
太郎くん

それでも行列である以上、結合法則は成立するんじゃないの?

アフィン行列を合成することを想定したアフィン逆変換

フクさん
フクさん

結合法則は成立する。
問題は、結合済み行列全体に対して逆行列をしているので、
行列単体で見た場合にどうなるかわからない。
試しに移動後に回転するアフィン逆変換の式を見てみよう。

\(
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}=
\Bigg(
\begin{bmatrix}
\cos(30^\circ) & -\sin(30^\circ) & 0\\
\sin(30^\circ) & \cos(30^\circ) & 0\\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
1 & 0 & 0.5\\
0 & 1 & 0\\
0 & 0 & 1
\end{bmatrix}
\Bigg)^{-1}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}
\)

フクさん
フクさん

我々としては、移動アフィン行列と、回転アフィン行列は個別に管理したい。

太郎くん
太郎くん

まぁ言わんとすることはわかる。

フクさん
フクさん

というわけで、行列の積の逆行列についても確認が必要になる。

太郎くん
太郎くん

行列の積の逆行列?

フクさん
フクさん

要は、二つの行列の積をまとめて逆行列にするパターンと、
個別に逆行列にした上で行列の積を実施するパターンの関係性だな。

太郎くん
太郎くん

普通に逆行列したものを書ければよいんじゃないの?

フクさん
フクさん

そうとは限らない。
その点を事前に確認&証明しておく必要がある。

太郎くん
太郎くん

(マジめんどくせぇ・・・。)

まとめ

フクさん
フクさん

まとめだよ。

  • アフィン逆行列のアルゴリズムを使用している都合、逆行列の結合法則にも気を付ける必要がある。
  • アフィン行列の結合を想定したアフィン逆変換の式を書き出し。
    • 行列結合後に逆行列する分には問題なさそうだが、個別に行列を管理する場合はいろいろ確認&証明が必要そう。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました