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

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