用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 = 1dots1 = 200  # 一阶电路采样点数
dots2 = 1000  #  二阶电路采样点数def pulse(t):  #生成一个低值为0,高值为1的方波,周期为T0的方波pulse = 1for 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:return np.array(-iL * R / L + R * iS / L)elif flag == 1:return np.array(-iL * R / L + R * iS * np.sin(2 * np.pi * t / T0) / L)elif flag == 2:return np.array(-iL * R / L + iS * pulse(t) * R / L)# 二阶RLC电路
def RLC_diff(state_vector, t):Vc, iL = state_vectorif flag == 0:return np.array([iL / C, -R * iL / L - Vc / L + Vs / L])elif flag == 1:return np.array([iL / C, -R * iL / L - Vc / L + Vs * np.sin(2 * np.pi * t / T0) / L])elif flag == 2:return np.array([iL / C, -R * iL / L - Vc / L + Vs * pulse(t) / L])def plot(mode, submode):if (mode == 1):if (submode == 1):tau = R * Ct = np.linspace(0, 5 * tau, dots1)result = odeint(RC_diff, [0, 0], t)plt.xlabel('t')plt.ylabel('Vc')plt.xlim(0, 5 * tau)if flag == 0:plt.ylim(0, Vs)else:plt.ylim(-Vs, Vs)plt.plot(t, result)plt.show()elif (submode == 2):tau = L / Rt = np.linspace(0, 5 * tau, dots1)result = odeint(RL_diff, [0, 0], t)plt.xlabel('t')plt.ylabel('iL')plt.xlim(0, 5 * tau)plt.ylim(0, iS)if flag == 0:plt.ylim(0, iS)else:plt.ylim(-iS, iS)plt.plot(t, result)plt.show()elif (mode == 2):damping_factor = R * math.sqrt(C / L) / 2  # 阻尼系数ξomega = 1 / math.sqrt(L * C)  # 自由振荡频率if (submode == 1):'''LC谐振腔的品质因数Q = 1/(2*ξ)经过Q个周期,振铃幅度衰减为4.3%以下经过1.5Q个周期,振铃幅度衰减为1%以下经过2.2Q个周期,振铃幅度衰减为0.1%以下'''if (damping_factor < 1 and damping_factor > 0):  #欠阻尼T = 2 * math.pi / (omega * math.sqrt(1 - damping_factor**2))  # RLC电路的周期Q = 1 / (2 * damping_factor)t = np.linspace(0, 1.5 * Q * T, dots2)result = odeint(RLC_diff, [0, 0], t)plt.xlabel('t')plt.ylabel('Vc/iL')plt.xlim(0, 1.5 * Q * T)plt.ylim(-Vs, 2 * Vs)plt.plot(t, result)plt.show()'''过阻尼下的时间常数τ1=(ξ+sqrt(ξ^2-1))/ω(长寿命项),τ2=(ξ-sqrt(ξ^2-1))/ω(短寿命项)短期行为看短寿命项,长期寿命看长寿命项'''elif (damping_factor > 1):  # 过阻尼tau = (damping_factor +math.sqrt(damping_factor**2 - 1)) / omegat = np.linspace(0, 5 * tau, dots2)result = odeint(RLC_diff, [0, 0], t)plt.xlabel('t')plt.ylabel('Vc/iL')plt.xlim(0, 5 * tau)plt.ylim(-Vs, 2 * Vs)plt.plot(t, result)plt.show()'''临界阻尼中有一项是e^(-ωt),有一项是t*e^(-ωt),这里定义其时间常数τ=1/ω'''elif (damping_factor == 1):  # 临界阻尼tau = 1 / omegat = np.linspace(0, 5 * tau, dots2)result = odeint(RLC_diff, [0, 0], t)plt.xlabel('t')plt.ylabel('Vc/iL')plt.xlim(0, 5 * tau)plt.ylim(-Vs, 2 * Vs)plt.plot(t, result)plt.show()else:  # 无阻尼T = 2 * math.pi / omegat = np.linspace(0, 5 * T, dots2)result = odeint(RLC_diff, [0, 0], t)plt.xlabel('t')plt.ylabel('Vc/iL')plt.xlim(0, 5 * T)plt.ylim(-2 * Vs, 2 * Vs)plt.plot(t, result)plt.show()def main():global flagflag = int(input('choose the power mode (0--vdc 1--vsin 2--vpulse):'))mode = int(input('choose the order of the circuit (1 or 2):'))if (mode == 1):submode = int(input('choose the circuit type (1--RC 2--RL):'))plot(mode, submode)elif (mode == 2):submode = int(input('choose the circuit type (1--RLC(in series)):'))plot(mode, submode)if __name__ == "__main__":main()

