В прошлой статье мы рассчитывали основные показатели электрических цепей, учитывая температурную зависимость сопротивления. В этой статье мы учтём зависимость теплоёмкости от температуры добавим охлаждение проводника из-за окружающей среды.

Код для моделирования первой цепи:
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
# Параметры меди
R0 = 400 # Ом, сопротивление при T0
alpha = 0.00393 # 1/К, температурный коэффициент сопротивления меди
T0 = 293 # К, начальная температура (20 °C)
# Теплоёмкость меди (аппроксимация в Дж/(кг·К))
def heat_capacity(T):
# Коэффициенты подобраны для диапазона 200–1200 К
a, b, c = 370, 0.2, 1e-4
return a + b * (T - 273) + c * (T - 273) ** 2
# Масса проводника (пример: цилиндр диаметром 2 мм, длиной 1 м)
rho_copper = 8960 # кг/м³, плотность меди
diameter = 0.002 # м
length = 1.0 # м
volume = np.pi * (diameter / 2) ** 2 * length
mass = rho_copper * volume # ~0.028 кг
# Коэффициент теплоотдачи (естественная конвекция)
k = 10 # Вт/(м²·К), примерное значение
surface_area = np.pi * diameter * length # площадь поверхности
k_total = k * surface_area # суммарный коэффициент теплоотдачи
# Температура окружающей среды
T_ambient = 293 # К
# ЭДС источника
U = 120 # В
# Функция для системы ОДУ
def dT_dt(t, T):
T = T[0] # извлекаем температуру из массива
# Текущее сопротивление
R_T = R0 * (1 + alpha * (T - T0))
# Теплоёмкость при текущей температуре
C_T = heat_capacity(T)
# Мощность джоулева нагрева
P_joule = U ** 2 / R_T
# Мощность теплоотвода
P_loss = k_total * (T - T_ambient)
# Правая часть уравнения: (P_joule - P_loss) / (C_T * mass)
dT = (P_joule - P_loss) / (C_T * mass)
return [dT]
# Временной интервал моделирования
t_span = (0, 300) # 0–300 секунд
t_eval = np.linspace(0, 300, 1000)
# Начальное условие
T_initial = [T0] # начальная температура
# Решение ОДУ
solution = solve_ivp(dT_dt, t_span, T_initial, t_eval=t_eval, method='RK45')
# Извлекаем результаты
time = solution.t
temperature = solution.y[0]
# Пересчёт в градусы Цельсия для графиков
temperature_C = temperature - 273
# Расчёт дополнительных параметров для графиков
resistance = R0 * (1 + alpha * (temperature - T0))
heat_capacity_values = [heat_capacity(T) for T in temperature]
power_joule = U ** 2 / resistance
power_loss = k_total * (temperature - T_ambient)
# Построение графиков
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
fig.suptitle('Моделирование нагрева медного проводника', fontsize=16)
# График 1: Температура vs время
axes[0, 0].plot(time, temperature_C, 'b-', linewidth=2)
axes[0, 0].set_xlabel('Время, с')
axes[0, 0].set_ylabel('Температура, °C')
axes[0, 0].grid(True)
axes[0, 0].set_title('Температура проводника')
# График 2: Сопротивление vs температура
axes[0, 1].plot(temperature_C, resistance, 'r-', linewidth=2)
axes[0, 1].set_xlabel('Температура, °C')
axes[0, 1].set_ylabel('Сопротивление, Ом')
axes[0, 1].grid(True)
axes[0, 1].set_title('Зависимость сопротивления от температуры')
# График 3: Теплоёмкость vs температура
axes[1, 0].plot(temperature_C, heat_capacity_values, 'g-', linewidth=2)
axes[1, 0].set_xlabel('Температура, °C')
axes[1, 0].set_ylabel('Теплоёмкость, Дж/(кг·К)')
axes[1, 0].grid(True)
axes[1, 0].set_title('Зависимость теплоёмкости от температуры')
# График 4: Мощности vs время
axes[1, 1].plot(time, power_joule, 'orange', label='Джоулев нагрев', linewidth=2)
axes[1, 1].plot(time, power_loss, 'purple', label='Теплоотвод', linewidth=2)
axes[1, 1].set_xlabel('Время, с')
axes[1, 1].set_ylabel('Мощность, Вт')
axes[1, 1].legend()
axes[1, 1].grid(True)
axes[1, 1].set_title('Баланс мощностей')
plt.tight_layout()
plt.show()
# Вывод ключевых результатов
print(f"Начальная температура: {T_initial[0] - 273:.1f} °C")
print(f"Конечная температура: {temperature_C[-1]:.1f} °C")
print(f"Начальное сопротивление: {R0:.3f} Ом")
print(f"Конечное сопротивление: {resistance[-1]:.3f} Ом")Результат работы программы можно увидеть на графике:

