跳转到内容

控制系统/开源工具/Julia

来自维基教科书,一个开放的世界中的开放书籍


先决条件

[编辑 | 编辑源代码]

您需要安装 Julia,然后安装 ControlSystems.jl 包。建议您遵循官方 Julia 文档。Julia 可以用终端执行,但使用 Juno/Atom 或 Visual Studio Code 等 IDE 更加方便。

ControlSystems.jl 包需要使用以下命令加载

using ControlSystems

在执行函数之前。

在本课程中,假定源代码是在 Julia REPL 中键入的,以便立即打印结果。否则,可以使用以下命令打印结果:

print()

经典控制

[编辑 | 编辑源代码]

传递函数

[编辑 | 编辑源代码]

考虑以下传递函数

传递函数的创建类似于其他数值工具箱,使用分子和分母作为

num = [1, 2]      # Numerator
den = [3, 4, 5]   # Denominator
G = tf(num, den)  # Transfer function

REPL 响应创建的传递函数对象的概述

TransferFunction{ControlSystems.SisoRational{Int64}}
     s + 2
---------------
3*s^2 + 4*s + 5
Continuous-time transfer function model

极点和零点

[编辑 | 编辑源代码]

传递函数 极点使用以下命令计算

pole(G)

REPL 响应

 2-element Array{Complex{Float64},1}:
-0.6666666666666665 + 1.1055415967851332im
-0.6666666666666665 - 1.1055415967851332im

传递函数 零点使用以下命令计算

tzero(G)

得到

1-element Array{Float64,1}:
-2.0

函数

zpkdata(G)

将返回零点、极点和增益。

极点-零点图使用以下命令创建

pzmap(G)

脉冲和阶跃响应

[编辑 | 编辑源代码]

定义模拟时间和两个图表的标签非常方便

Tf = 20 # Final simulation time in seconds
impulse_lbl = "y(t) = g(t)" # Label for impulse response g(t)
step_lbl    = "y(t) = h(t)" # Label for step response h(t)

脉冲响应使用以下命令创建

impulseplot(G, Tf, label=impulse_lbl) # Impulse response

阶跃响应使用以下命令构建

stepplot(G, Tf, label=impulse_lbl) # Step response

Step Plot in Julia

伯德图和奈奎斯特图

[编辑 | 编辑源代码]

伯德图使用以下命令打印

bodeplot(G) # Bode plot

奈奎斯特图(没有增益圆)使用以下命令打印

nyquistplot(G, gaincircles=false) # Nyquist plot

可以使用布尔标志切换增益圆。

注意

如果只需要伯德图/奈奎斯特图的数值结果,而不需要可视化,则可以使用

bode(G)

nyquist(G)

现代控制

[编辑 | 编辑源代码]

状态空间表示

[编辑 | 编辑源代码]

极点配置

[编辑 | 编辑源代码]

进一步阅读

[编辑 | 编辑源代码]

Julia 主页

Julia 文档

ControlSystems.jl 手册

华夏公益教科书