はじめに
あれ?Pythonでセンターの問題解けるんじゃねって思ったので挑戦しました。
問題は以下の大学入試センターさんが提示してくださっている問題のうち、僕が受験したH29年度のものを引用します。
https://www.dnc.ac.jp/center/kakomondai.html
解いてみる
問題自体は簡単です。ア~エは倍角の公式使うだけでオは②を2乗するだけです。しかし、タイトルの通り、この二問に二時間かけたうえにこれ以上は厳しいと断念しました。
初めに試みたことはsympyという記号計算に強いモジュールに頼ることです。数学の問題をPythonで解こうとしたことがないのでわからなかったのですが、sympyを使えば倍角の公式などを用いて手で解くようにできると思っていました。しかしそんなうまくいかず、手動で倍角の公式を定義しなければなりませんでした。以下にコードを示します。
import sympy as sy
import math as m
exp1 = 2*a**2 - 1 - x
exp2 = 2*b**2 - 1 - y
cosa = sy.solve(exp1,a**2)
cosb = sy.solve(exp2,b**2)
result = cosa[0] + cosb[0]
c = result.subs(x,(4-15*y)/15)
print(c) #あいうえ
d_shi = -2
d_bo = m.sqrt(15)
print(int(d_shi**2)) #お
print(int(d_bo**2))
・出力
17/15
4
15
…苦しかったです。
コードの説明をします。
x…cos2α
y…cos2β
a…cosα
b…cosβ
です。まず、別で倍角の公式を定義しなければならないのでします。そして変数cosaにsolve()を用いることでa^2=の式に直し、代入します。つまりcosaは(cosα)^2となります。そして両辺を足します。変数resultは求めたい(cosα)^2+(cosβ)^2であり、cos2α/2 + cos2β/2 + 1です。ここからcos2α + cos2β = 4/15を使いたいのでsubs()を用いてcos2α = - cos2β + 4/15を代入します。ここでプログラムにおいて4/15 - yとせず、(4-15y)/15とした理由はこうしないと出力が小数となってしまうからです。なんででしょうかね。とりあえずこれで強引ですがア~エまで出力できました。オはそのままやりました。
さいごに
今回はとても強引に数学の問題をPythonで解いてみました。苦労した点はまず倍角の公式を強引に定義してよいものか、何かないのか考えることです。結局強引に定義しましたが…。あとは上にも書いた通り素直に代入すると出力が小数となってしまったことです。無理矢理小数を分数に直すライブラリはあるのですが、当然思ったような分数にならなかったのでそれは諦めました。今回やるに至り以下のサイトを参照したのですが実際に自分でやるとどのように解けばよいのか全くわからなくなりました。悔しいので時間を見つけて関数以外のベクトルや数列にも挑戦したいと思いました。
https://qiita.com/massa142/items/b224a07c1b33e9a39cd8
おわり。
もしよければ↓ぽちっと↓お願いします。