Документация 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

Чтобы обратно вернуться к массиву систем или получить вектор из MIMO системы, можно применить функцию 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

Вывод

Мы рассмотрели, как создать массив моделей с изменяющимся параметром.Также узнали, какие функции позволяют перейти от массива к MIMO системе и обратно.