极点和零点的位置
本例展示了如何研究动力系统的极点和零点位置。您可以使用pzmap
绘制地图,以图形方式完成这项工作。也可以使用函数zpkdata
查找数值。
研究极点和零点的位置有助于解决稳定性分析等问题。本例比较了两个具有相同控制对象传递函数和不同控制器的闭环系统。
让我们创建两个闭环系统模型。
In [ ]:
Pkg.add(["ControlSystems"])
In [ ]:
using ControlSystems
G = zpk([], [-5, -5, -10], 100)
C1 = pid(2.9, 7.1)
CL1 = feedback(G * C1, 1)
C2 = pid(29, 7.1)
CL2 = feedback(G * C2, 1)
Out[0]:
控制器 C2 的比例增益更高。否则,两个闭环系统 CL1 和 CL2 是完全相同的。
以图形方式检查两个系统的极点和零点位置。
In [ ]:
pzmap(CL1,label="CL1")
pzmap!(CL2,label="CL2")
Out[0]:
pzmap
在复平面上分别以 x 和 o 标签显示极点和零点的位置。当提供多个模型时,每个模型的极点和零点会以不同的颜色显示。这里,CL1 的极点和零点用橙色突出显示,CL2 的极点和零点用紫色突出显示。函数的零点相同,因此重叠显示为绿色。
从图中可以看出,CL1 的所有极点都位于左半平面,因此 CL1 是稳定的。系统模型 CL2 的极点位于右半平面,因此不稳定。
让我们使用zpkmap
计算 CL2 中极点和零点位置的数值。该计算按以下顺序返回三个值:增益 (k)、极点 (p)、零点 (z)。
In [ ]:
z,p,k = zpkdata(CL2)
display(z)
display(p)
还有一个单独的函数用于查找极点 -poles
,以及查找零点 -tzeros
。让我们来查找 CL1 系统的各个值。
In [ ]:
poles(CL2)
Out[0]:
In [ ]:
tzeros(CL1)
Out[0]:
tzero
和poles
返回包含系统零点和极点位置的列向量。
通过了解系统传递函数的极点和零点位置,我们可以判断系统的稳定性。更多分析系统稳定性的函数可参阅 分析。