Функции построения графиков

Для построения любых графиков пользователю необходимо вручную загрузить библиотеку Plots.jl, например, путем вызова using Plots.

Для построения графиков результатов во временной области, например ступенчатых и импульсных характеристик, специальных функций нет. Вместо этого просто вызовите plot для структуры (ControlSystemsBase.SimResult), возвращенной методом lsim, step, impulse и т. д.

# ControlSystemsBase.bodeplotFunction

fig = bodeplot(sys, args...)
bodeplot(LTISystem[sys1, sys2...], args...; plotphase=true, balance = true, kwargs...)

Создает график Боде для систем LTISystem. Можно предоставить вектор частот w, если это необходимо. Сведения о том, как изменить шкалу амплитуды, см. в описании метода setPlotScale. Шкала амплитуды по умолчанию — log10 (абсолютная шкала). - Если hz=true, по оси x графика откладываются герцы, но входной вектор частот по-прежнему интерпретируется как выраженный в рад/с.

  • balance: перед построением графика применительно к системе вызывается функция balance_statespace.

Аргументы kwargs передаются в качестве аргумента в RecipesBase.plot.

# ControlSystemsBase.gangoffourplotMethod

fig = gangoffourplot(P::LTISystem, C::LTISystem; minimal=true, plotphase=false, Ms_lines = [1.0, 1.25, 1.5], Mt_lines = [], sigma = true, kwargs...)

График четырех основных параметров.

sigma определяет, используется ли sigmaplot вместо bodeplot для многомерных S и T. Аргументы kwargs передаются в качестве аргумента в RecipesBase.plot.

# ControlSystemsBase.marginplotFunction

fig = marginplot(sys::LTISystem [,w::AbstractVector];  balance=true, kwargs...)
marginplot(sys::Vector{LTISystem}, w::AbstractVector;  balance=true, kwargs...)

Строит график всех запасов устойчивости по амплитуде и фазе для систем sys.

  • При необходимости можно предоставить вектор частот w.

  • balance: перед построением графика применительно к системе вызывается функция balance_statespace.

Аргументы kwargs передаются в качестве аргумента в RecipesBase.plot.

# ControlSystemsBase.nicholsplotFunction

fig = nicholsplot{T<:LTISystem}(systems::Vector{T}, w::AbstractVector; kwargs...)

Создает график Никольса для систем LTISystem. Можно предоставить вектор частот w, если это необходимо.

Именованные аргументы:

text = true
Gains = [12, 6, 3, 1, 0.5, -0.5, -1, -3, -6, -10, -20, -40, -60]
pInc = 30
sat = 0.4
val = 0.85
fontsize = 10

pInc определяет приращение в градусах между линиями фаз.

sat ∈ [0,1] определяет насыщенность линий коэффициентов усиления.

val ∈ [0,1] определяет яркость линий коэффициентов усиления.

В функцию, строящую графики систем, передаются дополнительные именованные аргументы, с помощью которых можно указывать цвета, начертание линий и т. д. с использованием обычного синтаксиса RecipesBase.jl.

Данная функция основана на коде, который распространяется по лицензии BSD из двух пунктов: © Will Robertson, 2011 г. © Philipp Allgeuer, 2011 г.

# ControlSystemsBase.nyquistplotFunction

fig = nyquistplot(sys;                Ms_circles=Float64[], Mt_circles=Float64[], unit_circle=false, hz=false, critical_point=-1, kwargs...)
nyquistplot(LTISystem[sys1, sys2...]; Ms_circles=Float64[], Mt_circles=Float64[], unit_circle=false, hz=false, critical_point=-1, kwargs...)

Создает график Найквиста для систем LTISystem. Можно предоставить вектор частот w, если это необходимо.

  • unit_circle: должна ли отображаться единичная окружность. Кривая Найквиста пересекает единичную окружность в точке, соответствующей частоте единичного усиления.

  • Ms_circles: рисует окружности, соответствующие данным уровням чувствительности (окружность вокруг --1 радиусом 1/Ms). Ms_circles можно задать в виде числа или вектора чисел. Схема за пределами этой окружности имеет запас устойчивости по фазе не менее 2asin(1/(2Ms)) рад и запас устойчивости по усилению не менее Ms/(Ms-1).

  • Mt_circles: рисует окружности, соответствующие данным уровням комплементарной чувствительности. Mt_circles можно задать в виде числа или вектора чисел.

  • critical_point: точка на вещественной оси, отмеченная как критическая для обходов по контуру.

  • Если hz=true, информация при наведении указателя мыши отображается в герцах, но входной вектор частот по-прежнему интерпретируется как выраженный в рад/с.

  • balance: перед построением графика применительно к системе вызывается функция balance_statespace.

