Векторная авторегрессионная модель с внешними входами (VARX)
В некоторых областях модели VARX получили широкое распространение. Модели VARX являются особым случаем общих линейных моделей следующей формы:
Здесь мы построим модель VARX
и оценим регулярную модель в пространстве состояний.
using ControlSystemIdentification, Plots
A1 = 0.3randn(2,2)
A2 = 0.3randn(2,2)
B1 = randn(2,2)
N = 300
Y = [randn(2), randn(2)]
u = randn(2, N)
for i = 3:N
yi = A1*Y[i-1] + A2*Y[i-2] + B1*u[:,i-1]
push!(Y, yi)
end
y = hcat(Y...)
d = iddata(y, u, 1)
InputOutput data of length 300, 2 outputs, 2 inputs, Ts = 1
Теперь мы оценим две модели: одну методом идентификации на основе подпространства (subspaceid
), а другую методом на основе погрешности прогнозирования (newpem
). Оцененная модель VARX имела состояние порядка 4 и два запаздывания , каждое из которых представляет собой вектор длиной 2, поэтому ниже мы оцениваем модели порядка 4.
model1 = subspaceid(d, 4, zeroD=true)
model2, x0 = newpem(d, 4)
plot(
simplot(d, model1, title="Simulation subspaceid", layout=2),
simplot(d, model2, x0, title="Simulation PEM", layout=2),
titlefontsize=10,
)
Моделирование показывает, что степень соответствия близка к 100 %, то есть общая линейная модель идеально соответствует модели VARX. Однако ее структура отличается от структуры исходной модели VARX.
Оцененные модели в форме пространства состояний можно преобразовывать в передаточные функции MIMO (полиномиальные модели) путем вызова tf
:
using ControlSystemsBase: tf
tf(model2.sys)
TransferFunction{ControlSystemsBase.Discrete{Float64}, ControlSystemsBase.SisoRational{Float64}}
Input 1 to output 1
-1.0004794296702122z^3 - 0.056433281189662704z^2 + 0.16348625987257576z + 1.5067403921764644e-11
-----------------------------------------------------------------------------------------------------
1.0z^4 + 0.8179437966516445z^3 + 0.20640209880928453z^2 - 0.03520318746049224z - 0.014728175067300543
Input 1 to output 2
0.5638542903384767z^3 + 0.4588249716841635z^2 - 0.0030804325899893015z - 4.187018787238372e-12
-----------------------------------------------------------------------------------------------------
1.0z^4 + 0.8179437966516445z^3 + 0.20640209880928453z^2 - 0.03520318746049224z - 0.014728175067300543
Input 2 to output 1
-1.0198709364933753z^3 + 0.10341208581445258z^2 + 0.20490387717802416z + 1.2144785177525819e-11
-----------------------------------------------------------------------------------------------------
1.0z^4 + 0.8179437966516445z^3 + 0.20640209880928453z^2 - 0.03520318746049224z - 0.014728175067300543
Input 2 to output 2
0.9529762025159154z^3 + 0.6650235617021986z^2 + 0.03022622860243869z - 2.1761203949921537e-12
-----------------------------------------------------------------------------------------------------
1.0z^4 + 0.8179437966516445z^3 + 0.20640209880928453z^2 - 0.03520318746049224z - 0.014728175067300543
Sample Time: 1.0 (seconds)
Discrete-time transfer function model