私たちは、少子化に起因する社会的課題に対し、先端技術を活用した実装可能なソリューションを提供するテクノロジーパートナーです。
お客様が抱える多様な課題を IT・デジタル領域から解決する専門組織として、要件を的確に把握し、最適なアーキテクチャ設計と技術統合を実現します。
また、AI を中心とした DX 推進により、出産・育児領域における新たな価値創出と、持続性のあるイノベーションを提供してまいります。
4 (250点)
【問題(顧客のお困り)】
(1) p, q を実数とする。
実数全体で定義された関数 y = e^x のグラフが直線 y = px + q と共有点を持たないための
p と q が満たすべき条件を求めよ。
(2) 実数全体で定義された微分可能な関数 f(x) が条件
f'(x) = x(2x^2 + 1)^(2/3), f(0) = 1
を満たすとする。関数 f(x) を求めよ。
【方針(要件定義)】
(1) 共有点を持たない条件(直線 y = px + q と y = e^x)
共有点なし ⇔ 方程式 e^x = px + q が実数解を持たない条件を調べる
関数 h(x) = e^x − (px + q) を定義し、h(x) の最小値の符号を見る
e^x は凸関数なので、接線を 1 本も引けない直線の条件=判別条件
h'(x) = e^x − p が 0 になる点(= 極値)で値を調べる
極値 x = ln p(p > 0 が必要)を用いて、h(ln p) > 0 が共有点なしの条件
p ≤ 0 のときは別途、常に e^x > px + q となる条件を調べる必要がある
(2) 微分方程式 f'(x) = x(2x^2 + 1)^(2/3) の積分
与えられた f'(x) をそのまま積分して f(x) を求める
置換積分 u = 2x^2 + 1 を用いて簡略化
du = 4x dx なので、(1/4)∫u^(2/3) du の形に変換
u^(2/3) の積分を実行し、元の変数 x に戻す
最後に初期条件 f(0) = 1 を使って積分定数 C を決定
最終的な f(x) を明示的に記述する
【ソリューション】
(1) 共有点なしとなる条件(y = e^x と y = px + q)
共有点なしとは、方程式 e^x = px + q が実数解を持たないことを意味する。
差の関数 h(x) = e^x − (px + q) を定義して調べる。
h(x) は凸関数であり、最小値だけを持つ。この最小値が正であれば、h(x) = 0 の解は存在しない。
p の符号で場合分けすると次の通り。
p > 0
h'(x) = e^x − p = 0 より、最小値は x = ln p にある。
最小値 h(ln p) = p − p ln p − q が正なら共有点なし。
よって条件は
q < p − p ln p
p = 0
直線は y = q。
e^x の値域は (0, ∞) なので、q ≤ 0 の場合は交点が存在しない。
条件は
q ≤ 0
p < 0
h(x) は単調増加で、負の無限大から正の無限大へ変化するため、必ず1つの解が存在する。
共有点なしは不可能。
まとめると、共有点なしの条件は次の通り。
・p > 0 かつ q < p − p ln p
・p = 0 かつ q ≤ 0
・p < 0 の場合は不可
(2) 微分方程式 f'(x) = x(2x^2 + 1)^(2/3), f(0) = 1 の解
積分で f(x) を求める。
u = 2x^2 + 1 と置くと、du = 4x dx より x dx = du/4。
これを使って積分すると、
f(x) = (3/20)(2x^2 + 1)^(5/3) + C
初期条件 f(0) = 1 を代入すると C = 17/20。
したがって最終的な解は
f(x) = (3/20)(2x^2 + 1)^(5/3) + 17/20
Python(検証+Matplotlib可視化)コード
# ======================================================
# Libraries
# ======================================================
import numpy as np
import matplotlib.pyplot as plt
from sympy import symbols, exp, Eq, solve, diff, integrate
# ======================================================
# (1) e^x と直線 px+q の共有点なし条件の検証
# ======================================================
# Symbols
x, p, q = symbols('x p q', real=True)
# Functions
h = exp(x) - (p*x + q)
h_prime = diff(h, x)
# 極値条件(p > 0 の場合)
x_min = solve(Eq(h_prime, 0), x) # x = ln(p)
# h(ln p)
h_min = h.subs(x, x_min[0])
# 条件式
# 共有点なし ⇔ h_min > 0
# h_min = p - p*ln(p) - q
# よって q < p - p ln p
print("Condition (p > 0): q < p - p ln p")
print("Condition (p = 0): q ≤ 0")
print("Condition (p < 0): no solution (must intersect)")
# ======================================================
# (1) Matplotlib Plot (e^x vs px+q)
# ======================================================
p_val = 1.2 # example parameter
q_val = -0.1
xx = np.linspace(-2, 3, 400)
yy_exp = np.exp(xx)
yy_line = p_val*xx + q_val
plt.figure(figsize=(6,4))
plt.plot(xx, yy_exp, label="y = e^x")
plt.plot(xx, yy_line, label=f"y = {p_val}x + {q_val}")
plt.title("Exponential vs Line")
plt.xlabel("x")
plt.ylabel("y")
plt.grid(True)
plt.legend()
plt.show()
# ======================================================
# (2) 微分方程式の検証と f(x) の導出
# ======================================================
# f'(x) = x(2x^2 + 1)^(2/3)
fprime = x*(2*x**2 + 1)**(2/3)
# 積分
f_general = integrate(fprime, x)
print("Indefinite Integral f(x) =", f_general)
# 初期条件 f(0) = 1
C = symbols('C')
f_with_C = f_general + C
C_value = solve(Eq(f_with_C.subs(x, 0), 1), C)[0]
# 完成した f(x)
f_final = f_with_C.subs(C, C_value)
print("Final f(x) =", f_final)
# 数値関数へ
def f_num(t):
return (3/20)*(2*t*t + 1)**(5/3) + 17/20
# ======================================================
# (2) Matplotlib plot of f(x)
# ======================================================
xx2 = np.linspace(-2, 2, 300)
yy2 = f_num(xx2)
plt.figure(figsize=(6,4))
plt.plot(xx2, yy2, label="f(x)")
plt.title("Solution of Differential Equation")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.grid(True)
plt.legend()
plt.show()
動作内容
(1)
- SymPy が
h(x)=e^x−(px+q)
の極小点 h(ln p) を象徴計算し、
q < p − p ln p
を出力 - 直線と e^x を Matplotlib でプロットし、交点の有無を視覚的に確認
(2)
- SymPy により
∫ x(2x^2+1)^(2/3) dx を象徴計算 - 初期条件 f(0)=1 を満たす定数 C を計算
- 完成形
f(x) = (3/20)(2x^2+1)^(5/3) + 17/20 - Matplotlib で f(x) の曲線を描画
