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

Электрические цепи
Электрические цепи

Код для моделирования первой цепи:

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). В этом пособии тема рассматривается в контексте общих методов расчёта цепей. Авторы показывают, как учёт температурной зависимости меняет подход к решению задач (например, когда цепь перестаёт быть строго линейной) и какие итерационные методы можно применять для сложных случаев.