基于python的微分方程数值解法求解电路模型

  1. 首先安装环境包
  2. 电路模型和微分方程
  3. python代码

目录

安装环境包

电路模型和微分方程

模型1

电路模型1

微分方程1

模型2

电路模型2

微分方程2

python代码

模型1

模型2

数值解结果

模型1

模型2结果


安装环境包

安装numpy(用于调节range) 和 matplotlib(用于绘图)
在命令行输入

pip install numpy 
pip install matplotlib

电路模型和微分方程

模型1

无损害,电容电压为5V,电容为0.01F,电感为0.01H的并联谐振电路

电路模型1

基于python的微分方程数值解法求解电路模型_第1张图片

微分方程1

u=-LC\frac{d^{2}u}{dt^{2 }}

模型2

带电阻损耗的电容电压为5V,电容为0.01F,电感为0.01H的的并联谐振

电路模型2

基于python的微分方程数值解法求解电路模型_第2张图片

微分方程2

u_{c} +RC\frac{du_{c}}{dt}+LC\frac{d^{2}u}{dt^{2}}=0

 

python代码

模型1

import numpy as np
import matplotlib.pyplot as plt

L = 0.01  #电容的值 F
C = 0.01  #电感的值 L
u_0 = 5   #电容的初始电压
u_dot_0 = 0


def equition(u,u_dot):#二阶方程
    u_double_dot = -u/(L*C)
    return u_double_dot

def draw_plot(time_step,time_scale):#时间步长和范围
    u = u_0
    u_dot = u_dot_0  #初始电压和电压的一阶导数
    time_list = [0] #时间lis
    Votage = [u] #电压list
    plt.figure()
    for time in np.arange(0,time_scale,time_step):#使用欧拉数值计算法 一阶近似
        u_double_dot = equition(u,u_dot) #二阶导数
        u_dot = u_dot + u_double_dot*time_step #一阶导数
        u = u + u_dot*time_step #电压
        time_list.append(time) #结果添加
        Votage.append(u) #结果添加
        print(u)
    plt.plot(time_list,Votage,"b--",linewidth=1) #画图
    plt.show()
    plt.savefig("easyplot.png")

if __name__ == '__main__':
    draw_plot(0.0001,1)

模型2

import numpy as np
import matplotlib.pyplot as plt

L = 0.01  #电容的值 F
C = 0.01  #电感的值 L
R = 0.1   #电阻值
u_0 = 5   #电容的初始电压
u_dot_0 = 0


def equition(u,u_dot):#二阶方程
    u_double_dot =(-R*C*u_dot -u)/(L*C)
    return u_double_dot

def draw_plot(time_step,time_scale):#时间步长和范围
    u = u_0
    u_dot = u_dot_0  #初始电压和电压的一阶导数
    time_list = [0] #时间lis
    Votage = [u] #电压list
    plt.figure()
    for time in np.arange(0,time_scale,time_step):#使用欧拉数值计算法 一阶近似
        u_double_dot = equition(u,u_dot) #二阶导数
        u_dot = u_dot + u_double_dot*time_step #一阶导数
        u = u + u_dot*time_step #电压
        time_list.append(time) #结果添加
        Votage.append(u) #结果添加
        print(u)
    plt.plot(time_list,Votage,"b-",linewidth=1) #画图
    plt.show()
    plt.savefig("result.png")



if __name__ == '__main__':
    draw_plot(0.0001,1)

数值解结果

模型1

基于python的微分方程数值解法求解电路模型_第3张图片 纵轴为电容两端电压,横轴为时间与公式计算一致​​

模型2结果

基于python的微分方程数值解法求解电路模型_第4张图片 纵轴为电容两端电压,横轴为时间标题

最后我们可以根据调节电阻到达不同的状态

 

基于python的微分方程数值解法求解电路模型_第5张图片 R=0.01,欠阻尼
基于python的微分方程数值解法求解电路模型_第6张图片 R=1.7,临界阻尼
基于python的微分方程数值解法求解电路模型_第7张图片 R=100,过阻尼

 

 

你可能感兴趣的:(python)