效果

方波激励RC电路:

欠阻尼下的RLC电路:

用python绘制电路图像相关推荐

  1. 用python绘制高光谱图像的光谱曲线图

    ENVI中绘制的光谱曲线图和可否用python绘制? 首先,答案是肯定的. 之前我绘制光谱曲线的的思路是用(x,y,:)取出高光谱图像中的某个像素处的数值作为纵坐标,光谱波段数作为横坐标(如1-31) ...

  2. python绘制函数图像opengl3d_写给 python 程序员的 OpenGL 教程

    原标题:写给 python 程序员的 OpenGL 教程 作者:牧马人 (本文来自作者投稿) 1预备知识 OpenGL 是 Open Graphics Library 的简写,意为"开放式图 ...

  3. python绘制三角函数图像

    利用matplotlib和numpy库绘制三角函数图像,包括正弦函数.余弦函数.正切函数.余切函数图像 代码如下: import numpy as np import matplotlib as mp ...

  4. Python遥感图像处理应用篇(二十四):Python绘制遥感图像各波段热力图(相关系数矩阵)

    给多光谱遥感图像各个波段绘制热力图,首先需要计算波段之间的相关系数矩阵,而计算遥感图像波段相关系数矩阵有不同的方法,常用的我们可以采用遥感图像处理软件计算,比如ENVI软件就可以计算相关系数矩阵,使用 ...

  5. Python绘制三维图像实例

    欢迎前往我的个人博客阅读原文. Python的Matplotlib库是一个比较强大的绘图库,可以比较好的代替Matlab实现绘图功能.下面我从学校开设的Matlab上机实验课程中的练习题挑出与绘图相关 ...

  6. python 图像字符绘制input描述_用python绘制函数图像

    有很多数学软件可以画函数图像,听说windows的计算器也有画函数图像的功能了.但是今天我们要用python来画一个正弦函数图像. 用到的第三方库:Matplotlib, Numpy 简单介绍下这两个 ...

  7. python绘制指数函数图像及性质_python实现画出e指数函数的图像

    这里用Python逼近函数y = exp(x);同样使用泰勒函数去逼近: exp(x) = 1 + x + (x)^2/(2!) + .. + (x)^n/(n!) + ... #!/usr/bin/ ...

  8. python绘制sinx图像_matplotlib.pyplot绘制图像之同一图中多条曲线对比

    绘制sinx和cosx # -*- coding:utf-8 -*- import numpy as np import matplotlib.pyplot as plt x = np.linspac ...

  9. python绘制指数函数图像及性质_指数函数图像及其性质正式版

    教学设计方案 课题名称: 指数函数图像及其性质 姓名: 安翠青 工作单 位: 滦 县 第 六 中 学 学科年级: 高一年级 教材版 本: 人教 A 版 一. 教学内容分析 指数函数是重要的基本初等函数 ...

最新文章

  1. 「人工智能训练师」国家职业技能标准发布:共有五级,您是第几级?
  2. 我的 Promtheus 到底啥时候报警?
  3. 小程序-wx:for
  4. 这应该是脑结构、脑工作原理最详细的图解了
  5. 【Python入门】第一个py程序
  6. HDOJ 1896 Stones 解题报告
  7. python使用正则化预处理数据
  8. 任性!特斯拉又涨价了 Model S、Model X国内售价上调
  9. python面对对象编程写一个程序有一个汽车_汽车类面向对象编程Python
  10. mysql 备份脚本 linux,LINUX中MySQL如何按时备份脚本
  11. 第6章 -2 计算机中的负数-1.23h
  12. spss与python和sql区别_Python/Excel/SPSS/SQL数据处理方法比较之2 - 数据查看
  13. 优化网站设计(九):减少DNS查找的次数
  14. 老男孩linux运维50期-谢江平
  15. spring源码之下载及构建
  16. TP6使用redis
  17. matlab植物大战僵尸小游戏
  18. php开发电脑i56200u,Intel Core i5-6200U性能跑分和评测 | ZMMOO
  19. 电信资费七宗罪,终端的故事
  20. DNA pull-down 要点

热门文章

  1. B端产品经理与C端产品经理
  2. Eclipse在线集成maven M2eclipse插件
  3. 【中间件加固】————6、IIS6安全加固规范
  4. SpringBoot实战实现分布式锁一之重现多线程高并发场景
  5. 西门子变频器电抗器和滤波器的区别
  6. 由左右相机像素点坐标反求世界坐标点
  7. python图片动态特效_python实现图片的抖音效果
  8. 基于Tomcat环境下运行JSP文件(基础版)
  9. 详解Android如何实现阴影效果
  10. 免费送一部华为手机!