引力波数据分析第二章题目

本系列文章旨在充实博客内容记录引力波数据分析课程的作业成果,标记为引用的题目部分是直接复制自胡教授引力波数据处理讲义的内容,大部分公式也来自该讲义,不再一一标出。

如果真的有人搜索到了本系列文章并参考,最好能标记一下引用哦。

Exercise 2.1

利用公式2.6,结合 , , ,尝试推导

在 Newtonian 极限下,可解得 , , , 可以得到

代入下式

可得

Exercise 2.2

在真空中,有 ,考虑平面波解 。试证明, 是一个
零矢量 (null vector),即,

在真空中有

代入平面波解 可得

所以 是一个零矢量。

Exercise 2.3

一圈粒子围成圆型,在垂直于其平面方向上,有引力波作用。假设引力波为正弦函数 。采用长波近似,即粒子间距相对于引力波波长可以忽略不计。请利用公式 2.34,编写程序进行数值积分,并作图画出:

,当 时,粒子的分布。

,当 时,粒子的分布。

,当 时,粒子的分布。

,当 时,粒子的分布。

本题的解法是错误的,仅作为反面实例

由于引力波垂直于粒子分布的平面,即 ,只考虑 坐标,可以把2.34式化简为以下形式:

两重积分后可以得到

根据给出的 ,很容易计算出给定情况下的粒子分布图像。下面给出的结果中,有40个粒子均匀分布在半径为1的圆上,取 。四种情况下的粒子分布如图所示。

粒子分布

相对应的,也很容易画出两种模式的动图。由于 环境下插入 gif 动图比较麻烦(我懒),因此把动图单独附在压缩包中展示,即 hx.gif 和 h+.gif。

最后给出使用到的代码,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

phi = np.linspace(0, 2 * np.pi, 40, endpoint = True)
particles = np.array([[np.cos(phi)], [np.sin(phi)]])

def position(frame, model = 0, h0 = 0.3):
time = frame
if model == 0:
# plus mode
pos = particles * (1 + 0.5 * h0 * np.sin(time) * np.cos(2 * phi))
else:
# cross model
pos = particles * (1 + 0.5 * h0 * np.sin(time) * np.sin(2 * phi))
ln.set_data(pos[0], pos[1])
return ln,

def init():
ax.set_xlim(-1.5, 1.5)
ax.set_ylim(-1.5, 1.5)
ax.set_xlabel('x')
ax.set_ylabel('y')
return ln,

fig, ax = plt.subplots(figsize = (6, 6))
plt.plot(particles[0], particles[1], 'bo', markersize = 2)
ln, = plt.plot([], [], 'ro', markersize = 3)
plt.title('$h_+$ when $t = \pi/2$', fontsize = 14)
init()
position(np.pi * 0.5)
plt.savefig('1.jpg')
plt.show()

fig, ax = plt.subplots(figsize = (6, 6))
plt.plot(particles[0], particles[1], 'bo', markersize = 2)
ln, = plt.plot([], [], 'ro', markersize = 3)
init()
plt.title('$h_+$ when $t = -\pi/2$', fontsize = 14)
position(-np.pi * 0.5)
plt.savefig('2.jpg')
plt.show()

fig, ax = plt.subplots(figsize = (6, 6))
plt.plot(particles[0], particles[1], 'bo', markersize = 2)
ln, = plt.plot([], [], 'ro', markersize = 3)
init()
plt.title(r'$h_\times$ when $t = \pi/2$', fontsize = 14)
position(np.pi * 0.5, 1)
plt.savefig('3.jpg')
plt.show()

fig, ax = plt.subplots(figsize = (6, 6))
plt.plot(particles[0], particles[1], 'bo', markersize = 2)
ln, = plt.plot([], [], 'ro', markersize = 3)
init()
plt.title(r'$h_\times$ when $t = -\pi/2$', fontsize = 14)
position(-np.pi * 0.5, 1)
plt.savefig('4.jpg')
plt.show()

fig, ax = plt.subplots(figsize = (6, 6))
plt.plot(particles[0], particles[1], 'bo', markersize = 2)
ln, = plt.plot([], [], 'ro', markersize = 3, animated=True)
plt.title(r'$h_\times$')
anim = animation.FuncAnimation(fig, position, frames = np.linspace(0, 2*np.pi, 90), fargs = (1, 0.3), init_func=init, interval=50, blit=True)
anim.save('hx.gif', writer = animation.writers['pillow'](fps = 30))

fig, ax = plt.subplots(figsize = (6, 6))
plt.plot(particles[0], particles[1], 'bo', markersize = 2)
ln, = plt.plot([], [], 'ro', markersize = 3, animated=True)
plt.title('$h_+$')
anim = animation.FuncAnimation(fig, position, frames = np.linspace(0, 2*np.pi, 90), fargs = (0, 0.3), init_func=init, interval=50, blit=True)
anim.save('h+.gif', writer = animation.writers['pillow'](fps = 30))