控制系统图

此模块包含控制系统的常用绘图函数。如果用户需要绘图,则需要将 Matplotlib 作为外部依赖项。如果只需要绘图的数值数据,则需要将 NumPy 作为外部依赖项。

极点-零点图

control_plots.pole_zero_plot(
pole_color='blue',
pole_markersize=10,
zero_color='orange',
zero_markersize=7,
grid=True,
show_axes=True,
show=True,
**kwargs,
)[源代码]

返回系统的极点-零点图(也称为PZ图或PZ映射)。

极零图是系统极点和零点的图形表示。它绘制在复平面上,用圆形标记表示系统的零点,用’x’形标记表示系统的极点。

参数:
系统SISOLinearTimeInvariant 类型系统

要计算其零极点图的系统。

pole_colorstr, tuple, 可选

图表上极点的颜色。默认颜色为蓝色。颜色可以提供为 matplotlib 颜色字符串,或一个由 0-1 范围内的浮点数组成的 3 元组。

pole_markersize数字,可选

用于标记图中极点的标记大小。默认的极点标记大小为10。

zero_colorstr, tuple, 可选

图中零点的颜色。默认颜色为橙色。颜色可以作为 matplotlib 颜色字符串提供,或作为每个在 0-1 范围内的浮点数的 3 元组提供。

zero_markersize数字,可选

用于标记图中零点的标记大小。默认的零点标记大小为7。

网格布尔值,可选

如果 True ,绘图将带有网格。默认为 True。

显示轴布尔值,可选

如果 True ,将显示坐标轴。默认为 False。

显示布尔值,可选

如果 True,图表将被显示,否则将返回等效的 matplotlib plot 对象。默认为 True。

参考文献

示例

>>> from sympy.abc import s
>>> from sympy.physics.control.lti import TransferFunction
>>> from sympy.physics.control.control_plots import pole_zero_plot
>>> tf1 = TransferFunction(s**2 + 1, s**4 + 4*s**3 + 6*s**2 + 5*s + 2, s)
>>> pole_zero_plot(tf1)   

(png, hires.png, pdf)

../../../_images/control_plots-1.png
control_plots.pole_zero_numerical_data()[源代码]

返回系统的极点和零点的数值数据。它由 pole_zero_plot 内部使用,以获取绘制极点和零点的数据。用户可以使用这些数据进一步分析系统的动态特性,或使用不同的后端/绘图模块进行绘图。

参数:
系统SISOLinearTimeInvariant

要计算极零数据的系统。

返回:
元组(零点,极点)

zeros = 系统的零点,以 Python 浮点数/复数列表形式表示。poles = 系统的极点,以 Python 浮点数/复数列表形式表示。

Raises:
NotImplementedError

当未传递 SISO LTI 系统时。

当系统中存在时间延迟项时。

ValueError

当系统中存在多个自由符号时。传递函数中唯一的变量应为拉普拉斯变换的变量。

示例

>>> from sympy.abc import s
>>> from sympy.physics.control.lti import TransferFunction
>>> from sympy.physics.control.control_plots import pole_zero_numerical_data
>>> tf1 = TransferFunction(s**2 + 1, s**4 + 4*s**3 + 6*s**2 + 5*s + 2, s)
>>> pole_zero_numerical_data(tf1)
([-1j, 1j], [-2.0, -1.0, (-0.5-0.8660254037844386j), (-0.5+0.8660254037844386j)])

波特图

control_plots.bode_plot(
initial_exp=-5,
final_exp=5,
grid=True,
show_axes=False,
show=True,
freq_unit='rad/sec',
phase_unit='rad',
phase_unwrap=True,
**kwargs,
)[源代码]

返回连续时间系统的Bode相位和幅值图。

参数:
系统SISOLinearTimeInvariant 类型

要计算其波特图的LTI SISO系统。

初始经验数字,可选

半对数图的初始指数 10。默认为 -5。

最终实验数字,可选

半对数图的最终指数10。默认为5。

显示布尔值,可选

如果 True,图表将被显示,否则将返回等效的 matplotlib plot 对象。默认为 True。

precint, 可选

点坐标值的小数点精度。默认为 8。

网格布尔值,可选

如果 True ,绘图将带有网格。默认为 True。

显示轴布尔值,可选

如果 True ,将显示坐标轴。默认为 False。

freq_unit字符串,可选

