﻿import numpy as np  # モジュールNumpyをnpという名前でインポート
import matplotlib.pyplot as plt  # グラフ描画のためのモジュール
n = 100000  # 試行回数
np.random.seed(1)  # 乱数のシード値を固定
X = np.random.rand(n)  # U(0,1)に従う乱数をn個生成し，Xに代入
Y = (2-2*X) * np.random.rand(n)  # U(0,2-2X)に従う乱数をn個作成し，Yに代入
# モンテカルロ法で求めた期待値E(Y)を表示 (参考：理論値は0.5)
print(np.mean(Y))
# Yの周辺密度関数
def h(y):
    if 0 < y and y <= 2:
        return -(1/2) * np.log(y/2)
    else:
        return 0

# 0.01以上2以下の数を等間隔に1000個取る
y_values = np.linspace(0.01, 2, 1000)
vh = np.vectorize(h)  # スカラー関数のベクトル化
h_values = vh(y_values)
plt.title("Y")
plt.hist(Y, bins=20, density=True)  # Yのヒストグラム
plt.plot(y_values,h_values)  # Yの周辺密度関数
plt.show()  # ヒストグラムと周辺密度関数の比較