Электромагнетизм: поле зарядов и сила Лоренца

Поле зарядов и движение частицы в магнитном поле: вычислительный электромагнетизм.

Сила Лоренца F = q·(E + v×B) описывает действие электрического и магнитного полей на заряд; магнитная часть не совершает работы и закручивает частицу по окружности.

Поле системы зарядов

Электрическое поле в точке — векторная сумма вкладов всех зарядов по закону Кулона: E = k·q·r⃗/|r|³. Сложив вклады, можно нарисовать карту поля и силовые линии. Построим поле диполя (плюс и минус рядом) и покажем, где поле сильнее, плотностью символов:

import math
charges = [(+1.0, -1.5, 0.0), (-1.0, +1.5, 0.0)]
def field(x, y):
    Ex = Ey = 0.0
    for q, cx, cy in charges:
        dx, dy = x-cx, y-cy
        r2 = dx*dx + dy*dy + 0.05
        r = math.sqrt(r2)
        Ex += q*dx/r2/r; Ey += q*dy/r2/r
    return Ex, Ey
print("Сила поля диполя (+ слева, - справа):")
chars = " .:-=+*#"
for j in range(4, -5, -1):
    y = j/2.0
    row = ""
    for i in range(-10, 11):
        x = i/2.0
        mag = math.hypot(*field(x, y))
        row += chars[max(0, min(7, int(mag*2)))]
    print(row)
Ex0, Ey0 = field(0, 0)
print(f"В центре (0,0): E=({Ex0:+.3f}, {Ey0:+.3f}) — от + к -.")

Вывод:

Сила поля диполя (+ слева, - справа):
                     
                     
      .........      
     .-*-...-*-.     
     .+ *:.:* +.     
     .-*-...-*-.     
      .........      
                     
                     
В центре (0,0): E=(+0.860, +0.000) — от + к -.

Два «горячих» пятна — места зарядов, где поле сильнее всего. В центре между ними поле направлено от плюса к минусу (положительное Ex), как и должно быть. Так визуализируют электростатику: вектор поля в каждой точке плюс силовые линии, идущие от плюса к минусу.

Заряд в магнитном поле: сила Лоренца

Магнитное поле действует на движущийся заряд силой F = q·v×B, перпендикулярной скорости. Перпендикулярная сила не меняет модуль скорости (не совершает работы), а лишь поворачивает её — поэтому заряд движется по окружности. Это принцип циклотрона. Важная тонкость: обычный Эйлер здесь искусственно разгоняет частицу. Поэтому используют метод Бориса, который точно сохраняет модуль скорости:

import math
q, m, B = 1.0, 1.0, 1.0
x, y = 0.0, 0.0
vx, vy = 1.0, 0.0
dt = 0.01
v0 = math.hypot(vx, vy)
r = m*v0/(q*B); T = 2*math.pi*m/(q*B)
print(f"Аналитика: радиус r=mv/qB = {r:.3f}, период T=2πm/qB = {T:.3f}")
t = q*B/m * dt/2
s = 2*t/(1+t*t)
for step in range(int(round(T/dt))):
    vxp = vx + vy*t
    vyp = vy - vx*t
    vx = vx + vyp*s
    vy = vy - vxp*s
    x += vx*dt; y += vy*dt
print(f"После периода: позиция ({x:+.3f},{y:+.3f}), старт (0,0).")
print(f"|скорость| = {math.hypot(vx,vy):.4f} (была {v0:.4f})")

Вывод:

Аналитика: радиус r=mv/qB = 1.000, период T=2πm/qB = 6.283
После периода: позиция (-0.003,+0.000), старт (0,0).
|скорость| = 1.0000 (была 1.0000)

За один период заряд вернулся в исходную точку, описав окружность радиуса r=mv/qB, и модуль скорости сохранился точно (1.0000). Если добавить ещё и электрическое поле перпендикулярно магнитному, траектория станет циклоидой — заряд будет дрейфовать вбок, описывая петли. Это знаменитый E×B-дрейф, важный в физике плазмы и магнитных ловушках.

Как работает под капотом

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

Частые ошибки

  • Использовать Эйлер для заряда в магнитном поле. Он систематически увеличивает скорость — частица «разгоняется» из ниоткуда.
  • Забыть смягчение в поле зарядов. При r→0 кулоновское поле взрывается; малое слагаемое в знаменателе спасает.
  • Путать направление силы Лоренца. Магнитная сила перпендикулярна и скорости, и полю; знак задаёт векторное произведение.

Итоги

  • Электрическое поле системы зарядов — векторная сумма по закону Кулона.
  • Магнитная сила Лоренца перпендикулярна скорости и закручивает заряд.
  • Метод Бориса точно сохраняет модуль скорости заряда.
  • E×B-дрейф даёт циклоиду — основа физики плазмы.
Проверьте себя
1. Почему магнитная сила Лоренца не меняет модуль скорости заряда?
AОна слишком мала
BОна перпендикулярна скорости и не совершает работы — лишь поворачивает её
CОна направлена против движения
DИз-за трения
2. Почему для заряда в магнитном поле используют метод Бориса, а не Эйлер?
AБорис быстрее
BЭйлер искусственно разгоняет частицу, а Борис точно сохраняет модуль скорости
CЭйлер не умеет считать векторы
DБорис проще в коде
3. Какую траекторию описывает заряд в скрещённых электрическом и магнитном полях?
AПрямую
BЦиклоиду (с дрейфом E×B)
CПараболу
DЭллипс