用户可以在 ``’rad/sec’``(弧度/秒)和 ``’Hz’``(赫兹)之间选择频率单位。

phase_unit字符串,可选

用户可以在 ``’rad’``(弧度)和 ``’deg’``(度)之间选择相位单位。

示例

>>> from sympy.abc import s
>>> from sympy.physics.control.lti import TransferFunction
>>> from sympy.physics.control.control_plots import bode_plot
>>> tf1 = TransferFunction(1*s**2 + 0.1*s + 7.5, 1*s**4 + 0.12*s**3 + 9*s**2, s)
>>> bode_plot(tf1, initial_exp=0.2, final_exp=0.7)   

(png, hires.png, pdf)

../../../_images/control_plots-2.png
control_plots.bode_magnitude_plot(
initial_exp=-5,
final_exp=5,
color='b',
show_axes=False,
grid=True,
show=True,
freq_unit='rad/sec',
**kwargs,
)[源代码]

返回连续时间系统的Bode幅值图。

参见 bode_plot 以获取所有参数。

control_plots.bode_phase_plot(
initial_exp=-5,
final_exp=5,
color='b',
show_axes=False,
grid=True,
show=True,
freq_unit='rad/sec',
phase_unit='rad',
phase_unwrap=True,
**kwargs,
)[源代码]

返回连续时间系统的Bode相位图。

参见 bode_plot 以获取所有参数。

control_plots.bode_magnitude_numerical_data(
initial_exp=-5,
final_exp=5,
freq_unit='rad/sec',
**kwargs,
)[源代码]

返回系统波德幅值图的数值数据。它由 bode_magnitude_plot 内部使用,以获取绘制波德幅值图的数据。用户可以使用这些数据进一步分析系统的动态特性,或使用不同的后端/绘图模块进行绘图。

参数:
系统SISOLinearTimeInvariant

要计算数据的系统。

初始经验数字,可选

半对数图的初始指数 10。默认为 -5。

最终实验数字,可选

半对数图的最终指数10。默认为5。

freq_unit字符串,可选

用户可以在 ``’rad/sec’``(弧度/秒)和 ``’Hz’``(赫兹)之间选择频率单位。

返回:
元组(x, y)

x = Bode 幅值图的 x 轴值。y = Bode 幅值图的 y 轴值。

Raises:
NotImplementedError

当未传递 SISO LTI 系统时。

当系统中存在时间延迟项时。

ValueError

当系统中存在多个自由符号时。传递函数中唯一的变量应为拉普拉斯变换的变量。

当输入错误的频率单位时。

示例

>>> from sympy.abc import s
>>> from sympy.physics.control.lti import TransferFunction
>>> from sympy.physics.control.control_plots import bode_magnitude_numerical_data
>>> tf1 = TransferFunction(s**2 + 1, s**4 + 4*s**3 + 6*s**2 + 5*s + 2, s)
>>> bode_magnitude_numerical_data(tf1)   
([1e-05, 1.5148378120533502e-05,..., 68437.36188804005, 100000.0],
[-6.020599914256786, -6.0205999155219505,..., -193.4117304087953, -200.00000000260573])
control_plots.bode_phase_numerical_data(
initial_exp=-5,
final_exp=5,
freq_unit='rad/sec',
phase_unit='rad',
phase_unwrap=True,
**kwargs,
)[源代码]

返回系统的Bode相位图的数值数据。它由 bode_phase_plot 内部使用,以获取绘制Bode相位图的数据。用户可以使用这些数据进一步分析系统的动态特性,或使用不同的后端/绘图模块进行绘图。

参数:
系统SISOLinearTimeInvariant

要计算Bode相位图数据的系统。

初始经验数字,可选

半对数图的初始指数 10。默认为 -5。

最终实验数字,可选

半对数图的最终指数10。默认为5。

freq_unit字符串,可选

用户可以在 'rad/sec' (弧度/秒) 和 'Hz' (赫兹) 之间选择频率单位。

phase_unit字符串,可选

用户可以在 ``’rad’``(弧度)和 ``’deg’``(度)之间选择相位单位。

phase_unwrapbool, 可选

默认设置为 True

返回:
元组(x, y)

x = Bode 相位图的 x 轴值。y = Bode 相位图的 y 轴值。

Raises:
NotImplementedError

当未传递 SISO LTI 系统时。

当系统中存在时间延迟项时。

