【matlab】数值计算实现电路仿真

本文介绍了利用Matlab实现电路仿真的过程,包括理解数值计算、电路求解和仿真概念,建立电路模型,用图论描述电路,构建和求解线性方程组,以及更新动态元件的初始值。作者强调了理论分析与数值计算的结合,并提供了具体的编程实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习数值分析与电路分析后的练手程序,较粗糙。 没有 加入更多电器元件的数学模型,如二极管、三极管、放大器、数字器件等等。
m脚本在:gittee仓库;


编程实现电路仿真,使用Matlab 。
背景:
电网络分析课程中,学习了电路的矩阵形式,和数值求解方法;数值分析课程了解了数值计算的概念和一些数值算法思想。于是我想,如何编程实现电路的仿真呢?


搞清几个概念

总是理不清思路:编程计算电路?理论分析电路?怎么转换呢?有什么不一样吗?得到各参数变量与待求量之间的关系?得到不同电路参数下的解???
所以首先要明确模糊的概念,以便理清思路。

数值计算

利用计算机求解数学问题,称为数值计算计算机可以大量、快速的运算,但是它是基于硬件结构的机械式计算,不同于人的计算(更高级、更灵活、更包容、更连续)。

需要考虑到计算机计算与编程的特点,设计恰当的数学模型、合适的数值计算方法和形式。

求解

求解即已知题目求解答案。有得到精确解析解的数值计算方法,也有迭代近似解的数值方法。计算只是个过程,重要的是题目是什么,想要得到什么样的结果

需要确定什么是已知的,什么是未知的。再理清求解思路:先分析,列出已知条件,然后计算出结果,再进一步得到更多结果,这才是完整的逻辑。这个逻辑是理论(课程)中学到的,这说明理论与求解是相辅相成的,理论上的分析虽然不需要数值计算,但没有算例验证理论,可信度也不高;同时,算例数据可以直观的反映出问题的特点,给分析带来参考,有助于得出结论。

仿真

计算机仿真:一般以时间为变量,将仿真过程分成极短的片段,求解出每一时刻的状态近似作为对应片段内的状态。从而近似得到整个过程中任意时刻的状态。

而求解得到的是一个问题的答案(一个电路状态信息),而仿真需要每个时间片段的答案(每个时刻电路的状态信息),这意味着“连续求解”一个“连续的题目”,需要将前一个问题的答案作为已知去求解当前问题。

一次仿真,得到的往往是大量的求解,仿真的结果应当是连续的(连续的时间序列)、大量的解的集合(按照时间序列依次求解的解序列)。


思路

清楚上面的概念后,我理清了思路:

  1. 理论分析电路,编写能求解“某时刻电路”的程序(单次求解);
  2. 加入相邻时刻间的变量更新,在时间序列的每个时刻求解,实现电路仿真(连续多次求解);
  3. 改变电路参数,得到相应结果,解析法验证(计算算例,通过理论计算验证)。

具体实行

这是最难的一部分:概念上,混淆了求解与仿真;思想上,纠结于解析法,而忽略数值方法;实现上,多方面知识结合。

描述瞬时电路

利用图论的概念描述电网络,形成网络线图(G图):
在这里插入图片描述

  • 抽象出节点和支路
  • 每一元件为一条支路
  • 各支路标有方向箭头(自指定方向)

利用电网络理论的知识,可得到电路的关联矩阵 A \boldsymbol A A,用于描述电路的拓扑结构。在这里插入图片描述

  • A = { a i j } {\boldsymbol A} = \{a_{ij}\} A={ aij}
  • a i j = 1 a_{ij} = 1 aij=1:支路 j 箭头指向节点 i
  • a i j = − 1 a_{ij}=-1 aij=1:支路 j 箭头背离节点 i
  • a i j = 0 a_{ij}=0 aij=0:支路 j 不与节点 i 关联

若有N+1个节点,M条支路,a个电导(电阻),b个电压源(包括电容),c个电流源(包括电感),
并考虑到极短时间内各参数不变,有以下矩阵:

  • U s {\boldsymbol U}_{\rm s} Us:支路源电压向量(已知)
    • U s = [ u s 1 , u s 2 , ⋯   , u s M ] T {\boldsymbol U}_{\rm s} = [u_{\rm s1}, u_{\rm s2},\cdots,u_{\rm sM}]^{\rm T} Us=[us1,us2,,usM]T
    • u s k u_{ {\rm s}k} usk :第 k 条支路的电压源电压,符号以G图对应支路的参考方向为正;k = 1 ~ M
    • 电容视为电压源,其值为初始电压
    • 无电压源或电容则为0
  • I s {\boldsymbol I}_{\rm s} Is:支路源电流向量(已知)
    • I s = [ i s 1 , i s 2 , ⋯   , i s M ] T {\boldsymbol I}_{\rm s} = [{i_{\rm s1}}, i_{\rm s2},\cdots,i_{\rm sM}]^{\rm T} Is=[is1,is2,,isM]T
    • i s k i_{ {\rm s}k} isk:第 k 条支路的电流源电流,符号以G图对应支路的参考方向为正;k = 1 ~ M
    • 电感视为电流源,其值为初始电流
    • 无电流源或电感则为0
  • Y \boldsymbol Y Y:支路电导矩阵(已知)
    • Y = d i a g [ y 1   y 2   ⋯   y M ] {\boldsymbol Y} = {\rm diag}[y_1~y_2~\cdots~y_{\rm M}] Y=diag[y1 y2  yM]
    • y k y_k yk:第 k 条支路的电导;k = 1 ~ M
    • 电阻转化为电导,无电导则为0
    • 好像含受控源的电路的受控关系可以用电导矩阵表示出来(没研究)
  • U \boldsymbol U U:支路电压向量(未知)
    • U = [ u 1 , u 2 , ⋯   , u M ] T {\boldsymbol U} = [u_1, u_2, \cdots, u_{\rm M}]^{\rm T} U=[u1,u2,,uM]T
    • u k u_k uk:第 k 条支路的电压,符号以G图对应支路的参考方向为正;k = 1 ~ M
  • I \boldsymbol I I:支路电流向量(未知)
    • I = [ i 1 , i 2 , ⋯   , i M ] T {\boldsymbol I} = [i_1,i_2,\cdots,i_{\rm M}]^{\rm T} I=[i1,i2,,iM]T
    • i k i_k ik:第 k 条支路的电流,符号以G图对应支路的参考方向为正;k = 1 ~ M
  • U n {\boldsymbol U}_{\rm n} Un:节点电压向量(未知)
    • U n = [ u n 1 , u n 2 , ⋯   , u n N ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值