こんにちは
今回は平成31年度のセンター試験(数学)を解いていきたいと思います。
pythonで計算ができるということは知っていたのですが、今まで苦手意識があって手をだしていませんでした。
しかし、いつまでもそんなこと言ってられないなと思い、今回いよいよ数学関連のモジュールに触れてみることにいたしました。
使ってみると予想通り大変でしたが、いい勉強になりました!!いまだ苦戦中ですが、とりあえずできたところだけ紹介していきたいと思います。
準備
ぼくがセンター試験を解くに当たり準備したものは
- センター試験過去問(平成31年版)
- jupyternotebook
の二つです。
jupyternotebookの導入や使い方についてはこちらを参照ください。
センター試験解いてみよう!!
解く問題
解く問題は平成31年の数1Aにある第一問の(3)です。(なぜ(3)からなのかは触れないでください…ゆくゆくは(1)からやっていきたいと思います。)
ここからは問題文を引用いたします。
\(a\)と\(b\)はともに正の実数で$$y=x^2+(2a-b)x+a^2+1$$のグラフを\(G\)とする。
(1)グラフ\(G\)の頂点は$$\left(\frac{b}{[チ]}-a,-\frac{b^2}{[ツ]}+ab+[テ]\right)である。$$
(2)グラフ\(G\)点(-1,6)を通るとき、\(b\)の取りえる値の最大値は[ト]であり、そのときの\(a\)の値は[ナ]である。
\(b\)=[ト],\(a\)=[ナ]のとき、グラフ\(G\)は二次関数$$y=x^2$$のグラフをx軸方向に\(\frac{[二]}{[ヌ]}\),y軸方向に\(\frac{[ネノ]}{[ハ]}\)だけ平行移動したものである。
モジュールのインストール
(1)グラフ\(G\)の頂点は$$\left(\frac{b}{[チ]}-a,-\frac{b^2}{[ツ]}+ab+[テ]\right)である。$$
これを解いていきます。
まずsympyというモジュールをインストールしていきます。sympyとはMathmaticaのような計算がpythonでもできるようにしたものです。sympyを使ってsolve関数とEq関数もインストールします。solveは方程式を解く関数で、Eqは方程式を立てる関数です。
最後に変数を定義します。今回は x,h,k,a,b という変数を定義しました。
import sympy from sympy import Eq from sympy import solve x,h,k,a,b = sympy.symbols("x h k a b")
これですべての準備が整いました。
平方完成
では、ここから実際に問題を解いていきます。頂点の座標を求めるには
グラフGと\((x-h)^2+k\)を等しいとおいてh,kを求めればいいですね。(平方完成)
これをpythonで書くと
def exp1(x): return x**2+(2*a-b)*x+a**2+1 f = (x - h)**2+k exp2 = solve(exp1(x) - f,[h,k])#平方完成 h = exp2[0][0] k= exp2[0][1]#h,kが求まった print("h = {} ".format(h)) print("k = {} ".format(k))
説明をすると
def exp1(x): return x**2+(2*a-b)*x+a**2+1でグラフGを定義して
exp2 = solve(Eq(exp1(x),f),[h,k])で方程式 $$x^2+(2a-b)x+a^2+1=(x-h)^2+k$$ をh,kについて解いています。
出力は
h = -a + b/2 k = a*b - b**2/4 + 1となり、 $$\left(\frac{b}{[2]}-a,-\frac{b^2}{[4]}+ab+[1]\right)$$ で答えに一致しました!!
最大値の計算
(2)グラフ\(G\)点(-1,6)を通るとき、\(b\)の取りえる値の最大値は[ト]であり、そのときの\(a\)の値は[ナ]である。\(b\)=[ト],\(a\)=[ナ]のとき、グラフ\(G\)は二次関数$$y=x^2$$のグラフをx軸方向に\(\frac{[二]}{[ヌ]}\),y軸方向に\(\frac{[ネノ]}{[ハ]}\)だけ平行移動したものである。
次にこの問題を解いていきます。最大値の問題ですが、(-1,6)をグラフGに代入し、bの関数から最大値を読み取ります。
f = (x - h)**2+k g = f.subs([(x, -1)]) eq3 = Eq(g,6) print(sympy.solve(eq3,b))
pythonで書くとこうなります。
g = f.subs([(x, -1)])で.subs関数で\(x=-1\)を代入し、
sympy.solve(eq3,b)で$$-6=(-1)^2+(2a-b)(-1)+a^2+1$$ をbについて解いています。
出力は
[-(a - 1)**2 + 5]となりこの式は2次関数なので、bの最大値は5でそのときのaは1であることが分かります。
\(a\)の値は[ナ]である。\(b\)=[ト],\(a\)=[ナ]のとき、グラフ\(G\)は二次関数$$y=x^2$$のグラフをx軸方向に\(\frac{[二]}{[ヌ]}\),y軸方向に\(\frac{[ネノ]}{[ハ]}\)だけ平行移動したものである。
これはa=1,b=5を代入すれば答えが出て、
x軸方向に\(\frac{[3]}{[2]}\),y軸方向に\(\frac{[-1]}{[4]}\)が答えになります。
ここまでのコードを載せておきます。
import sympy import numpy as np from sympy import Eq from sympy import solve x,h,k,a,b = sympy.symbols("x h k a b") def exp1(x): return x**2+(2*a-b)*x+a**2+1 f = (x - h)**2+k exp2 = solve(Eq(exp1(x),f),[h,k])#平方完成 h = exp2[0][0] k= exp2[0][1]#h,kが求まった print("h = {} ".format(h)) print("k = {} ".format(k)) f = (x - h)**2+k g = f.subs([(x, -1)]) eq3 = Eq(g,6) print(sympy.solve(eq3,b))
参考



コメント
[…] 平成31年の数1Aにある第一問の(3) […]