Engee 文档
Notebook

带有一个变量参数的模型阵列

本例演示了如何创建一维传递函数数组。在数组中,不同模型的传递函数参数各不相同。您可以使用这种数组来研究参数变化对模型的影响,例如进行敏感性分析。

In [ ]:
import Pkg
Pkg.add("ControlSystems")
In [ ]:
using ControlSystems
s = tf('s');

创建一个传递函数阵列,表示以下低通滤波器在三个截止频率值下的情况$a$ 。

$$ F\left( s \right) = \frac{a}{{s + a}} $$

创建表示截止频率为$a$ = 3、5 和 7 的滤波器的传递函数模型。

In [ ]:
a = [3, 5, 7]

F_array = [ tf([a[i]],[1,a[i]]) for i=1:length(a) ]
Out[0]:
3-element Vector{TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}}:
 TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}
  3
-----
s + 3

Continuous-time transfer function model
 TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}
  5
-----
s + 5

Continuous-time transfer function model
 TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}
  7
-----
s + 7

Continuous-time transfer function model

通过包含法,我们可以创建一个参数可变的传递函数向量。

让我们构建F_array 的博德图。

In [ ]:
bodeplot(F_array)
Out[0]:

当您对模型数组使用bodeplot 等分析命令时,所得到的图将显示数组中每个模型的响应。这样,您就可以看到参数变化导致的响应范围。

矢量中的模型可以组合成多输入多输出(MIMO)系统。

将系统阵列转换为多维系统

我们可以使用函数append 从系统向量创建一个对角多维系统。结果就是一个有三个输入和三个输出的系统。

In [ ]:
P1 = append(F_array[1], F_array[2], F_array[3])
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}
Input 1 to output 1
  3
-----
s + 3

Input 1 to output 2
0
-
1

Input 1 to output 3
0
-
1

Input 2 to output 1
0
-
1

Input 2 to output 2
  5
-----
s + 5

Input 2 to output 3
0
-
1

Input 3 to output 1
0
-
1

Input 3 to output 2
0
-
1

Input 3 to output 3
  7
-----
s + 7

Continuous-time transfer function model

另一个函数array2mimo 可以创建一个有一个输入和三个输出的系统。

In [ ]:
P2 = array2mimo(F_array)
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}
Input 1 to output 1
  3
-----
s + 3

Input 1 to output 2
  5
-----
s + 5

Input 1 to output 3
  7
-----
s + 7

Continuous-time transfer function model

要返回系统阵列或从多输入多输出系统中获取一个矢量,可以使用函数getindex

In [ ]:
sys_array = getindex.(Ref(P2), 1:P2.ny, (1:P2.nu)')
Out[0]:
3×1 Matrix{TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}}:
 TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}
  3
-----
s + 3

Continuous-time transfer function model
 TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}
  5
-----
s + 5

Continuous-time transfer function model
 TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}
  7
-----
s + 7

Continuous-time transfer function model

输出

我们已经了解了如何创建一个参数不断变化的模型数组。我们还学习了哪些函数可以让您从数组转换到多输入多输出系统,然后再转换回来。