用scipy中的odeint模块可以求微分方程的数值解,笔者基于此功能创作了一个极其简陋的电路计算器,给定电路参数,可以绘制出对应的波形。
from scipy.integrate import odeint
import matplotlib.pyplot as plt
import numpy as np
import math
'''以下所有数据均为国际单位!!'''
Vs = 1 # 电压源电压(恒压源值,方波峰值,交流源峰值)
iS = 1 # 电流源电流(同上)
T0 = 5 # 周期
R = 1
C = 1
L = 1
dots1 = 200 # 一阶电路采样点数
dots2 = 1000 # 二阶电路采样点数
def pulse(t): #生成一个低值为0,高值为1的方波,周期为T0的方波
pulse = 1
for k in range(1, 100, 1):
pulse = pulse + 4 * np.sin(
(2 * k - 1) * 2 * np.pi * t / T0) / ((2 * k - 1) * np.pi)
return 0.5 * pulse
# 一阶RC电路,返回电容电压
def RC_diff(Vc, t):
if flag == 0:
return np.array(-Vc / (R * C) + Vs / (R * C))
elif flag == 1:
return np.array(-Vc / (R * C) + Vs * np.sin(2 * np.pi * t / T0) /
(R * C))
elif flag == 2:
return np.array(-Vc / (R * C) + Vs * pulse(t) / (R * C))
# 一阶RL电路,返回电感电流
def RL_diff(iL, t):
if flag == 0: