用python绘制电路图像

用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:
        
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
绘制一个正弦交流电路的向量图,需要使用Python中的matplotlib库。下面是一个示例代码,可以出一个简单的正弦交流电路的向量图。 ```python import numpy as np import matplotlib.pyplot as plt # 定义参数 f = 50 # 电源频率为50Hz V0 = 220 # 电源电压为220V R = 10 # 电阻为10Ω L = 0.1 # 电感为0.1H C = 1e-6 # 电容为1μF # 计算电感和电容的阻抗 XL = 2 * np.pi * f * L XC = 1 / (2 * np.pi * f * C) # 计算电路总阻抗和电路总相位差 Z = np.sqrt(R ** 2 + (XL - XC) ** 2) theta = np.arctan((XL - XC) / R) # 计算电路电流和电压 I = V0 / Z Vr = I * R VL = I * XL VC = I * XC # 绘制向量图 fig, ax = plt.subplots(figsize=(6, 6)) # 电源电压向量 ax.arrow(0, 0, V0, 0, head_width=10, head_length=20, fc='blue', ec='blue') ax.text(V0 / 2, 10, '$V_0$', fontsize=14) # 电流向量 ax.arrow(0, 0, I * np.cos(-theta), I * np.sin(-theta), head_width=10, head_length=20, fc='red', ec='red') ax.text(I * np.cos(-theta) / 2, I * np.sin(-theta) / 2, '$I$', fontsize=14) # 电阻电压向量 ax.arrow(0, 0, Vr * np.cos(theta), Vr * np.sin(theta), head_width=10, head_length=20, fc='green', ec='green') ax.text(Vr * np.cos(theta) / 2, Vr * np.sin(theta) / 2, '$V_R$', fontsize=14) # 电感电压向量 ax.arrow(0, 0, VL * np.cos(np.pi / 2 - theta), VL * np.sin(np.pi / 2 - theta), head_width=10, head_length=20, fc='orange', ec='orange') ax.text(VL * np.cos(np.pi / 2 - theta) / 2, VL * np.sin(np.pi / 2 - theta) / 2, '$V_L$', fontsize=14) # 电容电压向量 ax.arrow(0, 0, VC * np.cos(np.pi / 2 + theta), VC * np.sin(np.pi / 2 + theta), head_width=10, head_length=20, fc='purple', ec='purple') ax.text(VC * np.cos(np.pi / 2 + theta) / 2, VC * np.sin(np.pi / 2 + theta) / 2, '$V_C$', fontsize=14) # 添加网格和标签 ax.grid(True) ax.set_xlim(-300, 300) ax.set_ylim(-300, 300) ax.set_xlabel('Real Axis (V)', fontsize=14) ax.set_ylabel('Imaginary Axis (V)', fontsize=14) ax.set_title('Sinusoidal AC Circuit Vector Diagram', fontsize=16) plt.show() ``` 运行该代码,可以得到如下的图像: ![正弦交流电路向量图](https://img-blog.csdnimg.cn/20211209092203314.png)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值