2変数の独立性の確認と、周辺累積分布関数から周辺確率密度関数を求めました。

コード (2)
#2022 Q2(2) 2024.7.30
from sympy import symbols, integrate
# 変数の定義
u, v = symbols('u v')
# 同時累積分布関数の定義
F_uv = (u*v + u + v + 1) / 4
# 周辺累積分布関数 F1(u) と F2(v) の計算
F1_u = integrate(F_uv, (v, -1, 1))
F2_v = integrate(F_uv, (u, -1, 1))
# 周辺確率密度関数 f1(u) と f2(v) の計算
f1_u = F1_u.diff(u)
f2_v = F2_v.diff(v)
# 同時確率密度関数 f(u,v) を求める
f_uv = F_uv.diff(u).diff(v)
# f(u,v) を f1(u) と f2(v) の積として表す
product_f1_f2 = f1_u * f2_v
# 結果の出力
results = {
'F1_u': F1_u,
'F2_v': F2_v,
'f1_u': f1_u,
'f2_v': f2_v,
'f_uv': f_uv,
'product_f1_f2': product_f1_f2
}
results
{'F1_u': u/2 + 1/2,
'F2_v': v/2 + 1/2,
'f1_u': 1/2,
'f2_v': 1/2,
'f_uv': 1/4,
'product_f1_f2': 1/4}
コード(3)
計算
#2022 Q2(3) 2024.7.31
from sympy import symbols, pi
import numpy as np
from scipy.integrate import quad
# 符号変数の定義
u, v = symbols('u v')
# f(u,v) の定義
f_uv_value = 1/4
# 条件を満たす範囲でのf(u,v)(数値積分用)
def integrand(v, u):
if u**2 + v**2 <= 1:
return f_uv_value
else:
return 0
# uに関しての積分
def integrate_u(u):
return quad(integrand, -1, 1, args=(u))[0]
# 数値積分による評価
probability_numeric = quad(integrate_u, -1, 1)[0]
# 手計算による値 (π/4) の計算
manual_calculation_value = pi / 4
# 結果の出力
print(f"数値積分による確率: {probability_numeric}\n")
print(f"手計算による値 (π/4): {manual_calculation_value.evalf()}\n")
数値積分による確率: 0.7855319594076084
手計算による値 (π/4): 0.785398163397448
3Dプロット
#2022 Q2(3) 2024.7.31
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# u, vの範囲と値を定義
u = np.linspace(-1, 1, 100)
v = np.linspace(-1, 1, 100)
U, V = np.meshgrid(u, v)
# f(u,v)の値を計算
f_uv_value = 1/4
F = np.where(U**2 + V**2 <= 1, f_uv_value, 0)
# 3Dプロットを作成
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(U, V, F, cmap='viridis')
ax.set_xlabel('U')
ax.set_ylabel('V')
ax.set_zlabel('f(u,v)')
ax.set_zlim(0, 1) # z軸の範囲を設定
ax.set_title('領域 U^2 + V^2 <= 1 における f(u,v) の3Dプロット')
plt.show()
