Home計算 › (18) 行列計算で中1レベル連立方程式を解く
Sponsored Link

(18) 行列計算で中1レベル連立方程式を解く

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 でこれを確認している。

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>