ValueError

当系统中存在多个自由符号时。传递函数中唯一的变量应为拉普拉斯变换的变量。

当输入错误的频率或相位单位时。

示例

>>> from sympy.abc import s
>>> from sympy.physics.control.lti import TransferFunction
>>> from sympy.physics.control.control_plots import bode_phase_numerical_data
>>> tf1 = TransferFunction(s**2 + 1, s**4 + 4*s**3 + 6*s**2 + 5*s + 2, s)
>>> bode_phase_numerical_data(tf1)   
([1e-05, 1.4472354033813751e-05, 2.035581932165858e-05,..., 47577.3248186011, 67884.09326036123, 100000.0],
[-2.5000000000291665e-05, -3.6180885085e-05, -5.08895483066e-05,...,-3.1415085799262523, -3.14155265358979])

脉冲响应图

control_plots.impulse_response_plot(
color='b',
prec=8,
lower_limit=0,
upper_limit=10,
show_axes=False,
grid=True,
show=True,
**kwargs,
)[源代码]

返回连续时间系统的单位脉冲响应(输入是狄拉克-德尔塔函数)。

参数:
系统SISOLinearTimeInvariant 类型

要计算其脉冲响应的LTI SISO系统。

颜色str, tuple, 可选

线条的颜色。默认是蓝色。

显示布尔值,可选

如果 True,图表将被显示,否则将返回等效的 matplotlib plot 对象。默认为 True。

下限数字,可选

绘图范围的下限。默认为 0。

上限数字,可选

绘图范围的上限。默认为 10。

precint, 可选

点坐标值的小数点精度。默认为 8。

显示轴布尔值,可选

如果 True ,将显示坐标轴。默认为 False。

网格布尔值,可选

如果 True ,绘图将带有网格。默认为 True。

参考文献

示例

>>> from sympy.abc import s
>>> from sympy.physics.control.lti import TransferFunction
>>> from sympy.physics.control.control_plots import impulse_response_plot
>>> tf1 = TransferFunction(8*s**2 + 18*s + 32, s**3 + 6*s**2 + 14*s + 24, s)
>>> impulse_response_plot(tf1)   

(png, hires.png, pdf)

../../../_images/control_plots-3.png
control_plots.impulse_response_numerical_data(
prec=8,
lower_limit=0,
upper_limit=10,
**kwargs,
)[源代码]

返回单输入单输出连续时间系统脉冲响应图中各点的数值。默认情况下,使用自适应采样。如果用户希望改为获取均匀采样的响应,则应传递 adaptive kwarg 为 False,并且必须传递 n 作为附加的 kwargs。有关更多详细信息,请参阅类 sympy.plotting.series.LineOver1DRangeSeries 的参数。

参数:
系统SISOLinearTimeInvariant

要计算脉冲响应数据的系统。

precint, 可选

点坐标值的小数点精度。默认为 8。

下限数字,可选

绘图范围的下限。默认为 0。

上限数字,可选

绘图范围的上限。默认为 10。

kwargs

额外的关键字参数传递给底层的 sympy.plotting.series.LineOver1DRangeSeries 类。

返回:
元组(x, y)

x = 脉冲响应中点的时轴值。NumPy 数组。y = 脉冲响应中点的幅轴值。NumPy 数组。

Raises:
NotImplementedError

当未传递 SISO LTI 系统时。

当系统中存在时间延迟项时。

ValueError

当系统中存在多个自由符号时。传递函数中唯一的变量应为拉普拉斯变换的变量。

lower_limit 参数小于 0 时。

示例

>>> from sympy.abc import s
>>> from sympy.physics.control.lti import TransferFunction
>>> from sympy.physics.control.control_plots import impulse_response_numerical_data
>>> tf1 = TransferFunction(s, s**2 + 5*s + 8, s)
>>> impulse_response_numerical_data(tf1)   
([0.0, 0.06616480200395854,... , 9.854500743565858, 10.0],
[0.9999999799999999, 0.7042848373025861,...,7.170748906965121e-13, -5.1901263495547205e-12])

阶跃响应图

control_plots.step_response_plot(
color='b',
prec=8,
lower_limit=0,
upper_limit=10,
show_axes=False,
grid=True,
show=True,
**kwargs,
)[源代码]

返回一个连续时间系统的单位阶跃响应。它是当输入信号为阶跃函数时系统的响应。

