控制系统图¶
此模块包含控制系统的常用绘图函数。如果用户需要绘图,则需要将 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,图表将被显示,否则将返回等效的 matplotlibplot对象。默认为 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)
- 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,图表将被显示,否则将返回等效的 matplotlibplot对象。默认为 True。- precint, 可选
点坐标值的小数点精度。默认为 8。
- 网格布尔值,可选
如果
True,绘图将带有网格。默认为 True。- 显示轴布尔值,可选
如果
True,将显示坐标轴。默认为 False。- freq_unit字符串,可选
- phase_unit字符串,可选
示例
>>> 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)
- 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内部使用,以获取绘制波德幅值图的数据。用户可以使用这些数据进一步分析系统的动态特性,或使用不同的后端/绘图模块进行绘图。- 参数:
- 返回:
- 元组(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相位图的数据。用户可以使用这些数据进一步分析系统的动态特性,或使用不同的后端/绘图模块进行绘图。- 参数:
- 返回:
- 元组(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,图表将被显示,否则将返回等效的 matplotlibplot对象。默认为 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)
- control_plots.impulse_response_numerical_data(
- prec=8,
- lower_limit=0,
- upper_limit=10,
- **kwargs,
返回单输入单输出连续时间系统脉冲响应图中各点的数值。默认情况下,使用自适应采样。如果用户希望改为获取均匀采样的响应,则应传递
adaptivekwarg 为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,图表将被显示,否则将返回等效的 matplotlibplot对象。默认为 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)
- control_plots.step_response_numerical_data(
- prec=8,
- lower_limit=0,
- upper_limit=10,
- **kwargs,
返回SISO连续时间系统阶跃响应图中各点的数值。默认情况下,使用自适应采样。如果用户希望获得均匀采样的响应,则应将
adaptivekwarg 传递为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,图表将被显示,否则将返回等效的 matplotlibplot对象。默认为 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)
- control_plots.ramp_response_numerical_data(
- slope=1,
- prec=8,
- lower_limit=0,
- upper_limit=10,
- **kwargs,
返回 SISO 连续时间系统斜坡响应图中点的数值。默认情况下,使用自适应采样。如果用户希望改为获取均匀采样的响应,则应传递
adaptivekwarg 为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)
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)