Linear Algebra (6)

なんとなく現実トウヒっぽくなってるこの取り組み。掃き出し法で逆行列を求める、の項ですが、肝心な手続きは定義できたので解法をプログラムすれば良いだけな模様。
しかしこれ、どうすりゃ良いのだろうな。

とりあえず

((2 3) 
 (3 2))

な行列が I になる過程を確認してみます。

まず 1 行目に 2 行 2 列目の値を掛ける

これって、末端の列から処理するのであれば、そのデータを取得する手続きが要るな。

((4 6)
 (3 2))
次に 1 行目に 2 行目の -3 倍を加える

これ、最初の 1 行目の 2 列目の絶対値を掛ける、と言えば良いのか。

(((+ 4 -9) (+ 6 -6))
 (3 2))

これは以下に

((-5 0)
 (3 2))
次に 1 行目に -1/5 を掛ける

ターゲットを 1 にするための値を取得する手続き必要。これは直上のソレも同様ですな。

((1 0)
 (3 2))
次に 2 行目に 1 行目の -3 倍を加える

どうやって手続きを抽象化するべきか。

((1 0)
 (0 2))
最後に 2 行目に 1/2 を掛ける

ここまで来ると 1 を 2 行 2 列目で割った値を掛ければ良いのか。

((1 0)
 (0 1))

抽象化

3 次以上の、でこの手法は有効とある。3 次以上のソレは明日現実トウヒで片付け予定ですが、2 次のソレを以下にて整理してみます。

  • 末端列を御互い掛けて引く
    • 1 行目に 2 行 2 列の値を掛ける
    • 1 行目から 2 行目に直前の 1 行 2 列の値を掛けた値を引く
  • 1 行 1 列目の値を 1 にする
    • 1 行 1 列目の値で割る
  • 2 行 1 列目を 0 にする
    • 1 行 1 列の値は 1 になってるので 2 行 1 列目の値を引けばよい
  • 2 行 2 列目の値を 1 にする

うーん、なんか整理できてるようなできてないような。3 次だと以下の例がある模様。

((2 2 3)
 (3 5 2)
 (5 3 3))

(x y z)

(15 19 20)

これって

((1 0 0)
 (0 1 0)
 (0 0 1)

(1 2 3)

になる模様。参考にしてるのは以下のコンテンツ。

どう一般化するか、というのがプログラミングのソレなんですが、今日は終了。週明け早々微妙さ満点です。