Edited at

2016年度東京大学入試問題数学(文系)第1問をだいたいPythonを使って解く

More than 1 year has passed since last update.

この記事は機械学習に必要な高校数学やり直しアドベントカレンダー Advent Calendar 2016の14日目の記事です。

1日遅れの公開になってしまって申し訳ありません!!

それに時間が足りなくて結局、第一問のみしか解けませんでした…!

徐々に続きを公開していきたいです。

それではどうぞ!


はじめに

 

 こんにちは、subaruと申します。

この度は、数学力もましてやPython力もそこそこ低いにも関わらず…無謀にもタイトルのように東大数学に挑戦してみました。

 

 高校数学といえば東大の問題解ければいいんじゃないの?という、軽い気持ちでやってみようとしたものの…高校時代に真面目に数学をやらなかったことをいまさらながら後悔しております。

 困難なものほど乗りこえがいがあるぜ!ってことで。なんだかんだでPython使って解けることの楽しさに目覚めるきっかけとなりました。Python最高!

 結果的に、数学的にもPython的にも中途半端なゆるふわな記事になりました。


謝辞

 この記事の元ネタ(お気づきの方もいらっしゃるかと思いますが)として、以下の記事を参考にしました。

とても参考になりました。執筆されたAkai_Bananaさんとmassa142さんにお礼申し上げます。

また問題文は以下のサイトから引用させていただきました。

- 大学入試 数学 電子図書館 東大数学 過去問ライブラリー


使用するもの

引用元の記事とレギュレーションを揃えるという意味で、今回用いるライブラリは以下のようになります。


  • Python (3系)


  • Scipy.org にのっている科学計算ライブラリ


第一問


座標平面上の3店P(x,y),Q(-x,-y),R(1,0)が鋭角三角形をなすための(x,y)についての条件を求めよ。また、その条件をみたす点P(x,y)の範囲を図示せよ。


点と座標に関する基本問題ということで。鋭角三角形の成立条件についての問題です。

こちらは図形としてではなく、ベクトル(代数ベクトル)として解いてしまいましょう。

ベクトルの内積は余弦定理に変換することができますので、これを用いましょう。

詳しくはこちら

ベクトルの内積を用いた余弦定理の証明

余弦定理から、


ベクトル内積 > 0


となれば、鋭角三角形だといえます。

これをPythonで書いてみましょう。

import numpy as np

import sympy as sy
from sympy import Symbol, init_printing, simplify, solve, Eq, Or
init_printing()
# x,yを定義する
x = Symbol('x')
y = Symbol('y')
# 点をプロットする
P = np.array([x, y])
Q = np.array([-x, -y])
R = np.array([1, 0])
# ベクトルを定義する
PQ = Q-P
PR = R-P
# ベクトル内積を求める
PQ_PR = np.dot(PQ,PR)
PQ_PR > 0

-2x(-x+1)+2y^2 > 0

x^2-x+y^2 > 0

# ベクトルを定義する

PQ = Q-P
PR = R-P
# ベクトル内積を求める
PQ_PR = np.dot(PQ,PR)
PQ_PR > 0

2x(x+1)+2y^2 > 0

x^2+x+y^2 > 0

# ベクトルを定義する

RP = P-R
RQ = Q-R
# ベクトル内積を求める
RP_RQ = np.dot(RP,RQ)
RP_RQ > 0

-y^2+(-x-1)(x-1) > 0

x^2+y^2-1 < 0

あっさりと式を導出することができました。あとはこれらを図示しましょう。

python

from sympy.plotting import plot, plot_implicit

plot_implicit(Or(Eq(QP_QR, 0), Eq(PQ_PR, 0), Eq(RP_RQ, 0)),(x, -2, 2), (y, -2, 2))



※不等式の範囲を図示する方法がわかりませんでした・・・。どなたかわかれば教えていただきたいです。

というわけで、3つの式を満たす部分(小円の外側かつ大円の内側)が範囲となります。

なんとなく解けたっぽいので、つぎいきましょう!つぎ!


第二問


A,B,Cの3つのチームが参加する野球大会を開催する。以下の方式で試合を行い、2連勝したチームが出た時点で、そのチームを優勝として大会を終了する

(a) 1試合目でAとBが対戦する

(b) 2試合目で,1試合目の勝者と,1試合目で待機していたCが対戦する

(c) k試合目で優勝チームが決まらない場合は,k試合目の勝者とk試合目で待機していたチームがk+1試合目で対戦する。ここではkは2以上の整数とする。なお、すべての対戦において、ぞれぞれのチームが勝つ確率は1/2で引き分けはないものとする


このまま、CodeIQあたりで出題されてもおかしくなさそうな問題ですね。


(1) ちょうど5試合目でAが優勝する確率を求めよ


pythonでコード書いてたらタイムオーバーとなったので、ここまでにしてます‥。


参考文献