Из графиков видно, что температура будет увеличиваться до некоторого критического значения.
Моделирование второй цепи:
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
# Параметры меди (те же, что и ранее)
R0 = 100 # Ом, сопротивление при T0
alpha = 0.00393 # 1/К, температурный коэффициент сопротивления меди
T0 = 293 # К, начальная температура (20 °C)
# Теплоёмкость меди (аппроксимация в Дж/(кг·К))
def heat_capacity(T):
a, b, c = 370, 0.2, 1e-4
return a + b * (T - 273) + c * (T - 273) ** 2
# Масса проводника (цилиндр диаметром 2 мм, длиной 1 м)
rho_copper = 8960 # кг/м³, плотность меди
diameter = 0.002 # м
length = 1.0 # м
volume = np.pi * (diameter / 2) ** 2 * length
mass = rho_copper * volume # ~0.028 кг
# Коэффициент теплоотдачи (естественная конвекция)
k = 10 # Вт/(м²·К)
surface_area = np.pi * diameter * length # площадь поверхности
k_total = k * surface_area # суммарный коэффициент теплоотдачи
# Температура окружающей среды
T_ambient = 293 # К
# Параметры конденсатора
C_cap = 1 # Ф (10 000 мкФ)
U0 = 120 # В, начальное напряжение
# Функция для системы ОДУ (теперь 2 переменные: T и U)
def dY_dt(t, Y):
T, U = Y # температура и напряжение
# Текущее сопротивление
R_T = R0 * (1 + alpha * (T - T0))
# Теплоёмкость при текущей температуре
C_T = heat_capacity(T)
# Мощность джоулева нагрева
P_joule = U ** 2 / R_T
# Мощность теплоотвода
P_loss = k_total * (T - T_ambient)
# Производные
dT_dt = (P_joule - P_loss) / (C_T * mass)
dU_dt = -U / (C_cap * R_T)
return [dT_dt, dU_dt]
# Временной интервал моделирования
t_span = (0, 1000) # 0–1000 секунд
t_eval = np.linspace(0, 1000, 1000)
# Начальные условия: [температура, напряжение]
Y_initial = [T0, U0]
# Решение системы ОДУ
solution = solve_ivp(dY_dt, t_span, Y_initial, t_eval=t_eval, method='RK45')
# Извлекаем результаты
time = solution.t
temperature = solution.y[0]
voltage = solution.y[1]
# Пересчёт в градусы Цельсия для графиков
temperature_C = temperature - 273
# Расчёт дополнительных параметров для графиков
resistance = R0 * (1 + alpha * (temperature - T0))
heat_capacity_values = [heat_capacity(T) for T in temperature]
current = voltage / resistance
power_joule = voltage ** 2 / resistance
power_loss = k_total * (temperature - T_ambient)
# Построение графиков
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
fig.suptitle('Моделирование нагрева медного проводника от конденсатора', fontsize=16)
# График 1: Температура vs время
axes[0, 0].plot(time, temperature_C, 'b-', linewidth=2)
axes[0, 0].set_xlabel('Время, с')
axes[0, 0].set_ylabel('Температура, °C')
axes[0, 0].grid(True)
axes[0, 0].set_title('Температура проводника')
# График 2: Напряжение на конденсаторе vs время
axes[0, 1].plot(time, voltage, 'r-', linewidth=2)
axes[0, 1].set_xlabel('Время, с')
axes[0, 1].set_ylabel('Напряжение, В')
axes[0, 1].grid(True)
axes[0, 1].set_title('Разряд конденсатора')
# График 3: Ток vs время
axes[1, 0].plot(time, current, 'g-', linewidth=2)
axes[1, 0].set_xlabel('Время, с')
axes[1, 0].set_ylabel('Ток, А')
axes[1, 0].grid(True)
axes[1, 0].set_title('Ток разряда')
# График 4: Мощности vs время
axes[1, 1].plot(time, power_joule, 'orange', label='Джоулев нагрев', linewidth=2)
axes[1, 1].plot(time, power_loss, 'purple', label='Теплоотвод', linewidth=2)
axes[1, 1].set_xlabel('Время, с')
axes[1, 1].set_ylabel('Мощность, Вт')
axes[1, 1].legend()
axes[1, 1].grid(True)
axes[1, 1].set_title('Баланс мощностей')
plt.tight_layout()
plt.show()
# Вывод ключевых результатов
print(f"Начальная температура: {T0 - 273:.1f} °C")
print(f"Конечная температура: {temperature_C[-1]:.1f} °C")
print(f"Начальное напряжение: {U0:.1f} В")
print(f"Конечное напряжение: {voltage[-1]:.3f} В")
print(f"Масса проводника: {mass:.3f} кг")
print(f"Ёмкость конденсатора: {C_cap * 1e3:.0f} мФ")Результат моделирования второй цепи:

