使用状态空间解决电气问题¶
状态空间方法是控制理论中用于建模和分析系统的一种强大方法。与仅关注输入-输出关系的传递函数方法不同,状态空间方法将系统表示为一组一阶微分方程。
系统的状态空间表示可以写成:
其中
以下是一些示例,演示如何使用 StateSpace 解决电气问题。
示例 1¶
在串联 RLC 电路中,我们有一个电阻
在上图的回路中应用 基尔霍夫电压定律 (KVL) 得到:
其中:
此方程将输入电压与RLC电路的元件联系起来。
电容器电压方程
电容器两端的电压可以通过以下公式与电流相关联:
对两边取时间导数,我们得到电容器电压的变化率:
这个方程表明电容器电压的变化率与电路中的电流成正比。
从KVL方程中,求解电流的导数得到:
这是一个描述电路元件和输入电压下电流变化率的微分方程。
状态空间表示法通过状态变量来表达系统,这些状态变量通常是描述电路元件中存储的能量(如电流和电压)的变量。
我们将状态向量
这里
输入向量
以状态变量表示的微分方程系统变为:
当前的导数:
电容器电压的导数:
串联RLC电路的矩阵为:
因此,串联RLC电路的状态空间表示为:
状态空间表示法通过使用矩阵来描述系统的动态特性,提供了一种紧凑的串联RLC电路建模方法。矩阵
解决方案
>>> from sympy import Matrix, symbols, pprint >>> from sympy.physics.control import * >>> R, L, C = symbols('R L C') >>> A = Matrix([[-R/L, -1/L], [1/C, 0]]) >>> B = Matrix([[1/L], [0]]) >>> C = Matrix([[0, 1]]) >>> D = Matrix([[0]]) >>> ss = StateSpace(A, B, C, D) >>> ss StateSpace(Matrix([ [-R/L, -1/L], [ 1/C, 0]]), Matrix([ [1/L], [ 0]]), Matrix([[0, 1]]), Matrix([[0]]))我们可以通过重写方法将状态空间转换为传递函数。
>>> tf = ss.rewrite(TransferFunction)[0][0] >>> tf TransferFunction(1, C*L*s**2 + C*R*s + 1, s)
示例 2¶
获取如图所示的电气系统所表示的系统的状态模型
系统通过两个状态变量
定义两个状态变量为:
通过在节点
在节点
替换状态变量:
简化:
因此,
在节点
替换状态变量:
简化:
因此,
状态空间表示法由以下矩阵方程给出:
电路的输出定义为:
因此,输出方程可以写成:
解决方案
>>> from sympy import symbols, Matrix
>>> from sympy.physics.control import *
>>> R, C = symbols('R C')
>>> A = Matrix([[-2/(R*C), 1/(R*C)], [1/(R*C), -1/(R*C)]])
>>> B = Matrix([[1/(R*C)], [0]])
>>> C = Matrix([[0, 1]])
>>> ss = StateSpace(A, B, C)
>>> ss
StateSpace(Matrix([
[-2/(C*R), 1/(C*R)],
[ 1/(C*R), -1/(C*R)]]), Matrix([
[1/(C*R)],
[ 0]]), Matrix([[0, 1]]), Matrix([[0]]))
参考文献¶
bmsce.ac.in 的链接