"BOKU"のITな日常

BOKUが勉強したり、考えたことを頭の整理を兼ねてまとめてます。

pythonで因数分解、二次・三次方程式の問題を解いてみる。

f:id:arakan_no_boku:20180701154921j:plain

 

目次

まずは因数分解

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

こんなやつ。

$$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」で入れてからです。 

ではでは。