Анализируя полученные графики, можно сказать, что проводник сначала будет нагреваться, а затем быстро охлаждаться, а напряжение и ток в сети плавно убывают до нуля.
Напишем на python код для моделирования третьей цепи:
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
# Параметры меди
R0 = 1000 # Ом, сопротивление при T0
alpha = 0.00393 # 1/К, температурный коэффициент сопротивления меди
T0 = 293 # К, начальная температура (20 °C)
# Теплоёмкость меди (аппроксимация в Дж/(кг·К))
def heat_capacity(T):
a, b, c = 370, 0.2, 1e-4
return a + b * (T - 273) + c * (T - 273)**2
# Масса проводника (цилиндр диаметром 2 мм, длиной 1 м)
rho_copper = 8960 # кг/м³, плотность меди
diameter = 0.002 # м
length = 1.0 # м
volume = np.pi * (diameter/2)**2 * length
mass = rho_copper * volume # ~0.028 кг
# Коэффициент теплоотдачи (естественная конвекция)
k = 10 # Вт/(м²·К)
surface_area = np.pi * diameter * length # площадь поверхности
k_total = k * surface_area # суммарный коэффициент теплоотдачи
# Температура окружающей среды
T_ambient = 293 # К
# Параметры цепи
E_emf = 220 # В, ЭДС источника
L_coil = 10 # Гн (10 мГн), индуктивность катушки
# Функция для системы ОДУ (2 переменные: ток I и температура T)
def dY_dt(t, Y):
I, T = Y # ток и температура
# Текущее сопротивление проводника
R_T = R0 * (1 + alpha * (T - T0))
# Теплоёмкость при текущей температуре
C_T = heat_capacity(T)
# Производные
dI_dt = (E_emf - R_T * I) / L_coil
dT_dt = (I**2 * R_T - k_total * (T - T_ambient)) / (C_T * mass)
return [dI_dt, dT_dt]
# Временной интервал моделирования
t_span = (0, 1000) # 0–1000 секунд
t_eval = np.linspace(0, 1000, 1000)
# Начальные условия: [ток, температура]
Y_initial = [0.0, T0] # начальный ток = 0, начальная температура = T0
# Решение системы ОДУ
solution = solve_ivp(dY_dt, t_span, Y_initial, t_eval=t_eval, method='RK45')
# Извлекаем результаты
time = solution.t
current = solution.y[0]
temperature = solution.y[1]
# Пересчёт в градусы Цельсия для графиков
temperature_C = temperature - 273
# Расчёт дополнительных параметров для графиков
resistance = R0 * (1 + alpha * (temperature - T0))
heat_capacity_values = [heat_capacity(T) for T in temperature]
power_joule = current**2 * resistance
power_loss = k_total * (temperature - T_ambient)
voltage_drop = current * resistance
# Построение графиков
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
fig.suptitle('Моделирование нагрева медного проводника с катушкой', fontsize=16)
# График 1: Температура vs время
axes[0, 0].plot(time, temperature_C, 'b-', linewidth=2)
axes[0, 0].set_xlabel('Время, с')
axes[0, 0].set_ylabel('Температура, °C')
axes[0, 0].grid(True)
axes[0, 0].set_title('Температура проводника')
# График 2: Ток vs время
axes[0, 1].plot(time, current, 'r-', linewidth=2)
axes[0, 1].set_xlabel('Время, с')
axes[0, 1].set_ylabel('Ток, А')
axes[0, 1].grid(True)
axes[0, 1].set_title('Ток в цепи')
# График 3: Сопротивление vs температура
axes[1, 0].plot(temperature_C, resistance, 'g-', linewidth=2)
axes[1, 0].set_xlabel('Температура, °C')
axes[1, 0].set_ylabel('Сопротивление, Ом')
axes[1, 0].grid(True)
axes[1, 0].set_title('Зависимость сопротивления от температуры')
# График 4: Мощности vs время
axes[1, 1].plot(time, power_joule, 'orange', label='Джоулев нагрев', linewidth=2)
axes[1, 1].plot(time, power_loss, 'purple', label='Теплоотвод', linewidth=2)
axes[1, 1].set_xlabel('Время, с')
axes[1, 1].set_ylabel('Мощность, Вт')
axes[1, 1].legend()
axes[1, 1].grid(True)
axes[1, 1].set_title('Баланс мощностей')
plt.tight_layout()
plt.show()
# Вывод ключевых результатов
print(f"Начальная температура: {T0-273:.1f} °C")
print(f"Конечная температура: {temperature_C[-1]:.1f} °C")
print(f"Начальный ток: {current[0]:.3f} А")
print(f"Конечный ток: {current[-1]:.3f} А")
print(f"Масса проводника: {mass:.3f} кг")
print(f"Индуктивность катушки: {L_coil*1e3:.0f} мГн")
print(f"ЭДС источника: {E_emf:.1f} В итоге получим следующие графики:

Из анализа графиков получаем, что температура плавно растёт до некоторого критического значения,а ток сначала скачкообразно растёт, а затем плавно и медленно убывает до постоянной величины.
Таким образом, в данной статье построена самая реалистичная математическая модель, учитывающая множество различных факторов, получены графики и проведён их анализ.
Литература:
М. Н. Перунова «Расчёт электрических цепей: практикум» (Оренбург: ОГУ, 2014). В этом пособии тема разобрана на практике: есть задачи, где нужно учитывать температурную зависимость сопротивления, и пояснения, как это влияет на ток и напряжение в цепи. Хороший вариант, чтобы набить руку на типовых примерах.
И. О. Мартынова «Электротехника» (для СПО). В учебнике есть раздел, посвящённый зависимости сопротивления проводника от температуры. Объясняется, почему при нагреве сопротивление меняется, и как это учитывать в расчётах.
Ю. Г. Синдеев «Электротехника и основы электроники». В книге есть таблицы с удельными сопротивлениями и температурными коэффициентами для разных материалов (медь, алюминий, вольфрам, константан и др.) — это прямо пригодится при решении задач.
В. В. Чёрный, В. Э. Малаховская «Температурная зависимость сопротивления полупроводников и металлов» (Минск: БНТУ, 2016). Это учебно-методическое пособие глубже погружает в физику явления: разбирает, почему у металлов и полупроводников зависимость разная, как выводить формулы, как определять температурный коэффициент экспериментально.
О. М. Полещук, Н. П. Полуэктов и др. «Исследование зависимости сопротивления металлов и полупроводников от температуры» (2021). Это учебно-методическое пособие. В нём не только теория (объясняется, почему у металлов и полупроводников разная природа зависимости), но и практическая часть: описана лабораторная установка и методика измерений. Полезно, если нужно связать теорию с реальными экспериментами или лабораторными работами.
Г. И. Кольниченко, Я. В. Тарлаков, А. В. Сиротов, И. Н. Кравченко «Основы электротехники» (2-е изд., 2021). В учебнике есть разделы, где при расчётах цепей прямо учитывается изменение сопротивления элементов от температуры. Приведены примеры и задачи с развёрнутыми решениями — хорошо для отработки навыков.
Ю. М. Осипов, П. А. Борисов «Методы расчёта линейных электрических цепей» (СПб.: НИУ ИТМО, 2012). В этом пособии тема рассматривается в контексте общих методов расчёта цепей. Авторы показывают, как учёт температурной зависимости меняет подход к решению задач (например, когда цепь перестаёт быть строго линейной) и какие итерационные методы можно применять для сложных случаев.




























