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

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

数学の筆算が嫌でpythonに逃げる。因数分解、二次・三次方程式の問題。

学生の時は大嫌いだったのに、歳をとると数学・統計とかを勉強してみたくなる。 

前も書きましたが、これは文系出身者の病気みたいなもんです。  

この病気にかかる人は意外に多いみたいで、大人が数学を勉強しなおすための本はたくさん出版されてますし、紹介している情報も同様です。

careersupli.jp

 

自分も何回か罹患しました(笑) 

たいてい、一月ほどで治ります。 

平易な日本語にすると、「飽きる(笑)」とか「メゲる」といいますが。

 

困ったことに、罹患するたびに本を買ったりするので、知らぬ間にたまってて、先日本棚を整理したら、何冊かそういう類の本と、必死に計算してるっぽいノートがでてきました。 

それを見てると、どうも、いつも筆算で答えを求めるのがしんどくなって、パタッとやめているような傾向が見えます。

 

だったら、筆算やめてみたら続くかな?

ようするに問題が読めて答えがわかれば良いわけですから。 

最初から、Pythonでやる方法を覚えたほうが、自分には手っ取り速いかもしれません。

 

まずは因数分解とか

 

最初に試したのは因数分解です。 

こんなやつ。

$$9x^2−24xy+16y^2$$

 

この程度なら、暗算でもできますけど、あえてpythonでやってみます。

 

from sympy import Symbol
from sympy import factor
from sympy import pprint

x = Symbol('x');
y = Symbol('y');
exp = 9 * x**2 - 24 * x * y + 16 * y**2;
pprint(factor(exp));

 

pythonだと、9xのようには書けないので、「9*x」になり、xの2乗は「x**2」みたいな書き方になるので、上記式は「 9 * x**2 - 24 * x * y + 16 * y**2」となります。

 

sympyのfactorは、因数分解の答えを返してくれる関数です。

答えはこういう風に表示されます。

f:id:arakan_no_boku:20180701001556j:plain

 

もう少しきれいな数式にすると。

$$(3x - 4y)^2$$

 

あはは、いい感じ。

 

次は二次方程式を解いてみる

 

例の解の公式ってやつを使うものです。 

これですね。

$$x=\dfrac{-b\pm\sqrt{b^2-4ac}}{2a}$$

 

これも、まあ、ぎりぎり筆算でやれんことはないです。 

でも、あえてpythonで。 

問題はこんな感じ。

$$2x^2 - 4x + 1 = 0$$ 

 

solve関数を使うと一発で解けます。

 

from sympy import Symbol
from sympy import solve

x = Symbol('x');

exp = 2 * x**2 - 4 * x  + 1;
print(solve(exp,dict=True));

 

式の「=0」の部分は前提なので書いてません。 

返される答え。

f:id:arakan_no_boku:20180701142105j:plain

 

sqrtは平方根なので、整形表示するとこうです。

$$1\pm\dfrac{\sqrt{2}}{2}$$

 

うーん。pythonのsolve関数、楽だな。

 

じゃあ、三次方程式も解けるのか

 

さあ、次は三次です。 

いつも、この辺でめげます。 

三次方程式にも「カルダノの公式」という解の公式があるんですけど、見るだけでめまいがします。

 

以下のサイトで丁寧に解説してもらっているのですが、解のところの式を読んでいるうちに意識を失って・・眠ったということですが・・しまいました。

mathtrain.jp

 

これは筆算したくないので、pythonで答えがだせるならいいなあと。 

例えば、こんな問題。

$$4x^3-2x^2-6x+3=0$$

 

答えを先に見てみると、こうでした。

$$x=\dfrac{1}{2},\pm\dfrac{\sqrt{6}}{2}$$

 

二次方程式と同じように答えが求まるのでしょうか?

 

from sympy import Symbol
from sympy import solve

x = Symbol('x');

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

 

表示された答え。

f:id:arakan_no_boku:20180701151807j:plain

 

sqrtは平方根だから、ばっちり答えがでてますね。

圧倒的にこれが楽だな。 

やはり、自分には筆算より、こっちが向いているのを確信しましたね。

 

ちなみに、上記は sympy が必要です。 

はいってない場合は「pip install sympy」で入れてからです。 

ではでは。

f:id:arakan_no_boku:20180701154921j:plain