---
title: "Энергия связи ядер"
topic: nuclear-binding
order: 1
description: "Энергия связи по таблице масс AME2020; кривая B/A и максимум у никеля-62; капельная модель и формула Вайцзеккера (вывод членов, подгонка коэффициентов, оболочечные остатки); долина стабильности; энерговыделение синтеза и деления; почему синтез в звёздах кончается на группе железа"
---
Ядерные энергии в миллион раз больше химических: на этом различии
держится вся звёздная эволюция. Звезда светит миллиарды лет, потому что
превращение водорода в гелий освобождает 0,7 % массы покоя, а не
$10^{-9}$, как горение. Кривая энергии связи на нуклон определяет,
какие реакции выгодны, где кончается синтез в звёздах и почему
элементы тяжелее железа требуют особых процессов. В этой теме кривая
строится по современной таблице масс, а её форма объясняется капельной
моделью.
## Энергия связи и таблица масс
::: {#def-binding}
**Энергия связи** ядра с $Z$ протонами и $N = A - Z$ нейтронами —
энергия, нужная, чтобы разделить его на свободные нуклоны:
$$
B(Z, N) = \left[Z m_{\rm H} + N m_n - M(Z, N)\right]c^2 ,
$$
где $M(Z, N)$ — масса *нейтрального атома*, $m_{\rm H}$ — масса атома
водорода. Электроны в правой части сокращаются; энергия связи
электронов (десятки кэВ для тяжёлых атомов) входит в $B$ как малая
поправка и обычно не отделяется. **Избыток массы** — $\Delta = (M - A\,m_u)c^2$,
где $m_u$ — атомная единица массы ($1/12$ массы атома $^{12}$C), так что
$B = Z\Delta_{\rm H} + N\Delta_n - \Delta(Z, N)$.
:::
Таблицы масс измеряются ловушками Пеннинга и накопительными кольцами с
относительной точностью до $10^{-10}$; мы используем оценку AME2020
(Ван и соавторы, 2021), извлечённую в файл `data/ame2020.csv` пакета
пособия. Проверим определение — пересчитаем $B/A$ из избытков масс:
```{python}
import math
import astropy.constants as const
import astropy.units as u
import matplotlib.pyplot as plt
import numpy as np
import sympy as sp
from cosmevo.nuclear import TERMS, fit_weizsacker, load_ame, weizsacker
ame = load_ame() # только измеренные значения, A > 1
Z, N, A, B = ame["Z"], ame["N"], ame["A"], ame["B"]
print(f"нуклидов с измеренной массой: {A.size}")
d_n, d_H = 8.07131806, 7.288971064 # МэВ: избытки масс нейтрона и ¹H (AME2020)
def nuclide(z, a):
"""Индекс нуклида (Z, A) в таблице."""
return np.flatnonzero((Z == z) & (A == a))[0]
for name, z, a in [("²H", 1, 2), ("⁴He", 2, 4), ("¹²C", 6, 12), ("⁵⁶Fe", 26, 56),
("⁶²Ni", 28, 62), ("²³⁸U", 92, 238)]:
i = nuclide(z, a)
B_from_excess = z * d_H + (a - z) * d_n - ame["mass_excess"][i]
print(f"{name:5s}: B/A = {ame['BA'][i]:.4f} МэВ (таблица), "
f"{B_from_excess / a:.4f} МэВ (из избытков масс)")
```
## Кривая энергии связи
```{python}
#| label: fig-binding
#| fig-cap: "Энергия связи на нуклон по AME2020: серые точки — все нуклиды с измеренной массой, чёрные — самый связанный нуклид каждой массы A. Синяя линия — формула Вайцзеккера с подобранными коэффициентами вдоль долины стабильности (A ≥ 20). Максимум — у ⁶²Ni; лёгкие ядра ⁴He, ¹²C, ¹⁶O лежат выше гладкой кривой."
# самый связанный нуклид каждой массы A
best = {}
for i in range(A.size):
if A[i] not in best or ame["BA"][i] > ame["BA"][best[A[i]]]:
best[A[i]] = i
idx_best = np.array([best[a] for a in sorted(best)])
coef = fit_weizsacker(Z, A, B, A_min=20)
A_line = np.arange(20, 271)
def z_valley(a, c=coef):
"""Z, минимизирующий массу атома при данном A (непрерывная переменная)."""
a_V, a_S, a_C, a_A, _ = c
dm = d_n - d_H # (m_n − m_H)c², МэВ
# ∂M/∂Z = −dm + a_C(2Z − 1)/A^{1/3} − 4a_A(A − 2Z)/A = 0
return (dm + a_C / a ** (1 / 3) + 4 * a_A) / (2 * a_C / a ** (1 / 3) + 8 * a_A / a)
fig, ax = plt.subplots(figsize=(7.5, 4.5))
ax.plot(A, ame["BA"], ".", ms=2, color="0.8", label="все измеренные нуклиды")
ax.plot(A[idx_best], ame["BA"][idx_best], ".", ms=3, color="k", label="самый связанный при данном A")
z_line = z_valley(A_line)
ax.plot(A_line, weizsacker(z_line, A_line, coef * [1, 1, 1, 1, 0]) / A_line,
color="tab:blue", lw=1.5, label="формула Вайцзеккера (без спаривания)")
for name, z, a, dx, dy in [("⁴He", 2, 4, -2, 0.3), ("¹²C", 6, 12, 6, -0.25), ("¹⁶O", 8, 16, -12, 0.2),
("⁵⁶Fe", 26, 56, -10, -0.5), ("⁶²Ni", 28, 62, 8, 0.15),
("²³⁸U", 92, 238, -10, -0.45)]:
i = nuclide(z, a)
ax.annotate(name, (a, ame["BA"][i]), (a + dx, ame["BA"][i] + dy), fontsize=9,
arrowprops=dict(arrowstyle="-", color="0.5", lw=0.6))
ax.set(xlabel="массовое число A", ylabel="B/A, МэВ", xlim=(0, 275), ylim=(5.5, 9.2))
ax.legend(loc="lower right", fontsize=8)
ax.grid(alpha=0.2)
fig.tight_layout()
i_max = np.argmax(ame["BA"])
print(f"максимум B/A: Z = {Z[i_max]}, A = {A[i_max]}, B/A = {ame['BA'][i_max]:.4f} МэВ")
for name, z, a in [("⁵⁸Fe", 26, 58), ("⁵⁶Fe", 26, 56), ("⁵⁶Ni", 28, 56)]:
print(f" {name}: B/A = {ame['BA'][nuclide(z, a)]:.4f} МэВ")
```
Кривая быстро растёт у лёгких ядер, достигает максимума около
$8{,}8$ МэВ в группе железа и медленно спадает к $7{,}6$ МэВ у урана
[У]{.status}. Максимум $B/A$ принадлежит $^{62}$Ni, за ним идут $^{58}$Fe и
$^{56}$Fe; часто пишут, что «самое связанное ядро — железо-56», имея в
виду другое: наименьшую *массу на нуклон* $M/A$ (у никеля-62 больше доля
протонов, а протон легче нейтрона на 1,29 МэВ — упражнение 4).
Два следствия формы кривой. Синтез лёгких ядер в более тяжёлые
освобождает энергию вплоть до группы железа; деление тяжёлых ядер — тоже
выгодно, но даёт меньше на нуклон. И лёгкие ядра $^4$He, $^{12}$C,
$^{16}$O связаны заметно сильнее соседей: это проявление альфа-частичной
и оболочечной структуры, важное для гелиевого горения (тема «Тройной
альфа-процесс и резонанс Хойла»).
## Капельная модель: формула Вайцзеккера
Ядерные силы короткодействующие и насыщаются: каждый нуклон
взаимодействует лишь с ближайшими соседями, плотность ядерного вещества
почти постоянна, $n_0 \approx 0{,}16$ фм⁻³, и радиус растёт как
$R = r_0A^{1/3}$, $r_0 \approx 1{,}2$ фм [У]{.status}. Отсюда пять членов
(Вайцзеккер, 1935; Бете и Бэчер, 1936):
$$
B = a_V A - a_S A^{2/3} - a_C\frac{Z(Z-1)}{A^{1/3}}
- a_A\frac{(N - Z)^2}{A} + a_P\frac{\delta}{A^{1/2}},
$$
$\delta = +1$ для чётно-чётных ядер, $-1$ для нечётно-нечётных, $0$ при
нечётном $A$.
- **Объём**: энергия, пропорциональная числу нуклонов, — следствие
насыщения.
- **Поверхность**: нуклонам на поверхности не хватает соседей; поправка
пропорциональна площади $4\pi R^2 \propto A^{2/3}$.
- **Кулон**: энергия однородно заряженного шара
$\frac35 Z(Z-1)e^2/R$ (множитель $Z(Z-1)$ исключает самодействие
протона), т. е. $a_C = 3e^2/(5r_0)$.
- **Асимметрия**: принцип Паули. Разберём её кинетическую часть явно.
- **Спаривание**: нуклоны одного сорта связываются в пары с нулевым
моментом; эмпирическая зависимость $A^{-1/2}$.
**Кинетическая часть энергии асимметрии.** Протоны и нейтроны — два
вырожденных ферми-газа в объёме $V$. Кинетическая энергия газа из $N$
частиц со спином 1/2 равна $\frac35 N\varepsilon_F(N/V)$,
$\varepsilon_F \propto (N/V)^{2/3}$. Разложим полную энергию по $N - Z$
при фиксированном $A$:
```{python}
A_s, D, eF, V = sp.symbols("A D epsilon_F V", positive=True) # D = N − Z
n_sym = sp.Symbol("n", positive=True)
def fermi_energy_total(n_part, total):
"""Кинетическая энергия ферми-газа n_part частиц, нормированная так, что
при n_part = total/2 её ε_F равна eF (симметричное вещество)."""
return sp.Rational(3, 5) * n_part * eF * (2 * n_part / total) ** sp.Rational(2, 3)
E_kin = fermi_energy_total((A_s + D) / 2, A_s) + fermi_energy_total((A_s - D) / 2, A_s)
series = sp.series(E_kin, D, 0, 4).removeO()
print("E_kin(N − Z) ≈", sp.simplify(series))
hbar_c = (const.hbar * const.c).to(u.MeV * u.fm).value # МэВ·фм
m_N = ((const.m_p + const.m_n) / 2 * const.c**2).to(u.MeV).value
n0 = 0.16 # фм⁻³
k_F = (3 * math.pi**2 * n0 / 2) ** (1 / 3) # на один сорт: n0/2
eps_F = (hbar_c * k_F) ** 2 / (2 * m_N)
print(f"k_F = {k_F:.3f} фм⁻¹, ε_F = {eps_F:.1f} МэВ, a_A(кин) = ε_F/3 = {eps_F / 3:.1f} МэВ")
```
$$
E_{\rm kin} = \frac35\varepsilon_F A + \frac{\varepsilon_F}{3}\,\frac{(N - Z)^2}{A}
+ O\!\left(\frac{(N-Z)^4}{A^3}\right),
$$
так что кинетический вклад $a_A^{\rm кин} = \varepsilon_F/3 \approx 12$ МэВ.
Подгонка (ниже) даёт примерно вдвое больше: остальное — зависимость
ядерного *взаимодействия* от изоспина (протон-нейтронное притяжение
сильнее), которую ферми-газ не учитывает.
**Подгонка коэффициентов.** Формула линейна по коэффициентам, поэтому
наименьшие квадраты решаются одной линейной алгеброй (функция
`fit_weizsacker` пакета). Лёгкие ядра ($A < 20$) исключим: для них
капельная картина плоха.
```{python}
sel = A >= 20
resid = B - weizsacker(Z, A, coef)
for name, c in zip(TERMS, coef):
print(f"a ({name:11s}) = {c:6.2f} МэВ")
rms = np.sqrt(np.mean(resid[sel] ** 2))
print(f"ядер в подгонке: {sel.sum()}, среднеквадратичное отклонение B: {rms:.2f} МэВ")
r0 = 3 / 5 * (const.alpha.value * hbar_c) / coef[2] # e² = α ħc
print(f"r₀ из кулоновского члена: {r0:.2f} фм")
```
Пять параметров описывают энергии связи почти 2500 ядер со
среднеквадратичным отклонением около 3 МэВ при полных $B$ от 90 до
1960 МэВ; медианное относительное отклонение — 0,2 % [У]{.status}.
Кулоновский коэффициент даёт $r_0 = 1{,}24$ фм, согласующийся с
радиусами из рассеяния электронов. Остатки не случайны:
```{python}
#| label: fig-shells
#| fig-cap: "Отклонение измеренной энергии связи от формулы Вайцзеккера (A ≥ 20) как функция числа нейтронов N. Вертикальные линии — магические числа 28, 50, 82, 126: ядра с заполненными оболочками связаны сильнее капельной модели, сильнее всего — дважды магическое ¹³²Sn (Z = 50, N = 82). За верхним краем рисунка — четыре лёгких нейтронно-избыточных ядра с A = 20–23 (остатки до 27 МэВ), для которых капельная модель плоха."
fig, ax = plt.subplots(figsize=(7.5, 3.6))
ax.plot(N[sel], resid[sel], ".", ms=2, color="tab:blue")
for magic in (28, 50, 82, 126):
ax.axvline(magic, color="tab:red", lw=0.8, alpha=0.7)
ax.text(magic + 1, 13, str(magic), color="tab:red", fontsize=8)
ax.axhline(0, color="k", lw=0.6)
ax.set(xlabel="число нейтронов N", ylabel=r"$B_{\rm изм} - B_{\rm Вайцз}$, МэВ", ylim=(-11, 15))
ax.grid(alpha=0.2)
fig.tight_layout()
for magic in (50, 82, 126):
near = sel & (N == magic)
print(f"N = {magic}: средний остаток {resid[near].mean():+.1f} МэВ; "
f"N = {magic - 6}: {resid[sel & (N == magic - 6)].mean():+.1f} МэВ")
i_sn = nuclide(50, 132)
outside = sel & (resid > 15)
print(f"¹³²Sn: остаток {resid[i_sn]:+.1f} МэВ; ядер за пределами рисунка: {outside.sum()} "
f"(A = {A[outside].min()}–{A[outside].max()}), максимум {resid[sel].max():.0f} МэВ")
```
Пики остатков у магических чисел — оболочечная структура, которой в
капельной модели нет [У]{.status}; оболочечная поправка (Струтинский, 1967)
и микроскопические модели снижают отклонение до долей МэВ, но для
ядер вдали от долины стабильности их предсказания расходятся, и это
важно для r-процесса (тема «Элементы тяжелее железа»).
## Долина стабильности
При данном $A$ устойчив (относительно β-распада) изобар с наименьшей
массой атома $M = Zm_{\rm H} + (A - Z)m_n - B$. Условие $\partial M/\partial Z = 0$
с формулой Вайцзеккера (без спаривания) даёт явную зависимость:
```{python}
Zs, As, aC, aA, dm = sp.symbols("Z A a_C a_A Delta_m", positive=True)
B_drop = -aC * Zs * (Zs - 1) / As ** sp.Rational(1, 3) - aA * (As - 2 * Zs) ** 2 / As
M_atom = -dm * Zs - B_drop # Z m_H + (A−Z) m_n = A m_n − Z Δm
Z_opt = sp.solve(sp.diff(M_atom, Zs), Zs)[0]
print("Z_opt =", sp.simplify(Z_opt))
z_check = float(Z_opt.subs({aC: coef[2], aA: coef[3], dm: d_n - d_H, As: 56}))
print(f"проверка функции z_valley: {z_check:.4f} = {z_valley(56):.4f}")
for a in (16, 56, 120, 208, 238):
print(f"A = {a:3d}: Z_opt = {z_valley(a):5.1f}; самый связанный изобар в таблице — Z = {Z[best[a]]}")
```
При малых $A$ $Z_{\rm opt} \approx A/2$, а с ростом $A$ кулоновское
отталкивание сдвигает долину к избытку нейтронов: у свинца-208
$N/Z = 1{,}54$. Обратите внимание, что «самый связанный» и «самый
лёгкий» изобар — не одно и то же: разница масс нейтрона и атома водорода
сдвигает минимум массы к большему $Z$.
## Энергетика: синтез, деление, химия
```{python}
def Q(initial, final):
"""Энерговыделение реакции по избыткам масс (МэВ): Σ Δ_нач − Σ Δ_кон."""
excess = lambda zA: d_n if zA == (0, 1) else (d_H if zA == (1, 1) else ame["mass_excess"][nuclide(*zA)])
return sum(excess(x) for x in initial) - sum(excess(x) for x in final)
m_u = (const.u * const.c**2).to(u.MeV).value
Q_pp = Q([(1, 1)] * 4, [(2, 4)]) # 4 ¹H → ⁴He (атомные массы: включая аннигиляцию e⁺)
Q_3a = Q([(2, 4)] * 3, [(6, 12)])
frac_H = Q_pp / (4 * (m_u + d_H))
i_fe = nuclide(26, 56)
frac_Fe = Q([(1, 1)] * 56, [(26, 56)]) / (56 * (m_u + d_H))
print(f"4 ¹H → ⁴He: Q = {Q_pp:.3f} МэВ, доля массы покоя {100 * frac_H:.3f} %")
print(f"3 ⁴He → ¹²C: Q = {Q_3a:.3f} МэВ")
print(f"56 ¹H → ⁵⁶Fe: доля массы покоя {100 * frac_Fe:.3f} %")
Q_fis = Q([(92, 238)], [(46, 119)] * 2)
print(f"²³⁸U → 2 ¹¹⁹Pd (симметричное деление): Q = {Q_fis:.0f} МэВ, {Q_fis / 238:.2f} МэВ на нуклон")
# химия: образование жидкой воды, ΔH = −285,8 кДж/моль, на 18 нуклонов
e_chem = (285.8 * u.kJ / u.mol / const.N_A).to(u.eV).value
print(f"H₂ + ½O₂ → H₂O: {e_chem:.2f} эВ на молекулу, {e_chem / 18:.3f} эВ на нуклон; "
f"отношение к синтезу гелия: {Q_pp / 4 * 1e6 / (e_chem / 18):.1e}")
```
Превращение водорода в гелий освобождает 26,73 МэВ, т. е. 0,71 % массы
покоя (часть уносят нейтрино: от 2 % до почти 30 % в зависимости от ветви цепочки;
тема «Скорости термоядерных реакций»). Полный путь от водорода до
железа даёт лишь 0,89 %: почти всё энерговыделение синтеза
приходится на первый шаг [У]{.status}. Поэтому главная
последовательность — самая долгая стадия жизни звезды. Оценка времени
жизни Солнца, если в реакцию вступит около 10 % его массы:
```{python}
t_sun = (0.1 * frac_H * const.M_sun * const.c**2 / const.L_sun).to(u.Gyr)
print(f"t ≈ 0,1 · 0,0071 · M☉c²/L☉ = {t_sun.value:.1f} млрд лет")
```
— около 10 млрд лет, в согласии с теорией звёздной эволюции (тема
«Будущее Солнца и Земли»).
**Почему синтез кончается на железе.** За максимумом $B/A$ присоединение
нуклонов или альфа-частиц уже не освобождает энергию: при горении
кремния вещество приходит к ядерному статистическому равновесию, в
котором при равном числе протонов и нейтронов преобладает $^{56}$Ni; он
затем распадается через $^{56}$Co в $^{56}$Fe [У]{.status} (темы «Ядерное
статистическое равновесие» и «Массивные звёзды и сверхновые с коллапсом
ядра»). Более тяжёлые элементы создаются захватом нейтронов, у которых
нет кулоновского барьера, — за счёт энергии, накопленной раньше (тема
«Элементы тяжелее железа»).
**Ядерный масштаб энергии.** Почему МэВ? Нуклон, локализованный в
области размером $r_0$, имеет кинетическую энергию порядка
$\hbar^2/(2m_Nr_0^2)$:
```{python}
e_nuc = hbar_c**2 / (2 * m_N * 1.2**2)
print(f"ħ²/(2 m_N r₀²) при r₀ = 1,2 фм: {e_nuc:.1f} МэВ")
```
Точнее, средняя кинетическая энергия нуклона в ферми-газе —
$\frac35\varepsilon_F \approx 22$ МэВ, и энергия связи на нуклон
(8 МэВ) — малая разность больших кинетической и потенциальной энергий.
Та же оценка для электрона в атоме, $\hbar^2/(2m_ea_B^2)$, даёт ридберг
(тема «Оценки по порядку величины»); отношение масштабов
$(m_N/m_e)^{-1}(a_B/r_0)^2 \approx 10^6$. На нуклон химические реакции
дают ещё меньше — около 0,2 эВ против 6,7 МэВ при синтезе гелия.
```{python}
ratio_scales = (const.m_e / const.m_p).value * (const.a0.to(u.fm).value / 1.2) ** 2
print(f"(m_e/m_N)(a_B/r₀)² = {ratio_scales:.2e}; 3ε_F/5 = {0.6 * eps_F:.0f} МэВ")
```
## Физика и наблюдательный статус
- Массы ядер вблизи долины стабильности измерены с точностью лучше
кэВ [У]{.status}; кривая $B/A$ и положение максимума — прямые данные.
- Формула Вайцзеккера — полуэмпирическое описание с медианной
точностью 0,2 % для $A \ge 20$ [У]{.status}; коэффициенты зависят от выборки
и формы членов и физического смысла с точностью лучше 10 % не имеют.
- Массы ядер далеко от долины (нейтронно-избыточных, нужных для
r-процесса) и положение границ нейтронной стабильности для тяжёлых
элементов предсказываются разными моделями по-разному [Г]{.status}.
## Итоги
- $B = [Zm_{\rm H} + Nm_n - M]c^2 = Z\Delta_{\rm H} + N\Delta_n - \Delta$;
максимум $B/A = 8{,}7946$ МэВ у $^{62}$Ni, минимум $M/A$ — у $^{56}$Fe.
- Капельная модель: $a_V \approx 15{,}5$, $a_S \approx 17$,
$a_C \approx 0{,}70$, $a_A \approx 23$, $a_P \approx 12$ МэВ (подгонка
по AME2020, $A \ge 20$); отклонение около 3 МэВ, остатки — оболочки.
- Кинетическая часть энергии асимметрии $\varepsilon_F/3 \approx 12$ МэВ.
- $4\,^1$H → $^4$He: 26,73 МэВ, 0,71 % массы покоя; весь путь до
железа — 0,89 %; деление урана — около 0,8 МэВ на нуклон; химия — в
$4\cdot10^7$ раз меньше синтеза (на нуклон).
## Упражнения
1. Найдите по таблице энерговыделение реакций $^{12}{\rm C} + {}^4{\rm He}
\to {}^{16}{\rm O}$ и $^{16}{\rm O} + {}^4{\rm He} \to {}^{20}{\rm Ne}$.
2. Выведите из кулоновской энергии однородно заряженного шара
$\frac35 Q^2/R$ коэффициент $a_C$ и найдите $r_0$ при $a_C = 0{,}70$ МэВ.
3. При каком $A$ формула Вайцзеккера (без спаривания, вдоль долины
стабильности) даёт максимум $B/A$? Почему он смещён относительно
измеренного?
4. Покажите, что минимум $M/A$ (массы атома на нуклон) приходится на
$^{56}$Fe, а не на $^{62}$Ni. Какая разность масс за это отвечает?
5. Сколько энергии освобождает 1 г водорода при превращении в гелий и
1 г урана-238 при симметричном делении? Во сколько раз это больше
теплоты образования воды из 1 г смеси водорода и кислорода?
::: {.callout-tip collapse="true"}
## Ответы
1. $Q = 7{,}162$ МэВ и $4{,}730$ МэВ.
2. $a_C = 3e^2/(5r_0)$; $r_0 = 3\alpha\hbar c/(5a_C) = 1{,}23$ фм.
3. Максимум гладкой кривой — при $A \approx 60$ (компромисс поверхностного и
кулоновского членов: $a_S A^{-1/3}$ убывает, а $a_C Z^2 A^{-4/3}$ растёт).
Измеренный максимум ($A = 62$) определяется ещё и оболочками:
$Z = 28$ — магическое число.
4. $M/A$ (в единицах избытка массы на нуклон) минимальна у $^{56}$Fe:
$-1{,}0823$ МэВ против $-1{,}0766$ у $^{62}$Ni. У никеля-62 большая
энергия связи на нуклон, но и больше нейтронов на нуклон ($N/A =
0{,}548$ против $0{,}536$), а атом водорода легче нейтрона на
$0{,}782$ МэВ.
5. Синтез: $6{,}4\cdot10^{18}$ эрг/г; деление: $7{,}7\cdot10^{17}$ эрг/г
(в 8,3 раза меньше); образование воды: $1{,}6\cdot10^{11}$ эрг/г,
в $4\cdot10^{7}$ раз меньше синтеза.
:::
## Литература
- Wang M., Huang W. J., Kondev F. G., Audi G., Naimi S. The AME 2020
atomic mass evaluation (II). Tables, graphs and references. *Chinese
Phys. C* **45**, 030003 (2021).
- Weizsäcker C. F. v. Zur Theorie der Kernmassen. *Z. Phys.* **96**, 431
(1935).
- Bethe H. A., Bacher R. F. Nuclear physics A. Stationary states of
nuclei. *Rev. Mod. Phys.* **8**, 82 (1936).
- Бор О., Моттельсон Б. *Структура атомного ядра.* Т. 1. — М.: Мир, 1971.
- Strutinsky V. M. Shell effects in nuclear masses and deformation
energies. *Nucl. Phys. A* **95**, 420 (1967).
- Clayton D. D. *Principles of Stellar Evolution and Nucleosynthesis.* —
New York: McGraw-Hill, 1968 (переиздание: University of Chicago Press,
1983). Гл. 2.
```{python}
#| echo: false
#| output: false
# Проверка чисел и ответов (не показывается на странице)
for z, a in [(1, 2), (2, 4), (6, 12), (26, 56), (28, 62), (92, 238)]:
i = nuclide(z, a)
assert abs((z * d_H + (a - z) * d_n - ame["mass_excess"][i]) / a - ame["BA"][i]) < 2e-5
assert (Z[i_max], A[i_max]) == (28, 62) and round(ame["BA"][i_max], 4) == 8.7946
assert ame["BA"][nuclide(26, 58)] > ame["BA"][nuclide(26, 56)]
# асимметрия ферми-газа
assert sp.simplify(series - (sp.Rational(3, 5) * eF * A_s + eF / 3 * D**2 / A_s)) == 0
assert round(eps_F / 3) == 12
# подгонка
assert round(coef[0], 1) == 15.5 and round(coef[1]) == 17 and round(coef[2], 2) == 0.70
assert round(coef[3]) == 23 and round(coef[4]) == 12
assert round(sel.sum(), -2) == 2500 and round(rms) == 3 and round(r0, 2) == 1.24
assert round(100 * np.median(np.abs(resid[sel]) / B[sel]), 1) == 0.2
assert round(B[sel].min(), -1) == 90 and round(B[sel].max(), -1) == 1960
assert np.argmax(resid[sel & (A > 40)]) == np.flatnonzero((Z[sel & (A > 40)] == 50) & (A[sel & (A > 40)] == 132))[0]
assert round(resid[sel].max()) == 27 and outside.sum() == 4 and A[outside].min() == 20 and A[outside].max() == 23
assert round(math.log10(ratio_scales)) == 6 and round(0.6 * eps_F) == 22
assert round(0.165, 1) == 0.2 and round(Q_pp / 4, 1) == 6.7 and round(e_chem / 18, 3) == 0.165
# долина
assert abs(z_check - z_valley(56)) < 1e-9
i_pb = nuclide(82, 208)
assert round(N[i_pb] / Z[i_pb], 2) == 1.54
# энергетика
assert round(Q_pp, 2) == 26.73 and round(100 * frac_H, 2) == 0.71 and round(100 * frac_Fe, 2) == 0.89
assert round(Q_fis / 238, 1) == 0.8
assert round(Q_pp / 4 * 1e6 / (e_chem / 18) / 1e7) == 4
assert round(t_sun.value, 1) == 10.5
# 1
Q_CO, Q_ONe = Q([(6, 12), (2, 4)], [(8, 16)]), Q([(8, 16), (2, 4)], [(10, 20)])
assert round(Q_CO, 3) == 7.162 and round(Q_ONe, 3) == 4.730
# 2
assert round(3 * const.alpha.value * hbar_c / (5 * 0.70), 2) == 1.23
# 3
BA_line = weizsacker(z_valley(A_line), A_line, coef * [1, 1, 1, 1, 0]) / A_line
assert A_line[np.argmax(BA_line)] == 60
# 4
per_nucleon = ame["mass_excess"] / A
i_min = np.argmin(per_nucleon)
assert (Z[i_min], A[i_min]) == (26, 56)
assert round(per_nucleon[i_min], 4) == -1.0823 and round(per_nucleon[nuclide(28, 62)], 4) == -1.0766
assert round(34 / 62, 3) == 0.548 and round(30 / 56, 3) == 0.536 and round(d_n - d_H, 3) == 0.782
# 5
erg_per_g = lambda Q_MeV, mass_u: (Q_MeV * u.MeV / (mass_u * const.u)).to(u.erg / u.g).value
e_fus, e_fis = erg_per_g(Q_pp, 4 * 1.00783), erg_per_g(Q_fis, 238.05)
e_water = (285.8 * u.kJ / u.mol / (18.015 * u.g / u.mol)).to(u.erg / u.g).value
assert round(e_fus / 1e18, 1) == 6.4 and round(e_fis / 1e17, 1) == 7.7 and round(e_fus / e_fis, 1) == 8.3
assert round(e_water / 1e11, 1) == 1.6 and round(e_fus / e_water / 1e7) == 4
```