Документация Engee
Notebook

Релятивистское сложение скоростей на Julia

В специальной теории относительности сложение скоростей нелинейно и описывается формулой:

$$u \oplus v = \frac{u + v}{1 + \frac{u \cdot v}{c^2}}​ $$

Можно представить скорости в виде кватернионов и реализовать это сложение в Julia.

В отличие от обычных векторных операций, кватернионный формализм:

  1. Автоматически учитывает релятивистские эффекты — нелинейность сложения скоростей emerges естественным образом из алгебраических свойств кватернионов, исключая возможность "механического" сложения, запрещенного специальной теорией относительности.

  2. Обеспечивает геометрическую целостность — операции с кватернионами сохраняют инвариантность относительно поворотов системы отсчета, что критически важно для задач астрофизики и квантовой механики.

  3. Упрощает вычисления — одна кватернионная операция заменяет серию матричных преобразований Лоренца, сокращая объем вычислений в сложных системах (например, при моделировании движения релятивистских частиц в ускорителях).

Библиотека Quaternions.jl

Сложение релятивистских скоростей при помощи кватернионов можно выполнить при помощи специализированной библиотеки для работы с этими объектами.

In [ ]:
Pkg.add("Quaternions")

Рассмотрим умозрительную задачу, где вы движетесь относительно наблюдателя со скоростью 60% от скорости света и производите выстрел вдоль оси движения, причем снаряд или пуля перемещаются относительно вас со скоростью 40% от скорости света.

Мы знаем, что скорость снаряда относительно первоначального наблюдателя не может превышать скорость света, но приблизится к ней.

In [ ]:
using Quaternions

# Скорости представим как кватернионы (скалярная часть = 0)
function relativistic_velocity_addition(u, v, c=1.0)
    uv = -((u * v).s)  # кватернионное произведение
    γ = 1 / (1 + uv / c^2)  # релятивистский фактор
    return γ * (u + v)
end

# Пример: две скорости вдоль оси X
u = quat(0, 0.6, 0, 0)  # 0.6c
v = quat(0, 0.4, 0, 0)  # 0.4c

u_plus_v = relativistic_velocity_addition(u, v)
println("Результирующая скорость: ", [u_plus_v.v1, u_plus_v.v2, u_plus_v.v3] )
Результирующая скорость: [0.8064516129032259, 0.0, 0.0]

Результат ≈0.806c — это корректная релятивистская сумма для 0.6c + 0.4c.

Визуализация релятивистского сложения скоростей

В завершение этого примера создадим интерактивную диаграмму, которой можно будет управлять при помощи удобных слайдеров. Ради скорости используем бэкэнд gr().

In [ ]:
gr()
Out[0]:
Plots.GRBackend()
In [ ]:
# Функции для работы с кватернионами
scalar_part(q) = q.s
vector_part(q) = [q.v1, q.v2, q.v3]

# Релятивистское сложение скоростей
function relativistic_velocity_addition(u, v, c=1.0)
    uv = -((u * v).s)  # кватернионное произведение
    γ = 1 / (1 + uv / c^2)  # релятивистский фактор
    return γ * (u + v)
end

# Слайдеры для управления скоростями
# @markdown Скорости обоих тел (в долях от c)
blue_slider = 0.62 # @param {type:"slider",min:0,max:0.99,step:0.01}
red_slider = 0.85 # @param {type:"slider",min:0,max:0.99,step:0.01}

# Создаем фигуру
u = quat(0, blue_slider[], 0, 0)
v = quat(0, red_slider[], 0, 0)
result = relativistic_velocity_addition(u, v)

# Создаем 3D-график
Plots.plot(title="Релятивистское сложение скоростей",
     xlims=(-0.1, 1.1), ylims=(-0.3, 0.3), zlims=(-0.3, 0.3),
     xlabel="X", ylabel="Y", zlabel="Z",
     legend=:topleft)

# Рисуем векторы
Plots.plot!( [0,0], [0,0], [-0.22,0.22], c=:red, label=false )
Plots.plot!( [1,1], [0,0], [-0.22,0.22], c=:red, label=false )

Plots.plot!([0,vector_part(u)[1]], [0,vector_part(u)[2]], [0.2,0.2+vector_part(u)[3]],
        color=:blue, label="u = 0.6c", lw=8)
Plots.plot!([0,vector_part(v)[1]], [0,vector_part(v)[2]], [0,vector_part(v)[3]], color=:red, label="v = 0.4c", lw=8)
Plots.plot!([0,vector_part(result)[1]], [0,vector_part(result)[2]], [-0.2,-0.2+vector_part(result)[3]],
        color=:green, label="u⊕v = $(round(vector_part(result)[1], digits=2))c", lw=8)

# Настройка отображения
Plots.plot!(camera=(30, 30))  # Угол обзора
Out[0]:

Заключение

Использование кватернионов для релятивистского сложения скоростей — это не просто математическая абстракция, а мощный инструмент, который сохраняет физическую суть явлений.

Особенно ценны кватернионы в задачах, где важна связь между ориентацией и движением — от навигации космических аппаратов до компьютерной томографии. Их применение гарантирует, что результаты расчетов будут не только математически корректны, но и физически осмысленны, что делает кватернионы незаменимым инструментом современной науки.