Электромагнетизм: поле зарядов и сила Лоренца
Поле зарядов и движение частицы в магнитном поле: вычислительный электромагнетизм.
Сила Лоренца
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-дрейф даёт циклоиду — основа физики плазмы.