8,007 views
この記事は最終更新から 1834日 が経過しています。
2元連立1次方程式を Octaveを使って解いてみる。
まずは話を簡単にするために、以下のような簡単な2式の連立方程式を解いてみる。
y = 2x + 4
y = -2x + 16
Octaveでグラフ表示すると以下のような直線が現れる。
octave:21> x=[-10:10] x = -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 octave:22> y1 = 2 * x + 4 y1 = -16 -14 -12 -10 -8 -6 -4 -2 0 2 4 6 8 10 12 14 16 18 20 22 24 octave:23> y2 = -2 * x + 16 y2 = 36 34 32 30 28 26 24 22 20 18 16 14 12 10 8 6 4 2 0 -2 -4 octave:24> plot(x,y1,x,y2) octave:25>
まずは与えられた2式を行列で表せるように各項を並び替える。
y = 2x + 4
y = -2x + 16
↓
2x – y = -4
-2x – y = -16
これを以下のような行列式で表し、両辺に逆行列をかけて解を求める。
これをOctaveで書くと以下のようになる。
octave:24> A=[2 -1 ; -2 -1] A = 2 -1 -2 -1 octave:25> B=[-4 ; -16] B = -4 -16 octave:26> Ainv=inv(A) Ainv = 0.25000 -0.25000 -0.50000 -0.50000 octave:27> xy=Ainv * B xy = 3 10 octave:28>
x=3, y=10 が求まった。
※注意
この方法はいつでも使えるわけではない。
行列Aが逆行列を持たない場合、すなわち両方の式の傾きが同じ場合、2本の直線は交点を持たず、連立方程式として成り立たない。
これをOctaveで確認してみる。
octave:34> A=[1 2;4 8]
A =
1 2
4 8
octave:35> Ainv=inv(A)
warning: inverse: matrix singular to machine precision, rcond = 0
Ainv =
Inf Inf
Inf Inf
octave:36>
逆行列が求まらなかった。
2元1次方程式であればイメージがわきやすいが、3元,4元,…,多元連立方程式になると直感的に逆行列の存在有無を判断できない。
次に以下のような4元1次連立方程式を解いてみる。
a + 2b + 3c + 4d = 8
5a + 4b + 6c + 7d = 3
6a + 3b + 4c + 9d = 9
5a + 7b + c + 5d = 5
octave:37> A=[1 2 3 4;5 4 6 7;6 3 4 9;5 7 1 5] A = 1 2 3 4 5 4 6 7 6 3 4 9 5 7 1 5 octave:38> B=[8;3;9;5] B = 8 3 9 5 octave:39> i=inv(A) i = -5.5674e-01 2.3404e-01 6.7376e-02 -3.5461e-03 1.6667e-01 -2.5967e-17 -1.6667e-01 1.6667e-01 -3.1915e-02 3.1915e-01 -1.8085e-01 -9.5745e-02 3.2979e-01 -2.9787e-01 2.0213e-01 -1.0638e-02 octave:40> A*i ans = 1.00000 0.00000 0.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 0.00000 0.00000 1.00000 octave:41> i*B ans = -3.16312 0.66667 -1.40426 3.51064 octave:42>
a=-3.16312, b=0.66667, c=-1.40426, d=3.51064 が求まった。
★確認
逆行列と元の行列の積は1(=単位行列)となる。
上では「octave:40」の A*i でこれを確認し、逆行列が正しく求められたことを確認している。