QEの計算例: 実際の大学入試過去問の解法
例題
b, c を実数とする。2次関数 f(x)=−x2+bx+c が、0≤f(1)≤2, 5≤f(3)≤6 を満たすとする。
- f(4) のとりうる値の範囲を求めよ。
- 放物線 y=f(x) の頂点の y 座標 q のとりうる値の範囲を求めよ。
- 放物線 y=f(x) の頂点の y 座標が 6 のとき、放物線y=f(x)と x 軸で囲まれた部分の面積 S を求めよ。
(出典: 2017年度 大阪大学 理系 前期日程 問題4 https://www.densu.jp/osaka/17osakaspass.pdf )
解法
この計算例では、QEの際によく用いられる方法のいくつかを紹介しながら問題を解きます。
まず、関数 f(x)=−x2+bx+cを定義します。(関数定義の際の注意は、この計算例の1つ前の計算例を参照してください。
f[x_] := -x^2 + b x + c
次に、問題の仮定
b, c を実数とする。2次関数 f(x)=−x2+bx+c が、0≤f(1)≤2, 5≤f(3)≤6 を満たすとする。
の部分は
ある実数 b, c が存在して、2次関数 f(x) が、0≤f(1)≤2, 5≤f(3)≤6 を満たすとする。
と書き換えられます。これを1階述語論理式に直すと
∃b∃c(0≤f(1)≤2∧5≤f(3)≤6)となることに注意します。
関数の値の範囲を求める際には新しい変数を導入する
(1) f(4) のとりうる値の範囲を求めよ。
を解きます。QEを用いて関数の値の範囲を求める際には、新たな変数を1個用意し、関数の値をその変数に代入する」という技がよく使われます。
すると、この問題から、次の1階述語論理式を得ます。
∃b∃c(0≤f(1)≤2∧5≤f(3)≤6∧k=f(4))この論理式に対してQEを行うと、変数b,cが消去され、変数kのみを含む論理式が出力されるはずです。そして、その論理式を満たすkの範囲が解答になります。
以上を踏まえて、Mathematica に入力する論理式を定義します。
f5 = Exists[{b, c}, 0 <= f[1] <= 2 && 5 <= f[3] <= 6 && k == f[4]]
Reduce関数に論理式を入力して量化子消去を実行します。
Reduce[f5, Reals]
すると、次の出力を得ます。
7/2 <= k <= 6
すなわち、問題の解答として 72≤f(4)≤6 が導かれます。
関数の最大値を表す
(2) 放物線 y=f(x) の頂点の y 座標 q のとりうる値の範囲を求めよ。
を解きます。
この問題では、f(x)のx2の係数が−1、すなわち負ですから、f(x)のグラフは「上に凸」であり、放物線の頂点は関数f(x)の最大値を意味します。そこで
f(x)があるx0で最大値qをとる
ことにすると、この事実は以下のように説明できます。
あるx0が存在してf(x0)=qが成り立ち、かつ任意のxに対してf(x)≤f(x0)が成り立つ。
そして、この条件を含めた1階述語論理式は以下の式となります。
∃b∃c∃x0(0≤f(1)≤2∧5≤f(3)≤6∧f(x0)=q∧∀x(f(x)≤f(x0)))以上を踏まえて、Mathematica に入力する論理式を定義します。
f6 = Exists[{b, c, x0}, 0 <= f[1] <= 2 && 5 <= f[3] <= 6 && q == f[x0] && ForAll[x, f[x] <= f[x0]]]]
Reduce関数に論理式を入力して量化子消去を実行します。
Reduce[f6, Reals]
すると、次の出力を得ます。
5 <= q <= 25/4
すなわち、問題の解答として 5≤q≤254 が導かれます。
積分の計算と組み合わせて問題を解く
(3) 放物線 y=f(x) の頂点の y 座標が 6 のとき、放物線y=f(x)と x 軸で囲まれた部分の面積 S を求めよ。
を解きます。
この小問では、まず「放物線 y=f(x) の頂点の y 座標が 6」という条件を、以下の1階述語論理式で表します。前問と同様、関数の最大値の表現を使います。
∃x0(f(x0)=6∧∀x(f(x)≤f(x0)))この論理式をMathematicaに入力します。
f7 = Exists[x0, f[x0] == 6 && ForAll[x, f[x] <= f[x0]]]]
Reduce関数に論理式を入力して量化子消去を実行します。
Reduce[f7, Reals]
すると、次の出力を得ます。
c <= 6 && (b == -Sqrt[24 - 4 c] || b == Sqrt[24 - 4 c])
これは c≤6∧b=±√24−4c を表しますが、bとcの関係として、もう少し単純な式が欲しいですので、変数の順序を与えてQEの計算を行います。
Reduce[f7, {b,c}, Reals]
すると、次の出力を得ます。
c == 1/4 (24 - b^2)
c=14(24−b2) という、より単純な関係式が得られました。このことは「c=14(24−b2)のとき、f(x)の最大値は6である」ことを表します。
次に、このときの「放物線y=f(x)と x 軸で囲まれた部分の面積 S 」を求めます。そこで、放物線y=f(x)と x 軸の交点のx座標を求めます。
まず、f(x)においてc=14(24−b2)とした式をg(x)とおきます。次の式をMathematicaに入力します。
g[x_] := f[x] /. c -> 1/4 (24 - b^2)
上の式の f[x] 後ろの /. は「その後ろで定義された変数の置換を行う」という指示です。そして c -> 1/4 (24 - b^2) は、c を1/4 (24 - b^2)で置き換えるという指示です。
次に、放物線 g(x) と x 軸の交点を求めます。MathematicaのSolve関数で、方程式 g(x)=0 をxについて解きます。
Solve[g[x] == 0, x]
すると、次の出力を得ます。
\{\{x -> 1/2 (-2 Sqrt[6] + b)\}, \{x -> 1/2 (2 Sqrt[6] + b)\}\}
これより、解は x=12(b±2√6) であることがわかります。
最後に積分を求めます。これまでの結果から
S=∫12(b+2√6)12(b−2√6)g(x)dxを求めればよいことがわかります。Mathematicaにて、以下の計算を行います。
Integrate[g[x], {x, 1/2 (-2 Sqrt[6] + b), 1/2 (2 Sqrt[6] + b)}]
すると、次の出力を得ます。
1/24 (-2 Sqrt[6] + b)^3 - 1/24 (2 Sqrt[6] + b)^3 + 1/4 (24 - b^2) (1/2 (2 Sqrt[6] - b) + 1/2 (2 Sqrt[6] + b)) + b (-(1/8) (-2 Sqrt[6] + b)^2 + 1/8 (2 Sqrt[6] + b)^2)
これは
124(−2√6+b)3−124(2√6+b)3+14(24−b2)(12(2√6−b)+12(2√6+b))+b((−18)(−2√6+b)2+18(2√6+b)2)を表しますが、できればより単純な表現の式を得たいところです。そこで、Mathematica の関数 Siplify を用いて、式を簡約します。以下の入力式に現れる記号 % は、直前の出力式を表します。
Simplify[%]
すると、次の出力を得ます。
8 Sqrt[6]
これにより、最終的な答えとして S=8√6 を得ます。