Анализ
Сведения об анализе надежности см. в разделе, посвященном RobustAndOptimalControl.jl.
#
ControlSystemsBase.damp
— Method
Wn, zeta, ps = damp(sys)
Вычисляет собственные частоты, Wn
, и коэффициенты демпфирования, zeta
, для полюсов, ps
, sys
.
#
ControlSystemsBase.dampreport
— Method
dampreport(sys)
Отображает отчет о полюсах, коэффициенте демпфирования, собственной частоте и постоянной времени системы sys
.
#
ControlSystemsBase.dcgain
— Function
dcgain(sys, ϵ=0)
Вычисляет статический коэффициент усиления (dcgain) системы sys
,
равный G(0) для систем с непрерывным временем и G(1) для систем с дискретным временем.
ϵ
можно указать для вычисления dcgain при малом возмущении в область устойчивости комплексной плоскости.
#
ControlSystemsBase.delaymargin
— Method
dₘ = delaymargin(G::LTISystem)
Возвращает запас устойчивости по запаздыванию dₘ. Для систем с дискретным временем запас устойчивости по запаздыванию нормализуется временем выборки, т. е. значение представляет собой запас в виде количества раз выборки. Поддерживает только системы SISO.
#
ControlSystemsBase.gangoffour
— Method
S, PS, CS, T = gangoffour(P, C; minimal=true)
gangoffour(P::AbstractVector, C::AbstractVector; minimal=true)
Если задана передаточная функция, описывающая объект P
, и передаточная функция, описывающая регулятор C
, вычисляет четыре передаточные функции в Большой четверке.
-
S = 1/(1+PC)
Функция чувствительности -
PS = (1+PC)\P
Воздействие нагрузки на измерительный сигнал -
CS = (1+PC)\C
Отношение шума измерения к сигналу управления -
T = PC/(1+PC)
Комплементарная функция чувствительности
Если minimal=true
, то minreal
будет применяться ко всем передаточным функциям.
#
ControlSystemsBase.gangofseven
— Method
S, PS, CS, T, RY, RU, RE = gangofseven(P,C,F)
Если заданы передаточные функции, описывающие объект P
, регулятор C
и блок с прямой связью F
, вычисляет четыре передаточные функции в Большой четверке и передаточные функции, соответствующие прямой связи.
-
S = 1/(1+PC)
Функция чувствительности -
PS = P/(1+PC)
-
CS = C/(1+PC)
-
T = PC/(1+PC)
Комплементарная функция чувствительности -
RY = PCF/(1+PC)
-
RU = CF/(1+P*C)
-
RE = F/(1+P*C)
#
ControlSystemsBase.margin
— Method
wgm, gm, wpm, pm = margin(sys::LTISystem, w::Vector; full=false, allMargins=false)
возвращает частоты для запасов по усилению, запасы по усилению, частоты для запасов по фазе, запасы по фазе.
Если задано !allMargins
, возвращает только наименьший запас.
Если задано full
, возвращает также fullPhase
. См. также описание delaymargin
и RobustAndOptimalControl.diskmargin
.
#
ControlSystemsBase.markovparam
— Method
markovparam(sys, n)
Вычисляет n
-й марковский параметр системы пространства состояний с дискретным временем sys
. Определяется следующим образом.
h(0) = D
h(n) = C*A^(n-1)*B
#
ControlSystemsBase.reduce_sys
— Method
reduce_sys(A::AbstractMatrix, B::AbstractMatrix, C::AbstractMatrix, D::AbstractMatrix, meps::AbstractFloat)
Реализует REDUCE в документе Эмами-Найни и Ван Доорена (Emami-Naeini & Van Dooren). Возвращает преобразованные матрицы A, B, C, D. Они пусты, если в них нет нулей.
#
ControlSystemsBase.relative_gain_array
— Method
relative_gain_array(A::AbstractMatrix; tol = 1.0e-15)
Справка: «On the Relative Gain Array (RGA) with Singular and Rectangular Matrices» Jeffrey Uhlmann https://arxiv.org/pdf/1805.10312.pdf
#
ControlSystemsBase.relative_gain_array
— Method
relative_gain_array(G, w::AbstractVector)
relative_gain_array(G, w::Number)
Вычисляет массив относительных коэффициентов усиления G
на частотах w
. G(iω) .* pinv(tranpose(G(iω)))
RGA можно использовать для поиска пар входа-выхода для управления MIMO с помощью индивидуально настраиваемых контуров. Создавайте пары входов и выходов таким образом, чтобы RGA(ωc) на частоте перехода стал как можно ближе к диагональному. Избегайте пар, в которых RGA(0) содержит отрицательные диагональные элементы.
-
Сумма абсолютных значений записей в RGA является хорошей мерой «истинного числа условий» G, наилучшего числа условий, которое может быть достигнуто путем масштабирования входных/выходных данных
G
, — Глэд, Люнг (Glad, Ljung). -
RGA инвариантен к масштабированию входных/выходных данных
G
. -
Если RGA содержит большие записи, система может быть чувствительна к ошибкам модели, — Скогестад (Skogestad), «Multivariable Feedback Control: Analysis and Design»
-
Неопределенность во входных каналах (диагональная входная неопределенность). Объекты с
большими элементами RGA в области частоты перехода принципиально сложны для управления из-за чувствительности к неопределенности входного сигнала (например, вызванной неопределенной или игнорируемой динамикой исполнительных механизмов). В частности, разъединители или другие инверсные регуляторы не должны применяться для объектов с большими элементами RGA.
-
Неопределенность элементов. Большие элементы RGA предполагают чувствительность к поэлементной неопределенности.
Однако на практике такая неопределенность может не проявиться из-за физических связей между элементами передаточной функции. Поэтому диагональная неопределенность входных данных (которая всегда присутствует) обычно больше затрагивает объекты с большими элементами RGA.
-
Массив относительных коэффициентов усиления вычисляется с помощью обобщенной инверсии с единичной согласованностью (UC). Справка: «On the Relative Gain Array (RGA) with Singular and Rectangular Matrices» Jeffrey Uhlmann https://arxiv.org/pdf/1805.10312.pdf
#
ControlSystemsBase.tzeros
— Method
tzeros(sys)
Вычисляет инвариантные нули системы sys
. Если sys
является минимальной реализацией, это также передаточные нули.
#
ControlSystemsBase.zpkdata
— Method
z, p, k = zpkdata(sys)
Вычислить нули, полюса и коэффициенты усиления системы sys
.
Возвращаемые значения
-
z
: Matrix{Vector{ComplexF64}}, (ny × nu) -
p
: Matrix{Vector{ComplexF64}}, (ny × nu) -
k
: Matrix{Float64}, (ny × nu)
#
ControlSystemsBase.are
— Method
are(::Continuous, A, B, Q, R)
Вычисляет «X» — решение алгебраического уравнения Риккати с непрерывным временем, определенного как A’X + XA - (XB)R{caret}-1(B’X) + Q = 0, где R является несингулярным.
В задаче ЛКР Q
связан с ухудшением состояния , а R
— с ухудшением управления . Дополнительные сведения см. в документе lqr
.
Использует MatrixEquations.arec
. Сведения об именованных аргументах см. в docstring для ControlSystemsBase.MatrixEquations.arec
. Обратите внимание, что они определяют входные аргументы в другом порядке.
#
ControlSystemsBase.are
— Method
are(::Discrete, A, B, Q, R; kwargs...)
Вычисляет X
— решение алгебраического уравнения Риккати с дискретным временем, определенного как A’XA - X - (A’XB)(B’XB + R){caret}-1(B’XA) + Q = 0, где Q>=0 и R>0.
В задаче ЛКР Q
связан с ухудшением состояния , а R
— с ухудшением управления . Дополнительные сведения см. в документе lqr
.
Использует MatrixEquations.ared
. Сведения об именованных аргументах см. в docstring для ControlSystemsBase.MatrixEquations.ared
. Обратите внимание, что они определяют входные аргументы в другом порядке.
#
ControlSystemsBase.balance
— Function
S, P, B = balance(A[, perm=true])
Вычисляет преобразование подобия T = S*P
, что дает B = T\A*T
, благодаря чему нормы строк и столбцов B
приблизительно эквивалентны. Если perm=false
, преобразование будет только масштабировать A
с помощью диагонали S
, но не перестанавливать A
(т. е. задавать P=I
).
#
ControlSystemsBase.balreal
— Method
sysr, G, T = balreal(sys::StateSpace)
Вычисляет сбалансированную реализацию системы sys, так что грэмианы наблюдаемости и достижимости сбалансированной системы равны и диагональны diagm(G)
. T
является преобразованием подобия между старым состоянием x
и новым состоянием z
, так что z = Tx
.
Справка: Varga A., Balancing-free square-root algorithm for computing singular perturbation approximations.
#
ControlSystemsBase.baltrunc
— Method
sysr, G, T = baltrunc(sys::StateSpace; atol = √ϵ, rtol=1e-3, n = nothing, residual = false)
Уменьшает размерность состояния путем вычисления сбалансированной реализации системы sys, так что грэмианы наблюдаемости и достижимости сбалансированной системы равны и диагональны diagm(G)
и усечения ее до порядка n
. Если значение n
не указано, оно выбирается таким образом, что удаляются все состояния, соответствующие сингулярным значениям меньше atol
и меньше rtol σmax
.
T
является матрицей проекций между старым состоянием x
и новым состоянием z
, такой, что z = Tx
. T
в общем случае будет неквадратной матрицей.
Если residual = true
, совпадающее статическое усиление достигается за счет «остаточности», т. е. задания
где индексы 1 и 2 соответствуют остаточному и усеченному состояниям.
См. также описание gram
, balreal
.
Glad, Ljung, Reglerteori: Flervariabla och Olinjära metoder.
Более сложный вариант упрощения модели см. в документе RobustAndOptimalControl.jl — упрощение модели.
Расширенная справка
Примечание. Вычисления грэмианов чувствительны к масштабированию входных-выходных сигналов. Чтобы результат численной балансировки, вычисления грэмиана или усечения MIMO-систем был значимым, необходимо разумно масштабировать входные и выходные сигналы системы. Распространенным (но не единственным) подходом является следующий.
-
Выходные сигналы масштабируются таким образом, чтобы максимально допустимая ошибка управления, максимально ожидаемое эталонное отклонение или максимально ожидаемое отклонение были равны единице.
-
Входные переменные масштабируются так, чтобы величина была равна единице. Для этого каждая переменная делится на ее максимальное ожидаемое или допустимое изменение, т. е. .
Без такого масштабирования результат балансировки будет зависеть от единиц измерения входного и выходного сигналов. Например, изменение единиц измерения для одного выходного сигнала с метра на миллиметр сделает его в 1000 раз более важным.
#
ControlSystemsBase.controllability
— Method
controllability(A, B; atol, rtol)
controllability(sys; atol, rtol)
Проверяет управляемость пары (A, B)
или sys
с помощью теста PHB.
Возвращаемое значение содержит поле iscontrollable
, которое равно true
, если условие ранга выполняется при всех собственных значениях A
, и false
в противном случае. Возвращаемая структура также содержит ранг и наименьшее сингулярное значение при каждом отдельном собственном значении A
в полях ranks
и sigma_min
.
Технически эта функция проверяет управляемость из источника, называемую также достижимостью.
#
ControlSystemsBase.covar
— Method
P = covar(sys, W)
Вычисляет стационарную ковариацию P = E[y(t)y(t)']
вывода y
модели StateSpace
sys
, управляемой белым гауссовским шумом w
с ковариацией E[w(t)w(τ)]=W*δ(t-τ)
(δ — дельта Дирака).
Замечание. Если sys
неустойчива, результирующая ковариация представляет собой матрицу Inf
. Записи, соответствующие прямому прохождению (D__W__D' .!= 0), будут равны Inf
для систем с непрерывным временем.
#
ControlSystemsBase.ctrb
— Method
ctrb(A, B)
ctrb(sys)
Вычисляет матрицу управляемости для системы, описываемой (A, B)
или sys
.
Обратите внимание, что проверка управляемости путем вычисления ранга из ctrb
не является наиболее численно точным способом, лучше проверить, является ли gram(sys, :c)
положительно определенным, или вызвать функцию controllability
.
#
ControlSystemsBase.gram
— Method
gram(sys, opt; kwargs...)
Вычисляет грэмиан системы sys
. Если opt
имеет значение :c
, вычисляет грэмиан управляемости. Если opt
имеет значение :o
, вычисляет грэмиан наблюдаемости.
Расширенная справка
Примечание. Вычисления грэмианов чувствительны к масштабированию входных-выходных сигналов. Чтобы результат численной балансировки, вычисления грэмиана или усечения MIMO-систем был значимым, необходимо разумно масштабировать входные и выходные сигналы системы. Распространенным (но не единственным) подходом является следующий.
-
Выходные сигналы масштабируются таким образом, чтобы максимально допустимая ошибка управления, максимально ожидаемое эталонное отклонение или максимально ожидаемое отклонение были равны единице.
-
Входные переменные масштабируются так, чтобы величина была равна единице. Для этого каждая переменная делится на ее максимальное ожидаемое или допустимое изменение, т. е. .
Без такого масштабирования результат балансировки будет зависеть от единиц измерения входного и выходного сигналов. Например, изменение единиц измерения для одного выходного сигнала с метра на миллиметр сделает его в 1000 раз более важным.
#
ControlSystemsBase.grampd
— Method
U = grampd(sys, opt; kwargs...)
Возвращает коэффициент Холецкого U
грэмиана системы sys
. Если opt
имеет значение :c
, вычисляет грэмиан управляемости G = U*U'
. Если opt
имеет значение :o
, вычисляет грэмиан наблюдаемости G = U’U
.
Получает объект Cholesky
по коэффициенту Cholesky(U)
для грэмиана наблюдаемости.
Использует MatrixEquations.plyapc/plyapd
. Сведения об именованных аргументах см. в docstring для ControlSystemsBase.MatrixEquations.plyapc/plyapd
.
#
ControlSystemsBase.hinfnorm
— Method
Ninf, ω_peak = hinfnorm(sys; tol=1e-6)
Вычисляет норму H∞ Ninf
LTI-системы sys
, а также частоту ω_peak
, на которой достигается коэффициент усиления Ninf.
Ninf := sup_ω σ_max[sys(iω)]
если G
стабилен (σ_max — это наибольшее сингулярное значение) := Inf
если G
нестабилен
tol
— это необязательный именованный аргумент, указывающий желаемую относительную точность для вычисляемой нормы H∞ (не является абсолютным сертификатом).
sys
при необходимости сначала преобразуется в модель пространства состояний.
Вычисление нормы L∞ с непрерывным временем реализует «двухшаговый алгоритм». См. документ: N.A. Bruinsma and M. Steinbuch, 'A fast algorithm to compute the H∞-norm of a transfer function matrix', Systems and Control Letters (1990), pp. 287-293.
Сведения о версии с дискретным временем см. в документе: P. Bongers, O. Bosgra, M. Steinbuch, 'L∞-norm calculation for generalized state space systems in continuous and discrete time', American Control Conference, 1991.
См. также описание linfnorm
.
#
ControlSystemsBase.innovation_form
— Method
sysi = innovation_form(sys, R1, R2[, R12])
sysi = innovation_form(sys; sysw=I, syse=I, R1=I, R2=I)
Принимает систему
x' = Ax + Bu + w ~ R1 y = Cx + Du + e ~ R2
и возвращает систему
x' = Ax + Kv y = Cx + v
где v
является инновационной последовательностью.
Если задано sysw
(syse
), в качестве ковариации используется ковариация, полученная в результате фильтрации шума с R1
(R2
) по sysw
(syse
).
См. Stochastic Control, Chapter 4, Åström
#
ControlSystemsBase.innovation_form
— Method
sysi = innovation_form(sys, K)
Принимает систему
x' = Ax + Bu + Kv y = Cx + Du + v
и возвращает систему
x' = Ax + Kv y = Cx + v
где v
является инновационной последовательностью.
См. Stochastic Control, Chapter 4, Åström
#
ControlSystemsBase.linfnorm
— Method
Ninf, ω_peak = linfnorm(sys; tol=1e-6)
Вычисляет норму L∞ Ninf
LTI-системы sys
, а также частоту ω_peak
, на которой достигается усиление Ninf
.
Ninf := sup_ω σ_max[sys(iω)]
(σ_max обозначает наибольшее сингулярное значение).
tol
— это необязательный именованный аргумент, указывающий желаемую относительную точность для вычисляемой нормы L∞ (не является абсолютным сертификатом).
sys
при необходимости сначала преобразуется в модель пространства состояний.
Вычисление нормы L∞ с непрерывным временем реализует «двухшаговый алгоритм». См. документ: N.A. Bruinsma and M. Steinbuch, 'A fast algorithm to compute the H∞-norm of a transfer function matrix', Systems and Control Letters (1990), pp. 287-293.
Сведения о версии с дискретным временем см. в документе: P. Bongers, O. Bosgra, M. Steinbuch, 'L∞-norm calculation for generalized state space systems in continuous and discrete time', American Control Conference, 1991.
См. также описание hinfnorm
.
#
ControlSystemsBase.observability
— Method
observability(A, C; atol, rtol)
Проверяет наблюдаемость пары (A, C)
или sys
с помощью теста PHB.
Возвращаемое значение содержит поле isobservable
, которое равно true
, если условие ранга выполняется при всех собственных значениях A
, и false
в противном случае. Возвращаемая структура также содержит ранг и наименьшее сингулярное значение при каждом отдельном собственном значении A
в полях ranks
и sigma_min
.
#
ControlSystemsBase.observer_controller
— Method
cont = observer_controller(sys, L::AbstractMatrix, K::AbstractMatrix; direct=false)
Если direct = false
Возвращает observer_controller cont
, заданный с помощью ss(A - B*L - K*C + K*D*L, K, L, 0)
такой, что feedback(sys, cont)
порождает замкнутую систему с собственными значениями, заданными A-KC
и A-BL
.
Этот регулятор не имеет прямой составляющей и соответствует обратной связи по состоянию, действующей для состояния, вычисляемого с помощью observer_predictor
. Эта форма используется, если вычисленный управляющий сигнал применяется в следующий момент выборки, или с другим большим запаздыванием по отношению к измерению, поступающему в регулятор.
Источник: «Computer-Controlled Systems» Eq 4.37
Если direct = true
Возвращает регулятор наблюдателя cont
, заданный с помощью ss((I-KC)(A-BL), (I-KC)(A-BL)K, L, LK)
такой, что feedback(sys, cont)
порождает замкнутую систему с собственными значениями, заданными A-BL
и A-BL-KC
. Этот регулятор имеет прямую составляющую и соответствует обратной связи по состоянию, действующей для состояния, вычисляемого с помощью observer_filter
. Эта форма используется, если вычисленный управляющий сигнал применяется сразу после получения измерения. Этот вариант, как правило, имеет лучшие показатели производительности, чем вариант без прямой составляющей.
Источник: Источник: «Computer-Controlled Systems», стр. 140, и «Computer-Controlled Systems», стр. 162 prob 4.7
Аргументы
-
sys
: модель системы. -
L
: коэффициент усиления обратной связи по состояниюu = -Lx
. -
K
: коэффициент усиления наблюдателя.
См. также описание observer_predictor
и innovation_form
.
#
ControlSystemsBase.observer_filter
— Method
observer_filter(sys, K; output_state = false)
Возвращает фильтр наблюдателя
с входным уравнением [(I - KC)B K] * [u(k-1); y(k)]
.
Обратите внимание на временные индексы в уравнениях. Фильтр предполагает, что пользователь передает текущее значение , но прошлым является , то есть данный фильтр используется для оценки состояния до того, как был применен текущий управляющий входной сигнал. Это приводит к тому, что регулятор с обратной связью по состоянию, действующий для оценки, созданной этим наблюдателем, имеет прямую составляющую.
Это аналогично observer_predictor
, но, в отличие от предиктора, выходные данные фильтра зависят от текущего измерения, тогда как выходные данные предиктора зависят только от прошлых измерений.
Фильтр наблюдателя эквивалентен фильтру observer_predictor
для систем с непрерывным временем.
Источник: «Computer-Controlled Systems», Eq 4.32
#
ControlSystemsBase.observer_predictor
— Method
observer_predictor(sys::AbstractStateSpace, K; h::Int = 1, output_state = false)
observer_predictor(sys::AbstractStateSpace, R1, R2[, R12]; output_state = false)
Если sys
непрерывно, возвращается система предикторов наблюдателя
с входным уравнением [B-KD K] * [u; y]
.
Если sys
дискретный, может быть задан горизонт прогнозирования h
. В этом случае для прогнозирования y(t)
используются измерения до времени t-h
включительно и входные данные до времени t
включительно.
Если заданы ковариационные матрицы R1, R2
, коэффициент усиления Калмана K
вычисляется с помощью kalman
.
Если output_state
имеет значение true, выходными данными будет оценка состояния x̂
, а не оценка выхода ŷ
.
См. также innovation_form
, observer_controller
и observer_filter
.
#
ControlSystemsBase.obsv
— Function
obsv(A, C, n=size(A,1))
obsv(sys, n=sys.nx)
Вычисляет матрицу наблюдаемости со строками n
для системы, описываемой (A, C)
или sys
. При указании необязательного параметра n > sys.nx
возвращается расширенная матрица наблюдаемости.
Обратите внимание, что проверка наблюдаемости путем вычисления ранга из obsv
не является наиболее численно точным способом, лучше проверить, является ли gram(sys, :o)
положительно определенным, или вызвать функцию observability
.
#
ControlSystemsBase.plyap
— Method
Xc = plyap(sys::AbstractStateSpace, Ql; kwargs...)
Решатель Ляпунова, который принимает коэффициент Холецкого L
для Q
и возвращает треугольную матрицу Xc
такую, что Xc*Xc' = X
.
#
ControlSystemsBase.similarity_transform
— Method
syst = similarity_transform(sys, T; unitary=false)
Выполняет преобразование подобия T : Tx̃ = x
для sys
следующим образом
à = T⁻¹AT B̃ = T⁻¹ B C̃ = CT D̃ = D
Если unitary=true
, предполагается, что T
является унитарной, а вместо обратного значения используется сопряжение матрицы. См. также описание balance_statespace
.
#
ControlSystemsBase.time_scale
— Method
time_scale(sys::AbstractStateSpace{Continuous}, a; balanced = false)
time_scale(G::TransferFunction{Continuous}, a; balanced = true)
Изменяет масштаб оси времени (изменяет единицу измерения времени) sys
.
Для систем, в которых доминирующие постоянные времени очень далеки от 1, например в электронике, изменение масштаба оси времени может оказаться полезным для численной производительности, в частности для моделирования в режиме непрерывного времени.
Масштабирование времени для функции с преобразованием Лапласа можно представить следующим образом.
Именованный аргумент balanced
указывает, применять или нет сбалансированное масштабирование к матрицам B
и C
. Для систем с пространством состояний используется значение по умолчанию false, поскольку при этом изменяется представление состояний, масштабироваться будет только B
. Для передаточных функций значением по умолчанию является true.
Пример:
В следующем примере показано, как система с постоянной времени порядка одной микросекунды масштабируется таким образом, что постоянная времени становится равной 1, т. е. единица измерения времени меняется с секунд на микросекунды.
Gs = tf(1, [1e-6, 1]) # шкала времени в микросекундах, моделируемая в секундах
Gms = time_scale(Gs, 1e-6) # Изменение на шкалу времени в микросекундах
Gms == tf(1, [1, 1]) # В Gms в качестве единицы времени теперь используются микросекунды
Следующий пример иллюстрирует, как изменяется ось времени при моделировании во временной области в зависимости от масштаба времени.
t = 0:0.1:50 # исходная временная ось
a = 10 # Коэффициент масштабирования
sys1 = ssrand(1,1,5)
res1 = step(sys1, t) # Выполнение исходного моделирования
sys2 = time_scale(sys, a) # Масштабирование времени
res2 = step(sys2, t ./ a) # Моделирование на масштабированной оси времени, обратите внимание на `1/a`
isapprox(res1.y, res2.y, rtol=1e-3, atol=1e-3)
#
LinearAlgebra.lyap
— Method
lyap(A, Q; kwargs...)
Вычисляет решение X
дискретного уравнения Ляпунова AXA' - X + Q = 0
.
Использует MatrixEquations.lyapc / MatrixEquations.lyapd
. Сведения об именованных аргументах см. в docstring для ControlSystemsBase.MatrixEquations.lyapc / ControlSystemsBase.MatrixEquations.lyapd
.
#
LinearAlgebra.norm
— Function
norm(sys, p=2; tol=1e-6)
norm(sys)
или norm(sys,2)
вычисляет норму H2 LTI-системы sys
.
norm(sys, Inf)
вычисляет норму H∞ LTI-системы sys
. Норма H∞ совпадает с нормой L∞ для устойчивых систем, а Inf — для неустойчивых. Если требуется также частота пикового усиления, следует использовать функцию hinfnorm
. Дополнительные сведения см. в описании hinfnorm
.
tol
— это необязательный именованный аргумент, используемый только для вычисления норм L∞. Он представляет желаемую относительную точность для вычисляемой нормы L∞ (не является абсолютным сертификатом).
sys
при необходимости сначала преобразуется в модель StateSpace
.
#
ControlSystemsBase.balance_statespace
— Function
A, B, C, T = balance_statespace{S}(A::Matrix{S}, B::Matrix{S}, C::Matrix{S}, perm::Bool=false)
sys, T = balance_statespace(sys::StateSpace, perm::Bool=false)
Вычисляет балансирующее преобразование T
, которое пытается масштабировать систему так, чтобы нормы строк и столбцов [T__A/T T__B; C/T 0] были примерно равны. Если perm=true
, разрешено переупорядочивать состояния в A
.
Обратное значение sysb, T = balance_statespace(sys)
задается значением similarity_transform(sysb, T)
.
Это не то же самое, что и поиск сбалансированной реализации с равными и диагональными грэмианами наблюдаемости и достижимости. См. описание balreal
.