#初めに
試験というのは自分の実力を試すためのものですが、それは問題解決能力を問われていると言い換えても良いかもしれません。社会に出たときに必要なのは結局の所、個人での問題解決能力ですから。
しかし、だとすれば、自分の実力の限りを尽くして、取れる手段のすべてを尽くして、問題を解決させるのが、試験の正しいあり方なのではないかと思いました。
###とかいう言い訳はさておき!
数学の問題をpythonで解いてやろうというお話です。
問題を解く上でのレギュレーションとしては人に答えを聞きに行かないこと、それ以外であれば問題を解くための何をしてもOK!という気分でやってきます。
問題としてこちらを使わせていただきました。
https://web.math-aquarium.jp/reidai-sikinotennkaitoinnsuubunnkai.pdf
#式の展開と因数分解
数学においても何にしても、ルールというものは覚えるしかなく、その覚える作業は苦手にする人が多いところです。かく言う私もその一人ですが、pythonのsympyだったらそんな心配する必要はない!というところを見せつけて差し上げます!
##第一問 次の整式の同類項をまとめて整理せよ。
2x^2+3xy+2x+2xy+3y^2+2y+2x+3y+2
とりま、sympyにぶち込みましょうか。
>>> from sympy import symbols
>>> x=symbols('x')
>>> y=symbols('y')
>>> 2*x**2+3*x*y+2*x+2*x*y+3*y**2+2*y+2*x+3*y+2
2*x**2 + 5*x*y + 4*x + 3*y**2 + 5*y + 2
こういう問題であれば、逆に入力が手間ですし、ミスもしそうですね。持ってくる問題が、データであれば、画像解析をAIにさせて問題を抽出とかさせてもいいかもしれません。それはともかく答えが出ましたね。
2x^2+5xy+4x+3y^2+5y+2
##第二問 次の整式の [ ] 内の文字に着目したときの次数と定数項を答えよ。
x^2+2xy+y^2-1 [ x ]
あれ、早速だけどこんな機能があるのか知らないものが出てきたぞ?
と、ここで何でも使っていいルールを発動。Google先生をバトルゾーンに召喚。sympy 係数 と調べれば、ぱっと…は出てこなかったけど、3番目ぐらいに出てきた!
coeffというものを使うのか。
>>> from sympy import symbols
>>> x=symbols('x')
>>> y=symbols('y')
>>> a=x**2+2*x*y+y**2
>>>a.coeff(x,1)
2*y
xの1乗なのでa.coeff(x,1)で係数を出します。ここでxの2乗について係数を取り出したければ、a.coeff(x,2)となるようです。答えは言わずもがな。
##第三問 次の整式を,x について降べきの順に整理せよ。
2x+x^3-2-x^2
>>> from sympy import symbols
>>> x=symbols('x')
>>> y=symbols('y')
>>> 2*x+x**3+-2-x**2
x**3 - x**2 + 2*x - 2
標準で降べきに整えられるようになっているみたいです。しかしこれでは味気ないので、このような出力方法では見辛くて仕方がない!という声も聞こえてきそうなところ、整えてくれるらしい関数を探してきました。
sympy.init_printing()これを先頭に書けばいいそうで。
早速試してみましょう。
>>> from sympy import *
>>> init_printing()
>>> x=symbols('x')
>>> y=symbols('y')
>>> 2*x+x**3+-2-x**2
3 2
x - x + 2⋅x - 2
なるほど、そうなるのか。
##第四問 A,Bが以下の時、次の計算をせよ
A=x^2+xy+y^2
B=3x^2+3xy-y^2
計算式
A+B
4B-[3A-2(A-2B)]
>>> from sympy import *
>>> init_printing()
>>> x=symbols('x')
>>> y=symbols('y')
>>> A=x**2+x*y+y**2
>>> B=3*x**2+3*x*y-y**2
>>> A+B
2
4⋅x + 4⋅x⋅y
>>> 4*B-(3*A-2*(A-2*B))
2 2
- x - x⋅y - y
という風に。知識不足という面もありましたが、大問1を解くだけで、1時間はかかってしまいました。このqiitaで記事を書きながらやっていたというのもあるかもしれませんが、しかし、このままだったら紙でやったほうが便利となってしまいます。見やすいしね。
しかし、しかし!あくまで私はpythonを使いたい!pythonで遊びたい!
そんなわけで、これからもpythonで遊ぼうと思います。出来ることならば、関数を作って作業を便利にしたりしながらね。