Расчет и 3D-визуализация электрического поля заряженных пластин на Python

Прокомментировать Просмотры: 8

Прямоугольная пластина

Поставим перед собой следующую задачу: пусть имеется бесконечно тонкая металлическая пластина прямоугольной формы со сторонами $2a$ и $2b$, которая обладает равномерным распределением заряда (толщиной пластины можно пренебречь). Зададим поверхностную плотность заряда как $\sigma > 0$. Требуется вычислить напряженность электрического поля $E(x_0,y_0,z_0)$, создаваемого этим проводником в произвольной точке трехмерного евклидова пространства. Дополнительно исследуем конфигурацию поля для пластины эллиптической конфигурации.

Решение: Зафиксируем начало координат $O$ в правосторонней декартовой системе $XYZ$ строго по центру пластины так, чтобы ее плоскость совпадала с координатной плоскостью $XOY$. Приведем принципиальную схему:

Закон Кулона
Закон Кулона
Начало решения
Начало решения
Конец решения
Конец решения

Для наглядной демонстрации полученных выкладок напишем скрипт на языке Python:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

Физические константы

eps0 = 8.85e-12 # электрическая постоянная sigma = 1.0 # поверхностная плотность заряда a = 2.0 # половина размера пластины по x b = 3.0 # половина размера пластины по y

Создаем сетку для визуализации

x = np.linspace(-2, 2, 20) y = np.linspace(-2, 2, 20) z = np.linspace(-2, 2, 20) X, Y, Z = np.meshgrid(x, y, z)

Функция для расчета электрического поля

def electric_field(x0, y0, z0):

Интегрирование по пластине

Ex = 0
Ey = 0
Ez = 0

for dx in np.linspace(-a, a, 20):
    for dy in np.linspace(-b, b, 20):
        r = np.array([x0-dx, y0-dy, z0])
        r_mag = np.linalg.norm(r)

        Ex += (x0-dx) / r_mag**3
        Ey += (y0-dy) / r_mag**3
        Ez += z0 / r_mag**3

Ex *= sigma / (4 * np.pi * eps0)
Ey *= sigma / (4 * np.pi * eps0)
Ez *= sigma / (4 * np.pi * eps0)

return Ex, Ey, Ez

Расчет поля в каждой точке сетки

Ex, Ey, Ez = np.zeros_like(X), np.zeros_like(Y), np.zeros_like(Z)

for i in range(X.shape[0]):
for j in range(X.shape[1]):
for k in range(X.shape[2]):
Ex[i,j,k], Ey[i,j,k], Ez[i,j,k] = electric_field(X[i,j,k], Y[i,j,k], Z[i,j,k])

Визуализация

fig = plt.figure(figsize=(12, 10))
ax = fig.add_subplot(111, projection='3d')

Нормализация векторов для лучшей визуализации

M = np.sqrt(Ex2 + Ey2 + Ez**2)
Ex = Ex/M
Ey = Ey/M
Ez = Ez/M

Построение векторов поля

ax.quiver(X, Y, Z, Ex, Ey, Ez, length=0.1, normalize=True, pivot="middle", cmap=cm.viridis)

Отображение пластины

ax.plot_surface(np.linspace(-a, a, 10), np.linspace(-b, b, 10), np.zeros((10,10)),
color="gray", alpha=0.5, zorder=10)

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Электрическое поле равномерно заряженной пластины')
plt.show()

Итоговый результат работы программы представлен ниже:

Электрическое поле прямоугольной пластины
Электрическое поле прямоугольной пластины

Если исследуемая пластина ограничена эллиптическим контуром с полуосями $2a$ и $2b$, рациональнее перейти к цилиндрической системе координат.

Пусть орт ортогонального базиса ориентирован в сторону проекции рассматриваемой точки на плоскость $XOY$, орт $j$ направлен по часовой стрелке перпендикулярно первому орту в плоскости $XOY$, а орт $k$ совпадает с положительным направлением вертикальной оси $OZ$. Такая система векторов также образует правую тройку. Сделаем схематические чертежи:

Эллиптическая пластина
Эллиптическая пластина
Интегрирование в цилиндрических координатах.
Интегрирование в цилиндрических координатах.
Для круглой пластины.
Для круглой пластины.

Составим программный код на Python для моделирования электростатического поля круглой равномерно заряженной пластины:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

Физические константы

eps0 = 8.85e-12 # электрическая постоянная sigma = 1.0 # поверхностная плотность заряда R = 1.0 # радиус пластины

Создаем сетку для визуализации

r = np.linspace(0, 2 R, 20) theta = np.linspace(0, 2 np.pi, 40) z = np.linspace(-2 R, 2 R, 20) R_grid, Theta_grid, Z_grid = np.meshgrid(r, theta, z) X = R_grid np.cos(Theta_grid) Y = R_grid np.sin(Theta_grid)

Функция для расчета электрического поля

def electric_field(x0, y0, z0): Ex = 0 Ey = 0 Ez = 0

# Интегрирование по круглой пластине
for rho in np.linspace(0, R, 20):
    for phi in np.linspace(0, 2 * np.pi, 20):
        x = rho * np.cos(phi)
        y = rho * np.sin(phi)

        # Вычисляем вектор от элемента к точке наблюдения
        dx = x0 - x
        dy = y0 - y
        dz = z0
        r_mag = np.sqrt(dx ** 2 + dy ** 2 + dz ** 2)

        # Добавляем вклад элементарного поля
        Ex += dx / r_mag ** 3
        Ey += dy / r_mag ** 3
        Ez += dz / r_mag ** 3

# Умножаем на константы
Ex *= sigma / (4 * np.pi * eps0)
Ey *= sigma / (4 * np.pi * eps0)
Ez *= sigma / (4 * np.pi * eps0)

return Ex, Ey, Ez

Расчет поля в каждой точке сетки

Ex = np.zeros_like(X)
Ey = np.zeros_like(Y)
Ez = np.zeros_like(Z_grid)

Оптимизируем циклы

for i in range(X.shape[0]):
for j in range(X.shape[1]):
for k in range(X.shape[2]):
if R_grid[i, j, k] <= R: # проверяем, что точка внутри пластины
Ex[i, j, k], Ey[i, j, k], Ez[i, j, k] = electric_field(X[i, j, k], Y[i, j, k], Z_grid[i, j, k])

Визуализация

fig = plt.figure(figsize=(12, 10))
ax = fig.add_subplot(111, projection='3d')

Нормализация векторов

M = np.sqrt(Ex 2 + Ey 2 + Ez ** 2)
Ex = Ex / M
Ey = Ey / M
Ez = Ez / M

Отсекаем нулевые значения для лучшей визуализации

mask = M > 1e-6

Построение векторов поля

ax.quiver(X[mask], Y[mask], Z_grid[mask], Ex[mask], Ey[mask], Ez[mask],
length=0.1, normalize=True, pivot="middle", cmap=cm.viridis)

Отображение пластины

theta_plate = np.linspace(0, 2 np.pi, 100)
r_plate = np.linspace(0, R, 100)
R_plate, Theta_plate = np.meshgrid(r_plate, theta_plate)
X_plate = R_plate
np.cos(Theta_plate)
Y_plate = R_plate * np.sin(Theta_plate)
ax.plot_surface(X_plate, Y_plate, np.zeros_like(X_plate),
color="gray", alpha=0.5, zorder=10)

Продолжаем визуализацию

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Электрическое поле круглой равномерно заряженной пластины')

Устанавливаем равные масштабы по осям

ax.set_box_aspect([1,1,1])

Добавляем сетку

ax.grid(True)

Настройка пределов отображения

ax.set_xlim([-2R, 2R])
ax.set_ylim([-2R, 2R])
ax.set_zlim([-2R, 2R])

Улучшаем качество отображения

plt.tight_layout()
plt.gca().patch.set_facecolor('white') # Белый фон

Добавляем легенду

ax.text(-2R, -2R, 2*R,
'Параметры:\n'
f'Радиус пластины: {R} м\n'
f'Плотность заряда: {sigma} Кл/м²\n'
f'Электрическая постоянная: {eps0} Ф/м',
fontsize=10, color="black")

Сохраняем изображение

plt.savefig('electric_field_visualization.png', dpi=300)

Показываем график

plt.show()

Результат выполнения кода:

Электрическое поле круглой пластины
Электрическое поле круглой пластины

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

Успешно решена классическая и крайне важная задача электростатики.

Список литературы:

1.https://www.geeksforgeeks.org/python/simulating‑electrostatic‑fields‑in-2-dimensions‑using‑python3/

2.https://problemsolvingwithpython.com/06-Plotting‑with‑Matplotlib/06.15-Quiver‑and‑Stream‑Plots/

3.https://www.tspi.at/2021/11/27/pythonsimpleelectricfielddisplay2d.html

4.https://physics.stackexchange.com/questions/176747/electric‑field‑due‑to‑a-uniformly‑charged‑finite‑rectangular‑plate

5.Griffiths D. J. “Introduction to Electrodynamics”

6.Сивухин Д. В. «Общий курс физики. Том III. Электричество»

7.Матвеев А.Н. «Электричество и магнетизм»

8.Иродов И.Е. «Электромагнетизм. Основные законы»

9.Усачёв А.Е. «Методы расчета электрических полей»

10.Подлесный Д.В. «Расчёт электростатических полей методом изображений»

11.Исаев Ю. Н., Кулешова Е. В., Русол Д. А. «Метод расчёта распределения зарядов сплошных пластин и пластин с отверстием в форме круга и форме сферических сегментов при наличии внешнего электростатического поля»

12.Исаев Ю. Н. «Расчёт распределения индуцированного заряда круглой проводящей пластины во внешнем электростатическом поле»

13.https://dragly.org/projects/htmlfieldlines/

14.https://www.geogebra.org/m/qgQF6NtC

15.https://phet.colorado.edu/en/simulations/charges‑and‑fields

 

Источник

Поделиться:

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов