跳轉到內容

控制系統/開源工具/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 手冊

華夏公益教科書