アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うことを書いてます。

数学の筆算が嫌でpythonに逃げる。その2 連立方程式のめんどくさい奴

前回、数学の筆算が面倒なので、pythonで計算してしまえと考えて、本棚の整理ででてきた数学勉強本の問題をいくつかやってみました。

arakan-pgm-ai.hatenablog.com

 

これが思ったより簡単で快適だったので、もう少し調子にのってやってみます。

 

まず簡単な連立方程式をやってみる

こんな問題。 

$$3x+2y=0$$

$$2x-4y=16$$ 

さすがに、筆算でも簡単にできるけど、やり方の確認なのでとりあえず。

pythonだと、おなじみのsolve()でできます。

from sympy import Symbol
from sympy import solve

x = Symbol('x');
y = Symbol('y');

exp1 = 3 * x + 2 * y;
exp2 = 2 * x - 4 * y - 16;
print(solve((exp1,exp2),dict=True));

 

注意としては、solveは「=0」であることを前提にするので、右辺の式を左辺に代入して、「=0」の状態にして、式をかくことくらいです。

答えはこんな感じ。

[{x: 2, y: -3}] 

 x=2、y=-3。 

当たり前だけど、あってます。

 

さて、今度は変数3つでやってみよう

さて変数3つです。

連立3元一次方程式というやつです。

試しの問題はこんなの。

$$x+y+z-9=0$$

$$2x+3y-2z-5=0$$

$$3x-y+z-7=0$$ 

 

一気に面倒くさくなります。

もちろん、解けますけど、こういうのを何問も解いていると、脳が現実逃避をはじめて「今、この計算をやることが、自分の人生にどれくらいの意味があるのか・・うんぬん」考え始めたりします。 

ということで、これもpythonだな。

from sympy import Symbol
from sympy import solve

x = Symbol('x');
y = Symbol('y');
z = Symbol('z');

exp1 = x + y + z - 9;
exp2 = 2 * x - 3 * y - 2 * z - 5;
exp3 = 3 * x - y + z - 7;
print(solve((exp1,exp2,exp3),dict=True));

 

まあ、式を書いて、solveにわたすだけなので、手間はかかりません。

表示された答えはこう。

[{x: 8, y: 9, z: -8}]

楽だなあ。

 

じゃあ、絶対筆算したくないやつ

連立4元一次方程式ってのをやってみます。

問題はこう。

$$a+b+c+d-5=0$$

$$3a+2b+c=0$$

$$27a+9b+3c+d-1=0$$

$$27a+6b+c=0$$

 

 根気よくやれば解けると思うけど、超面倒なやつです。

筆算でやる気はゼロなので、さっさと、pythonに託してみます。

from sympy import Symbol
from sympy import solve

a = Symbol('a');
b = Symbol('b');
c = Symbol('c');
d = Symbol('d');

exp1 = a + b + c + d - 5;
exp2 = 3 * a + 2 * b +c;
exp3 = 27 * a + 9 * b + 3 * c + d - 1;
exp4 = 27 * a + 6 * b + c;
print(solve((exp1,exp2,exp3,exp4),dict=True));

 

表示された答えです。

[{a: 1, b: -6, c: 9, d: 1}]

なるほど。

初めて、答えを知りました(笑)。

f:id:arakan_no_boku:20180701154921j:plain