Аргументы kwargs передаются в качестве аргумента в plot.

# ControlSystemsBase.pzmapFunction

fig = pzmap(fig, system, args...; hz = false, kwargs...)

Создает карту корней и полюсов для систем LTISystem в фигуре fig; аргументы args и kwargs в команду рисования графика scatter.

Чтобы настроить единичную окружность, рисуемую для дискретных систем, измените атрибуты линии, например linecolor=:red.

Если hz имеет значение true, все полюсы и нули масштабируются на 1/2π.

# ControlSystemsBase.rgaplotFunction

rgaplot(sys, args...; hz=false)
rgaplot(LTISystem[sys1, sys2...], args...; hz=false, balance=true)

Строит график элементов массива относительных коэффициентов усиления для систем LTISystem. При необходимости можно предоставить вектор частот w.

  • Если hz=true, по оси x графика откладываются герцы, но входной вектор частот по-прежнему интерпретируется как выраженный в рад/с.

  • balance: перед построением графика применительно к системе вызывается функция balance_statespace.

Аргументы kwargs передаются в качестве аргумента в Plots.plot.

# ControlSystemsBase.setPlotScaleMethod

setPlotScale(str)

Задает масштаб амплитуды по умолчанию в bodeplot и sigmaplot. str должно быть "dB" или "log10". Если масштаб не выбран, по умолчанию используется "log10".

# ControlSystemsBase.sigmaplotFunction

sigmaplot(sys, args...; hz=false balance=true, extrema)
sigmaplot(LTISystem[sys1, sys2...], args...; hz=false, balance=true, extrema)

Строить график сингулярных значений частотной характеристики для систем LTISystem. При необходимости можно предоставить вектор частот w.

  • Если hz=true, по оси x графика откладываются герцы, но входной вектор частот по-прежнему интерпретируется как выраженный в рад/с.

  • balance: перед построением графика применительно к системе вызывается функция balance_statespace.

  • extrema: на графике рисуются только максимальное и минимальное сингулярные значения.

Аргументы kwargs передаются в качестве аргумента в Plots.plot.

Примеры

График Боде

bode
tf1 = tf([1],[1,1])
tf2 = tf([1/5,2],[1,1,1])
sys = [tf1 tf2]
ws = exp10.(range(-2,stop=2,length=200))
bodeplot(sys, ws)

График сигма-функции

sigma
sys = ss([-1 2; 0 1], [1 0; 1 1], [1 0; 0 1], [0.1 0; 0 -0.2])
sigmaplot(sys)

Запас устойчивости

margin
tf1 = tf([1],[1,1])
tf2 = tf([1/5,2],[1,1,1])
ws = exp10.(range(-2,stop=2,length=200))
marginplot([tf1, tf2], ws)

График «большой четверки»

gangoffour
tf1 = tf([1.0],[1,1])
gangoffourplot(tf1, [tf(1), tf(5)])

График Найквиста

nyquist
sys = ss([-1 2; 0 1], [1 0; 1 1], [1 0; 0 1], [0.1 0; 0 -0.2])
ws = exp10.(range(-2,stop=2,length=200))
nyquistplot(sys, ws, Ms_circles=1.2, Mt_circles=1.2)

График Никольса

nichols
tf1 = tf([1],[1,1])
ws = exp10.(range(-2,stop=2,length=200))
nicholsplot(tf1,ws)

График полюсов и нулей

pzmap
tf2 = tf([1/5,2],[1,1,1])
pzmap(c2d(tf2, 0.1))

График корневого годографа

rlocus

График характеристики lsim

lsim
sys = ss([-1 2; 0 1], [1 0; 1 1], [1 0; 0 1], [0.1 0; 0 -0.2])
sysd = c2d(sys, 0.01)
L = lqr(sysd, [1 0; 0 1], [1 0; 0 1])
ts = 0:0.01:5
plot(lsim(sysd, (x,i)->-L*x, ts; x0=[1;2]), plotu=true)

График импульсной характеристики

impulse
tf1 = tf([1],[1,1])
tf2 = tf([1/5,2],[1,1,1])
sys = [tf1 tf2]
sysd = c2d(ss(sys), 0.01)
plot(impulse(sysd, 5), l=:blue)

График ступенчатой характеристики

step
tf1 = tf([1],[1,1])
tf2 = tf([1/5,2],[1,1,1])
sys = [tf1 tf2]
sysd = c2d(ss(sys), 0.01)
res = step(sysd, 5)
plot(res, l=(:dash, 4))
# plot!(stepinfo(step(sysd[1,1], 5))) # добавляет на график дополнительную информацию