Математическое моделирование в астрофизике. В 2 частях. Ч.2. Учебное пособие
.pdfна заряд и массу электрона. Для простоты принять, что электрические поля не вычисляются из уравнения Пуассона, а задаются на каждом шаге в каждой ячейке как случайные числа в интервале от −A до A. Перемещение частиц осуществлять явным методом Эйлера. Убедиться, что суммарная энергия системы растет линейно, и определить зависимость скорости роста от A.
2. МЕТОД МОНТЕ-КАРЛО. МОДЕЛИРОВАНИЕ СТОХАСТИЧЕСКИХ ПРОЦЕССОВ
В этой главе мы рассмотрим метод Монте-Карло – метод численного моделирования вероятностных процессов, основанный на многократном применении генератора случайных чисел. Область его применения не ограничивается задачами астрофизики: такие коды используются в экономике, биофизике, химии, логистике и многих других областях. В астрофизике метод Монте-Карло может применяться, например, для моделирования диффузии, излучения, ядерных реакций.
Коды, где применяется метод Монте-Карло, могут существенно различаться, но их объединяет общий принцип. Они основаны на центральной предельной теореме (ЦПТ), согласно которой при большом количестве реализа-
|
N |
ций случайной величины ξ распределение суммы ρN = |
Xi |
ξi будет близко |
|
|
=1 |
к нормальному. Если среднее значение Mξ = m, а дисперсия Dξ = σ2, то параметры распределения ρN будут следующие: MρN = Nm, DρN = Nσ2.
Это означает, что вероятность отклонения ρN /N от m будет иметь вид
|
ρN |
−m |
|
σ |
|
1 |
|
|
i |
ξi −m |
|
σ |
|||||||
P N |
≤ k√N = P |
N |
|
≤ k√N → 2Φ(k)−1, N → ∞, |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
k |
|
|
|
|
|
|
|
|||
где k – целое число; Φ(k) = |
|
r |
|
(1/√ |
|
) exp( x2/2)dx – стандартное нор- |
|||||||||||||
|
|
2π |
|||||||||||||||||
мальное распределение. |
|
−∞ |
|
|
|
|
− |
||||||||||||
|
|
|
|
|
|
|
|
|
|||||||||||
|
Значения Φ(k) известны. Например, 2Φ(3) − 1 = 0, 9972, т. е. вероят- |
||||||||||||||||||
ность попасть в 3σ-окрестность среднего значения близка к 100 %. Таким
21
образом, погрешность вычисления среднего значения методом Монте-Карло
√
падает как 1/ N.
Необходимо отметить, что большинство генераторов случайных чисел, используемых в стандартных языках программирования, на самом деле представляет собой псевдослучайную последовательность, в которой каждое следующее число находится как функция предыдущих.
Во-первых, из этого следует, что есть возможность получить идентичные последовательности, выбрав одинаковое затравочное число (seed). Это может быть удобно для некоторых задач или, наоборот, мешать. Для управления последовательностями используют специальную директиву. Например, в C++ она записывается как srand(a), где a имеет тип unsigned int. Если нужно взять конкретную последовательность несколько раз подряд (например, для отладки кода), то несколько раз вызывают эту процедуру с одним и тем же значением a. В противном случае можно вместо a подставить функцию time(NULL) из библиотеки time.h. Эта функция возвращает число секунд, прошедших с полуночи 1 января 1970 года. Вызов процедуры srand с таким аргументом обеспечивает случайный выбор последовательности. При повторном запуске программы она будет другой.
Во-вторых, псевдослучайная последовательность содержит ограниченное число элементов. В определенный момент она зацикливается. После этого погрешность метода Монте-Карло перестает уменьшаться с ростом числа испытаний N. Это необходимо контролировать, хотя обычно длина случайной последовательности очень велика (порядка двух в степени разрядности операционной системы) и число испытаний оказывается меньше.
Помимо числа испытаний N на погрешность вычислений влияет также дисперсия случайной величины σ. Рассмотрим простой пример, который это
демонстрирует. Для этого возьмем при помощи метода Монте-Карло опре-
rb
деленный интергал I = g(x)dx.
a
Первый способ достаточно прост: по определению I = (a − b) g , где
g – среднее значение функции g(x) на отрезке (a, b). Согласно ЦПТ, среднее значение можно найти, случайно выбирая на отрезке точки ξi и усредняя g(ξi) по большому числу испытаний. При этом точки распределяются по отрезку равномерно.
22
Если выбирать точки на отрезке (a, b) не равномерно, а с плотностью
rb
распределения pξ(x), то среднее значение g(ξ) будет равно g(x)pξ(x)dx.
a
Однако если в каждой точке считать величину ζ = g(ξ)/pξ(ξ), то Mζ =
rb
= {g(x)/pξ(x)}pξ(x)dx = I. Таким образом, интеграл I можно вычислить
a
по следующей схеме.
1.Взять случайную выборку величин ξ на отрезке (a, b).
2.Вычислить ζ(ξi).
3.Усреднить по числу испытаний.
Дисперсия ζ минимальна при pξ(x) |g(x)|, т. е. в случае, когда плотность вероятности воспроизводит форму подынтегральной функции. Интуитивно это понятно, поскольку области, где |g(x)| велико, дают наибольший вклад в интеграл, следовательно, расчет будет точнее, если в них попадет больше точек. Однако выбирать pξ(x) сложного вида не стоит: это затруднит процедуру генерации случайных чисел с таким распределением.
Два способа генерации случайных чисел с заданным распределением были даны в первой части данного учебного пособия. Один способ включает несколько итераций и, следовательно, приводит к увеличению количества используемых случайных чисел. Второй способ требует нахождения аргумента интегральной функции распределения по ее значению. Следовательно, для его удобной реализации pξ(x) должна быть легко интегрируема, при этом ее первообразная также должна иметь достаточно простой вид.
π
r2
В качестве примера рассмотрим интеграл I = cos xdx и возьмем его
0
методом Монте-Карло с двумя вариантами pξ(x): p1(x) = 2/π (равнораспределенные точки) и p2(x) = π4 (1 − 2πx). Подынтегральная функция, а также две плотности вероятности показаны на рис. 2.1.
Функция p2(x) имеет простой линейный вид, но при этом хорошо воспроизводит поведение g(x). Для выборки из десяти случайных значений ξ получились приближенные значения интеграла I1 ≈ 1, 21666 в первом и
I2 ≈ 0, 97641 во втором случаях. Ясно, что при неравномерно распределенной ξ полученное значение существенно ближе к точному значению I = 1.
23
|
|
|
|
|
|
|
|
|
g(x) |
1 |
|
|
|
|
|
|
|
|
p1(x) |
|
|
|
|
|
|
|
|
p2(x) |
|
|
|
|
|
|
|
|
|
|
|
0.5 |
|
|
|
|
|
|
|
|
|
0 |
0,2 |
0,4 |
0,6 |
0,8 |
1 |
1,2 |
1,4 |
1,6 |
1,8 x |
Рис. 2.1. Интегрирование методом Монте-Карло: подынтегральная функция и два варианта функции распределения случайной величины
Покажем теперь, как можно применить метод Монте-Карло для моделирования диффузии космических лучей. Процесс диффузии важен как при ускорении частиц до сверхвысоких энергий на бесстолкновительных ударных волнах (так называемом диффузионном ускорении, или ускорении Ферми 1-го порядка), так и при их дальнейшем распространении в Галактике, которое также хорошо описывается в рамках диффузионного приближения. Также существует гипотеза, что распространение космических лучей может
быть сверхдиффузионным [6,17].
Уравнение диффузии с постоянным коэффициентом D выглядит сле-
дующим образом: |
∂2n |
|
|
||
|
∂n |
|
(2.1) |
||
|
|
= D |
|
. |
|
|
|
∂x2 |
|||
|
∂t |
|
|
||
Одной из часто решаемых задач является задача Коши для уравне-
ния (2.1): задается начальное распределение вещества в пространстве и исследуется его дальнейшая эволюция. Для точечного начального распределения n(t = 0) = Nδ(x) решение имеет вид
|
√ |
N |
− |
x2 |
, |
||
n(x, t) = |
|
exp |
|
||||
4Dt |
|||||||
4πDt |
|||||||
т. е. средний квадрат расстояния от начальной точки растет со временем линейно:
x2 = 2Dt. |
(2.2) |
24
Можно решать уравнение (2.1) как эллиптическое уравнение на пространственной сетке либо применить подход Лагранжа в сочетании с методом Монте-Карло и представить процесс диффузии как последовательность случайных блужданий ансамбля частиц (как и в кинетических кодах, каждая частица является макрочастицей, т. е. соответствует большому числу реальных частиц). При таком подходе пространственная дискретизация не нужна.
Приведем простейший пример случайных блужданий на прямой. Пусть частицы при t = 0 находятся в начале координат и могут за один шаг по времени проходить случайное расстояние по прямой в промежутке от −a
до a. Через большое число шагов
xk+1 = xk + ∆x = xk = . . . = x0 = 0,
т. е. центр распределения частиц останется в начале координат. При этом
x2k+1 = x2k +2 xk ∆x + ∆x2 = x2k + ∆x2 = . . . = (k+1) ∆x2 , (2.3)
т. е. средний квадрат расстояния до начальной точки растет со временем линейно, и такой процесс действительно носит диффузионный характер. Сравнивая (2.2) c (2.3) и считая t = (k + 1)dt, находим
D = |
∆x2 |
= |
1 |
wa x2dx = |
a2 |
. |
|
|
|
||||
|
2dt |
|
4adt −a |
6dt |
||
Листинг 2.1. Пример реализации алгоритма одномерных
блужданий на языке Python
from numpy . random import rand
from |
numpy import zeros , |
ones , exp , linspace , |
histogram |
|
|
from |
math import pi , sqrt |
|
import matplotlib . pyplot |
as plt |
|
25
def diffusion (N = 10000 , Nsteps = |
100 , |
a = |
1.0) : |
|||||
x = |
zeros (N) |
|
|
|
|
|
|
|
for |
step in |
range ( Nsteps ): |
|
|
|
|||
x = x + ( rand (N) * 2 - ones (N)) * a |
|
|
||||||
counts , bins |
= histogram (x , bins |
= 100 , |
density |
|||||
= True ) |
|
|
|
|
|
|
|
|
plt . hist ( bins [: -1] , |
bins , weights = counts |
* N , |
||||||
color = |
’ blue ’) |
|
|
|
|
|
||
plt . xlabel ( ’x ’, fontsize =10) |
|
|
|
|||||
plt . ylabel ( ’n ’, fontsize =10) |
|
|
|
|||||
D = a * a / 6.0 |
|
|
|
|
|
|||
xmax = 3 * |
sqrt (2 * |
D |
* Nsteps ) |
|
|
|
||
x = linspace (- xmax , xmax , 100) |
|
|
|
|||||
dtheor = N |
* |
exp (-x |
* |
x / (4.0 * |
D * |
Nsteps )) |
||
/ sqrt (4 |
* |
pi * D |
* |
Nsteps ) |
|
|
|
|
plt . plot (x , dtheor , ’k ’)
plt . savefig ( ’ distribution . png ’) plt . show ()
Реализация алгоритма на языке Python приведена в листинге 2.1. На рис. 2.2 распределение частиц, полученное в результате работы программы (синяя гистограмма), сравнивается с теоретически предсказанным (черная кривая). Хорошее согласие предсказанной и смоделированной плотности частиц доказывает правильность работы алгоритма случайных блужданий.
Рассмотрим задачу о диффузии частиц с максвелловским распределением по скоростям в трехмерной области с постоянной длиной свободного пробега λ. Температуру среды обозначим T , а массу частиц m. В бесстолкновительной среде диффузия обусловлена неоднородностями магнитного поля, а не столкновениями между частицами. Однако на этом этапе мы не будем изучать ее физическую природу.
Коэффициент диффузии теперь меняется пропорционально скорости частицы v. Его среднее значение равно
D = 3λ v = |
3λr |
|
|
|
πm . |
||||
1 |
|
1 |
8kT |
|
26
n
800 |
|
|
|
|
|
|
|
|
|
600 |
|
|
|
|
|
|
|
|
|
400 |
|
|
|
|
|
|
|
|
|
200 |
|
|
|
|
|
|
|
|
|
0 |
−20 |
−15 |
−10 |
−5 |
0 |
5 |
10 |
15 |
20x |
|
Рис. 2.2. Результат работы алгоритма случайных блужданий, |
|
|||||||
|
|
|
приведенного в листинге 2.1 |
|
|
|
|||
Если изначально все частицы находились в одной точке, плотность частиц в момент времени t будет иметь вид
n(r, t) = |
N |
exp − |
r2 |
. |
(2.4) |
(4πDt)3/2 |
4Dt |
Построим численную модель такой диффузии с использованием подхода Лагранжа. Разобьем время на интервалы длиной k. Тогда за шаг каждая частица будет проходить расстояние ∆ri = vik. Пусть на каждом шаге существует вероятность упругого рассеяния (изменения направления движения при неизменном модуле скорости), равная pscat = vik/λ. Шаг по времени следует выбрать заведомо меньшим характерного времени между рассеяниями: vmaxk < λ. Для реализации случайных рассеяний на каждом шаге для каждой частицы будем генерировать случайное число в интервале (0, 1). Если оно окажется меньше pscat, случайным образом изменим направление движения частицы, иначе частица продолжит движение по прямой. Итоговое распределение в пространстве будет описываться выражением (2.4).
27
Введем следующую нормировку:
r v ˜ v t ˜ 1 r˜ = λ, v˜ = v , t = λ , D = 3.
Рассеяние частиц будем осуществлять в сферической системе координат (v, θ, φ). При рассеянии v сохранится, а два угла θ и φ примут случайные значения. Новые проекции скорости вычислим по стандартным формулам:
vx′ = v sin θ cos φ; vy′ = v sin θ sin φ; vz′ = v cos θ.
Следует помнить, что для изотропного рассеяния распределение φ должно быть равномерным от 0 до 2π. Однако плотность вероятности получения конкретного значения θ равна 0, 5 sin(θ). Действительно, как видно на рис. 2.3, вероятность получить θ в интервале dθ пропорциональна отношению площади закрашенного кольца к площади сферы, т. е. 2π sin θdθ/4π. Вместо того, чтобы получать случайное значение θ с заданной функцией распределения, удобнее задавать случайные значения cos θ, потому что для них плотность вероятности fcos θ = fθ|dθ/d(cos θ)| = 0, 5, т. е. косинус θ равнораспределен.
Приведенный алгоритм легко обобщается на случай, когда коэффициент диффузии зависит от скорости частицы и от ее положения в пространстве. Эта задача часто встречается в астрофизике. Например, методом Монте-Карло можно моделировать процесс ускорения Ферми на бесстолкновительных ударных волнах. В простейшем приближении этот процесс заключается в упругих рассеяниях частиц на электромагнитных флуктуациях по обе стороны фронта ударной волны. Поскольку рассеяния происходят изотропно в системе покоя плазмы, в итоге частицы набирают энергию за счет разницы скорости потока за и перед фронтом ударной волны.
Механизм инжекции частиц в этот процесс достаточно сложен и может быть смоделирован кинетическими кодами, однако процесс ускорения можно моделировать методом Монте-Карло, немного дополнив код из предыдущего примера. Теперь в зависимости от того, находится частица за или перед
28
z
θ
y
φ
x
Рис. 2.3. Сферические координаты
фронтом, коэффициент диффузии будет отличаться: за фронтом среда в несколько раз плотнее, и можно считать, что λ во столько же раз меньше. Кроме того, частицы рассеиваются изотропно в локальной системе покоя плазмы. Таким образом, в лабораторной системе отсчета скорость частицы будет меняться при каждом рассеянии.
Обычно в таких моделях вводят границу свободного ухода (free escape boundary, FEB), за которой частица покидает систему. Она имитирует конечный размер реальных объектов, в которых происходит ускорение космических лучей. В итоге распределение частиц по энергиям обретает степенной вид с максимальной энергией, зависящей от положения границы свободного ухода, а также от времени, прошедшего с момента начала моделирования. Ранее мы находили пространственное распределение диффундирующих частиц или изменение их энергии, считая коэффициент диффузии заданным. Однако в настоящее время коэффициент диффузии во многих астрофизических средах остается малоизученным. Более того, есть вероятность, что закон распространения частиц носит недиффузионный характер. Возможны режимы, когда x2 tα. При α < 1 режим называется субдиффузионным, а при α > 1 – супердиффузионным или сверхдиффузионным.
29
Закон распространения частиц в турбулентных полях также может быть определен методом Монте-Карло [7, 11]. При этом траектории уже не являются случайными: частицы перемещаются в электромагнитных полях одним из методов, приведенных в первой части пособия. Значения магнитного поля в каждой точке пространства вычисляются по формуле B = B0 + δB, где
B0 – регулярная составляющая; δB – турбулентная. Турбулентная составляющая может быть представлена в виде суммы Nm альвеновских волн:
|
|
|
|
Nm |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
δB(x, y, z) = |
A(kn)ξˆn exp(iknzn′ + iβn); |
|
|
|
(2.5) |
|||||
|
|
|
|
n=1 |
|
|
|
|
|
|
ξˆn = cos αnxˆn′ |
+ i sin αnyˆn′ |
; |
− |
0 |
y |
|
(2.6) |
|||
yn′ |
|
= |
|
sin φn |
cos φn |
(2.7) |
||||
xn′ |
|
|
cos θn cos φn |
cos θn sin φn |
|
sin θn |
x |
|
||
zn′ |
|
sin−θn cos φn |
sin θn sin φn |
cos θn |
z |
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
где n – номер гармоники; kn – волновое число; βn – фаза; A(kn) – амплитуда; z′ – направление волнового вектора (связанная с ним система координат x′,
′ ′ ˆ
y , z получается при повороте на углы θn и φn); ξn – поляризация (αn –
угол поляризации). Направления, поляризации и фазы гармоник задаются случайно, а амплитуды определяются спектром турбулентности. Например, для Колмогоровского спектра A2(kn) kn−5/3. При генерации случайных углов θn и φn действует то же правило, что и при рассеянии частиц: в случае изотропной турбулентности равнораспределен не угол θn, а его косинус.
Cчитается, что поля со временем не меняются. Это приближение хо-
√
рошо работает для быстрых частиц с v va, где va = B/ 4πρ – альвеновская скорость. При вычислении сил, действующих на такие частицы, можно пренебречь электрическим полем, так как оно по порядку величины равно vaB/c, а следовательно, магнитная и электрическая сила относятся как v/va.
Рассмотрим два подхода к моделированию движения частиц в турбулентных полях. Можно использовать пространственную дискретизацию и перед началом моделирования задавать магнитное поле в каждой ячейке по формуле (2.5). При этом ставятся периодические граничные условия. При вычислении силы Лоренца интерполяция полей в точку нахождения части-
30
