计计计算算算物物物理理理homework7
李明达 PB18020616
1
*
摘摘摘要要要
这是计算物理第七题作业,作业题目是对一个实验谱数值曲线
p(x)
,自设
F(x)
,分别用直接抽样和
舍选法对 p(x) 抽样。比较原曲线和抽样得到的曲线以验证。讨论抽样效率。
关关关键键键词词词
直接抽样法,舍选抽样法
1
中国科学技术大学物理学院 *作作作者者者: dslmd@mail.ustc.edu.cn
这篇报告里,我首先阐述两种抽样的算法,介
绍我所采用的原理,然后给出我自己的实验结果,
并与原曲线对比验证,其次,我关于舍选法抽样效
率进行讨论。最后,我对这篇实验进行总结。
我们先来看一下
”data.txt”
到底是一个什么样
的图,如图1所示:
图图图 1. 原题中给出的分布图
通过我在
C
语言代码里写的
read data()
函数我
可以读 出,总数据点的个数是
396002
个。我们后续
的抽样的数目,会以这个为其中一个标准。
1. 算算算法法法以以以及及及公公公式式式
1.1 直直直接接接抽抽抽样样样
原则上我们可以用插值的办法处理数据,然后
对连续函数进行抽样。但是为了更加直接,在此次
实验我并没有处理 离散的数据点,我直接采用离散
抽样。离散抽样的算法是: if
Σ
i−1
k=0
p[k] < r < Σ
i
k=0
p[k]
then
x → x[i]
即, 如 果 随 机 数 落 在
i-1
和
i
的 分 布 函 数 之 间,
则 这 时 候 我 认 为 抽 样 落 在
x[i]
点。 于 是 该 点
的
sampling number
加一。最后
sampling number
反
映了某一个x处总共的随机数点数。
在 这 个 实 验 中, 我 定 义 了
read data()
来 读
取
data.txt
文件中的 数据
(
注意,开头已被删除
)
,然
后通过
direct sampling(int seed, int N)
函数直接抽
样
N
次并存到抽样结果
”direct sampling.txt”
,最后
通过Python画图。
图图图 2. 直接抽样的结果(按照原文件3960个点)
图图图 3. 舍选抽样的结果(按照原文件3960个点)
1.2 舍舍舍选选选法法法抽抽抽样样样及及及其其其效效效率率率
舍选法我同样采取离散抽样的办法,在x
[
i
]
<
rand
1
< x
[
i
+ 1]
的范 围内, 如果rand
2
> p
[
i
]
,
则舍 去该 点; 相反, 如果rand
2
< p
[
i
]
, 则把这
个点留下, 于是该点的
sampling number
加一。 最