3元1次連立方程式を解く

2017-11-15 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
昨年(2016-02-02)の記事「GSL Shell 学習:matrix.solve( A, b )」で、
3元1次連立方程式を解くには、matrix.solveで十分であった。

今回、
訳あって、自前コードで処理したくなった。


参考サイトとしては、下記の2つ。

連立方程式の解き方」から、

■連立1次方程式の解き方

  未知数3個、方程式3個
  a11*x + a12*y + a13*z = b1
  a21*x + a22*y + a23*z = b2
  a31*x + a32*y + a33*z = b3

は、行列を用いて、

  A * X = B

の様に書ける。

それで、
方法は2通りあるが、

(1) 逆行列を用いる方法

  X = Inv_A * B

とやれば良い。


それから、
逆行列」から、

3×3行列の逆行列の公式

  A = { { a11, a12, a13 }, { a21, a22, a23 }, { a31, a32, a33 } }

について、

  detA = a11*a22*a33 + a21*a32*a13 + a31*a12*a23 -
      a11*a32*a23 - a31*a22*a13 - a21*a12*a33

がゼロでないとき、

逆行列:
 Inv_A = 1 / detA *
   { { a22*a33 - a23*a32 , a13*a32 - a12*a33 , a12*a23 - a13*a22 },
    { a23*a31 - a21*a33 , a11*a33 - a13*a31 , a13*a21 - a11*a23 },
    { a21*a32 - a22*a31 , a12*a31 - a11*a32 , a11*a22 - a12*a21 } }


以上の公式に従って、
昨年の記事のデータで、
素直にコーディング
----- Solve_by_Inv-Mat.gsl
-- 行列 A
a11, a12, a13, a21, a22, a23, a31, a32, a33 =
0, 3, 6, 1, 4, 7, 2, 5, 9

detA = a11*a22*a33 + a21*a32*a13 + a31*a12*a23 -
a11*a32*a23 - a31*a22*a13 - a21*a12*a33

-- 逆行列 Inv_A == G を、2段階で
g11, g12, g13, g21, g22, g23, g31, g32, g33 =
a22*a33-a23*a32, a13*a32-a12*a33, a12*a23-a13*a22,
a23*a31-a21*a33, a11*a33-a13*a31, a13*a21-a11*a23,
a21*a32-a22*a31, a12*a31-a11*a32, a11*a22-a12*a21
g11, g12, g13, g21, g22, g23, g31, g32, g33 =
g11/detA, g12/detA, g13/detA,
g21/detA, g22/detA, g23/detA,
g31/detA, g32/detA, g33/detA

-- 一方、右辺 B
b1, b2, b3 = 1, 0, -2

-- そして、逆行列により解を算出
X = g11*b1+g12*b2+g13*b3
Y = g21*b1+g22*b2+g23*b3
Z = g31*b1+g32*b2+g33*b3

-- 確認
print( X, Y, Z ) --> -2.3333333, 2.3333333, -1
出来ました。

当たり前?


本日はここまで。


これで、(やりたかったコト) Perl 版を作ろう。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


171020
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク