/
AmuMax
/
Physics
Обзор
Документация
Войти
/
AmuMax
/
Physics
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
m_7.py
89 строк
3 KB
Osipchuk Lidiya
clear
12 дек 2024, 10:52
12 дек 2024, 10:52
8cd182c
Код
Авторство
О чём код?
import numpy as np import matplotlib.pyplot as plt # Задаю константы и параметры задачи epsilon_0 = 8.854187817e-12 # Электрическая постоянная, Ф/м lambda_lin = 1e-6 # Линейная плотность заряда, Кл/м r_point = 0.05 # Расстояние от провода до точки P, м # Аналитическое решение def E_analytical(lambda_lin, r): return lambda_lin / (2 * np.pi * epsilon_0 * r) E_a = E_analytical(lambda_lin, r_point) print(f"Аналитическое значение электрического поля E = {E_a:.3e} В/м") # Численное моделирование L_num = 2.0 # Общая длина провода, м N = 10000 # Число элементарных зарядов delta_z = L_num / N # Длина элементарного участка z = np.linspace(-L_num / 2, L_num / 2, N) # Координаты зарядов по оси z dq = lambda_lin * delta_z # Заряд каждого элементарного участка λ = dq/dL # Координаты точки наблюдения P x_p = r_point y_p = 0.0 z_p = 0.0 # Вычисляем расстояния от каждого элементарного заряда до точки P x_i = np.zeros(N) y_i = np.zeros(N) z_i = z rx = x_p - x_i ry = y_p - y_i rz = z_p - z_i r_i = np.sqrt(rx**2 + ry**2 + rz**2) # Вычисляем вклад каждого элемента в электрическое поле dE = (1 / (4 * np.pi * epsilon_0)) * (dq / r_i**2) # Компоненты электрического поля dE_x = dE * (rx / r_i) dE_y = dE * (ry / r_i) dE_z = dE * (rz / r_i) # Суммируем вклады E_x = np.sum(dE_x) E_y = np.sum(dE_y) E_z = np.sum(dE_z) E_num = np.sqrt(E_x**2 + E_y**2 + E_z**2) print(f"Численное значение электрического поля E = {E_num:.3e} В/м") # Вычисляем относительную разницу difference = np.abs(E_a - E_num) / E_a * 100 print(f"Относительная разница между решениями: {difference:.5f} %") # Графическое представление зависимости E от r r_values = np.linspace(0.01, 0.7, 100) E_analytical_values = E_analytical(lambda_lin, r_values) # Для численного метода используем фиксированное r_point E_numerical_values = [] for r_val in r_values: x_p = r_val rx = x_p - x_i ry = y_p - y_i rz = z_p - z_i r_i = np.sqrt(rx**2 + ry**2 + rz**2) dE = (1 / (4 * np.pi * epsilon_0)) * (dq / r_i**2) dE_x = dE * (rx / r_i) E_x = np.sum(dE_x) E_total = E_x # Поле направлено по радиусу E_numerical_values.append(E_total) E_numerical_values = np.abs(E_numerical_values) # Построение графика plt.figure() plt.plot(r_values, E_analytical_values, label='Аналитическое решение') plt.plot(r_values, E_numerical_values, '--', label='Численное решение') plt.xlabel('Расстояние r, м') plt.ylabel('Электрическое поле E, В/м') plt.title('Зависимость электрического поля от расстояния до провода') plt.legend() plt.grid() plt.show()