参数:
系统SISOLinearTimeInvariant 类型

要计算其阶跃响应的LTI SISO系统。

颜色str, tuple, 可选

线条的颜色。默认是蓝色。

显示布尔值,可选

如果 True,图表将被显示,否则将返回等效的 matplotlib plot 对象。默认为 True。

下限数字,可选

绘图范围的下限。默认为 0。

上限数字,可选

绘图范围的上限。默认为 10。

precint, 可选

点坐标值的小数点精度。默认为 8。

显示轴布尔值,可选

如果 True ,将显示坐标轴。默认为 False。

网格布尔值,可选

如果 True ,绘图将带有网格。默认为 True。

参考文献

示例

>>> from sympy.abc import s
>>> from sympy.physics.control.lti import TransferFunction
>>> from sympy.physics.control.control_plots import step_response_plot
>>> tf1 = TransferFunction(8*s**2 + 18*s + 32, s**3 + 6*s**2 + 14*s + 24, s)
>>> step_response_plot(tf1)   

(png, hires.png, pdf)

../../../_images/control_plots-4.png
control_plots.step_response_numerical_data(
prec=8,
lower_limit=0,
upper_limit=10,
**kwargs,
)[源代码]

返回SISO连续时间系统阶跃响应图中各点的数值。默认情况下,使用自适应采样。如果用户希望获得均匀采样的响应,则应将 adaptive kwarg 传递为 False,并且必须传递 n 作为附加的 kwargs。有关更多详细信息,请参阅类 sympy.plotting.series.LineOver1DRangeSeries 的参数。

参数:
系统SISOLinearTimeInvariant

要计算单位阶跃响应数据的系统。

precint, 可选

点坐标值的小数点精度。默认为 8。

下限数字,可选

绘图范围的下限。默认为 0。

上限数字,可选

绘图范围的上限。默认为 10。

kwargs

额外的关键字参数传递给底层的 sympy.plotting.series.LineOver1DRangeSeries 类。

返回:
元组(x, y)

x = 阶跃响应中点的时轴值。NumPy 数组。y = 阶跃响应中点的幅值轴值。NumPy 数组。

Raises:
NotImplementedError

当未传递 SISO LTI 系统时。

当系统中存在时间延迟项时。

ValueError

当系统中存在多个自由符号时。传递函数中唯一的变量应为拉普拉斯变换的变量。

lower_limit 参数小于 0 时。

示例

>>> from sympy.abc import s
>>> from sympy.physics.control.lti import TransferFunction
>>> from sympy.physics.control.control_plots import step_response_numerical_data
>>> tf1 = TransferFunction(s, s**2 + 5*s + 8, s)
>>> step_response_numerical_data(tf1)   
([0.0, 0.025413462339411542, 0.0484508722725343, ... , 9.670250533855183, 9.844291913708725, 10.0],
[0.0, 0.023844582399907256, 0.042894276802320226, ..., 6.828770759094287e-12, 6.456457160755703e-12])

斜坡响应图

control_plots.ramp_response_plot(
slope=1,
color='b',
prec=8,
lower_limit=0,
upper_limit=10,
show_axes=False,
grid=True,
show=True,
**kwargs,
)[源代码]

返回连续时间系统的斜坡响应。

斜坡函数定义为通过原点的直线(\(f(x) = mx\))。斜坡函数的斜率可以由用户调整,默认值为1。

参数:
系统SISOLinearTimeInvariant 类型

要计算其斜坡响应的LTI SISO系统。

斜率数字,可选

输入斜坡函数的斜率。默认为 1。

颜色str, tuple, 可选

线条的颜色。默认是蓝色。

显示布尔值,可选

如果 True,图表将被显示,否则将返回等效的 matplotlib plot 对象。默认为 True。

下限数字,可选

绘图范围的下限。默认为 0。

上限数字,可选

绘图范围的上限。默认为 10。

precint, 可选

点坐标值的小数点精度。默认为 8。

显示轴布尔值,可选

如果 True ,将显示坐标轴。默认为 False。

网格布尔值,可选

如果 True ,绘图将带有网格。默认为 True。

参考文献

示例

>>> from sympy.abc import s
>>> from sympy.physics.control.lti import TransferFunction
>>> from sympy.physics.control.control_plots import ramp_response_plot
>>> tf1 = TransferFunction(s, (s+4)*(s+8), s)
>>> ramp_response_plot(tf1, upper_limit=2)   

(png, hires.png, pdf)

../../../_images/control_plots-5.png
control_plots.ramp_response_numerical_data(
slope=1,
prec=8,
lower_limit=0,
upper_limit=10,
**kwargs,
)[源代码]

返回 SISO 连续时间系统斜坡响应图中点的数值。默认情况下,使用自适应采样。如果用户希望改为获取均匀采样的响应,则应传递 adaptive kwarg 为 False,并且必须传递 n 作为附加的 kwargs。有关更多详细信息,请参阅类 sympy.plotting.series.LineOver1DRangeSeries 的参数。

参数:
系统SISOLinearTimeInvariant

要计算斜坡响应数据的系统。

斜率数字,可选

输入斜坡函数的斜率。默认为 1。

precint, 可选

点坐标值的小数点精度。默认为 8。

下限数字,可选

绘图范围的下限。默认为 0。

上限数字,可选

绘图范围的上限。默认为 10。

kwargs

额外的关键字参数传递给底层的 sympy.plotting.series.LineOver1DRangeSeries 类。

返回:
元组(x, y)

x = 斜坡响应图中点的时轴值。NumPy 数组。y = 斜坡响应图中点的幅值轴值。NumPy 数组。

Raises:
NotImplementedError

当未传递 SISO LTI 系统时。

当系统中存在时间延迟项时。

ValueError

当系统中存在多个自由符号时。传递函数中唯一的变量应为拉普拉斯变换的变量。

lower_limit 参数小于 0 时。

slope 为负时。

示例

>>> from sympy.abc import s
>>> from sympy.physics.control.lti import TransferFunction
>>> from sympy.physics.control.control_plots import ramp_response_numerical_data
>>> tf1 = TransferFunction(s, s**2 + 5*s + 8, s)
>>> ramp_response_numerical_data(tf1)   
(([0.0, 0.12166980856813935,..., 9.861246379582118, 10.0],
[1.4504508011325967e-09, 0.006046440489058766,..., 0.12499999999568202, 0.12499999999661349]))

奈奎斯特图

control_plots.nyquist_plot(
initial_omega=0.01,
final_omega=100,
show=True,
color='b',
**kwargs,
)[源代码]

生成连续时间系统的奈奎斯特图。

参数:
系统SISOLinearTimeInvariant

要生成奈奎斯特图的LTI SISO系统。

initial_omegafloat, 可选

起始频率值。默认为 0.01。

最终_欧米伽float, 可选

结束频率值。默认为 100。

显示bool, 可选

如果为 True,则显示图表。默认值为 True。

颜色str, 可选

Nyquist 图的颜色。默认是 ‘b’(蓝色)。

网格bool, 可选

如果为 True,则显示网格线。默认值为 False。

**kwargs

用于自定义的额外关键字参数。

示例

>>> from sympy.abc import s
>>> from sympy.physics.control.lti import TransferFunction
>>> from sympy.physics.control.control_plots import nyquist_plot
>>> tf1 = TransferFunction(2*s**2 + 5*s + 1, s**2 + 2*s + 3, s)
>>> nyquist_plot(tf1)   

(png, hires.png, pdf)

../../../_images/control_plots-6.png

Nichols 图

control_plots.nichols_plot(
initial_omega=0.01,
final_omega=100,
show=True,
color='b',
**kwargs,
)[源代码]

生成LTI系统的尼科尔斯图。

参数:
系统SISOLinearTimeInvariant

要生成奈奎斯特图的LTI SISO系统。

initial_omegafloat, 可选

起始频率值。默认为 0.01。

最终_欧米伽float, 可选

结束频率值。默认为 100。

显示bool, 可选

如果为 True,则显示图表。默认值为 True。

颜色str, 可选

Nyquist 图的颜色。默认是 ‘b’(蓝色)。

网格bool, 可选

如果为 True,则显示网格线。默认值为 False。

**kwargs

用于自定义的额外关键字参数。

示例

>>> from sympy.abc import s
>>> from sympy.physics.control.lti import TransferFunction
>>> from sympy.physics.control.control_plots import nichols_plot
>>> tf1 = TransferFunction(1.5, s**2+14*s+40.02, s)
>>> nichols_plot(tf1)   

(png, hires.png, pdf)

../../../_images/control_plots-7.png