|
6 | 6 | # 设定参数 |
7 | 7 | alpha=4 |
8 | 8 | beta=2 |
| 9 | +# beta分布密度函数 |
| 10 | +f=lambda x: 1/scisp.beta(alpha,beta)* \ |
| 11 | + x**(alpha-1) * (1-x)**(beta-1) |
9 | 12 | # 计算密度函数最大值 |
10 | | -x_star=(1-alpha)/(2-alpha-beta) |
11 | | -M=1/scisp.beta(alpha,beta)*x_star**(alpha-1)*x_star**(beta-1) |
| 13 | +M=f((1-alpha)/(2-alpha-beta)) |
12 | 14 | print(M) |
13 | | -# 随机抽两个均匀分布,一个为(0,1),一个为(0,M),抽300个 |
14 | | -N=300 |
15 | | -u1=nprd.random(N) |
16 | | -u2=nprd.random(N)*M |
| 15 | +# 随机抽两个均匀分布,一个为(0,1),一个为(0,M),抽500个 |
| 16 | +N=500 |
| 17 | +x=nprd.random(N) |
| 18 | +u=nprd.random(N)*M |
| 19 | +# 挑出使得u<beta密度函数的x |
| 20 | +accepted=[i for i in range(N) if u[i]<=f(x[i])] |
| 21 | +rand_beta=x[accepted] #生成的Beta分布随机数 |
| 22 | +rand_U_selected=u[accepted] |
17 | 23 | # 画图 |
18 | 24 | import matplotlib.pyplot as plt |
19 | | -# 设定图像大小 |
20 | | -plt.rcParams['figure.figsize'] = (10.0, 10.0) |
| 25 | +# 设定图像大小和坐标范围 |
| 26 | +plt.rcParams['figure.figsize'] = (8.0, 5.0) |
| 27 | +plt.xlim(0,1) |
| 28 | +plt.ylim(0,M+0.1) |
21 | 29 | # 横线和竖线 |
22 | | -x= |
23 | | -# 标题 |
24 | | -plt.xlabel('$u_1$') |
25 | | -plt.ylabel("$u_2$") |
26 | | -plt.title('Relationship of x and y') |
27 | | -plt.scatter(u1,u2,color='blue') ## 画出散点图 |
| 30 | +x_grid=np.linspace(0,1,100)#(0,1)均匀的100个点 |
| 31 | +y_M=np.ones(100)*M |
| 32 | +beta_dens=f(x_grid) |
| 33 | +y1=np.linspace(0,f(0.4),20) |
| 34 | +y2=np.linspace(f(0.4),M,20) |
| 35 | +x_hline=np.ones(20)*0.4 |
| 36 | +plt.xlabel(r'$X$') |
| 37 | +plt.ylabel(r'$U$') |
| 38 | +plt.title('Sampling from Beta dist.') # 标题 |
| 39 | +## 画出散点图 |
| 40 | +plt.scatter(x,u,color='blue',s=0.8) |
| 41 | +plt.scatter(rand_beta,rand_U_selected,color='black',s=0.8) |
| 42 | +plt.plot(x_grid,y_M,color='red') ## 最大值 |
| 43 | +plt.plot(x_grid,beta_dens,color='orange') ## 密度函数 |
| 44 | +plt.plot(x_hline,y1,color='grey') ## 接受区域 |
| 45 | +plt.text(0.42,0.3,"Acceptance",fontsize=15, |
| 46 | + horizontalalignment="left") |
| 47 | +plt.plot(x_hline,y2,color='pink') ## 拒绝区域 |
| 48 | +plt.text(0.38,1.5,"Rejection",fontsize=15, |
| 49 | + horizontalalignment="right") |
28 | 50 | plt.savefig("importance_sampling_beta.eps") |
0 commit comments