Примечательные отличия от других языков
Если у вас нет опыта работы с языком программирования Julia, рекомендуем посетить страницу с документацией по примечательным отличиям Julia от других языков программирования.
Далее на этой странице будут перечислены примечательные отличия ControlSystems.jl от другого программного обеспечения для проектирования систем управления.
-
Имена функций для расчета полюсов и нулей систем имеют форму множественного числа, то есть
polesвместоpoleиtzerosвместоtzero. -
При моделировании с помощью методов
lsim,stepиimpulseвозвращаются массивы со временем во втором, а не первом измерении (также относится кfreqresp, bode, nyquistи т. д.). В Julia применяется размещение в памяти по столбцам. Такой выбор был обусловлен соображениями производительности. -
Сигнатуры функций
are,lqrиkalmanв Julia немного отличаются от других языков. Более сложные функции для работы с ЛКГ содержатся в пакете RobustAndOptimalControl.jl. -
При моделировании с помощью методов
lsim,step,impulseи т. д. возвращается структура, график которой можно построить. Сами по себе эти функции никогда не строят графики. -
Функции
bode,nyquistи т. д. никогда не выдают графики. Вместо этого см. описание функцийbodeplot,nyquistplotи т. д. -
В Julia функциональность часто разделяется на несколько отдельных пакетов. Поэтому, чтобы получить все, что вам нужно, может потребоваться установить и использовать дополнительные пакеты. Коллекция пакетов, связанных с системами управления, представлена на странице Ecosystem.
-
В Julia значения
1и1.0имеют разные типы, и в ControlSystemsBase.jl учитываются типы, выбранные пользователем. Например,tf(1, [1, 1])— это передаточная функция с целочисленными коэффициентами, а при вызовеtf(1.0, [1, 1])все коэффициенты будут продвинуты доFloat64. -
Матрицы и векторы — это разные типы в Julia, в частности, векторы столбцов и векторы строк не являются взаимозаменяемыми.
-
В Julia код часто допускает автоматическое дифференцирование. При работе с ControlSystems.jl мы рекомендуем попробовать использовать ForwardDiff.jl для автоматического дифференцирования. Пример можно найти в разделе Automatic Differentiation.
-
Исходный код Julia зачастую очень легко читается. Если вы хотите узнать, как реализована функция, найти исходный код могут помочь макросы
@editили@less. -
Если при работе с пакетом Julia возникла проблема (ошибка), вы можете сообщить о ней на странице пакета в GitHub. Часто ошибки исправляются оперативно. Чтобы сообщить о проблеме в ControlSystems.jl, щелкните здесь. Благодарим за помощь в улучшении нашего программного обеспечения с открытым исходным кодом!
-
Код Julia компилируется непосредственно перед его первым вызовом. Из-за этого могут происходить заметные задержки, а пакеты — долго загружаться. Чтобы ускорить загрузку ControlSystems.jl, можно создать образ системы, включающий пакет ControlSystems.jl, с помощью PackageCompiler.jl. Дополнительные сведения см. ниже в разделе Precompilation for faster load times.
Если вы обнаружили какие-либо еще примечательные отличия ControlSystems.jl от другого программного обеспечения, связанного с системами управления, отправьте запрос на вытягивание, чтобы добавить их в список выше. Чтобы отправить запрос на вытягивание, щелкните значок «Редактировать на GitHub» вверху этой страницы, а затем щелкните значок карандаша над областью просмотра файла. Ниже приводится двухминутное видео, демонстрирующее этот процесс.
Предварительная компиляция для ускорения загрузки
Чтобы пакет ControlSystems.jl загружался быстрее, можно воспользоваться PackageCompiler.jl.
|
Если вы планируете принимать участие в разработке пакета ControlSystem.jl, то есть изменять исходный код, не рекомендуется встраивать его в образ системы. Лучше встроить в образ системы пакет OrdinaryDiffEq, так как именно на его загрузку тратится большая часть времени. |
Создание пользовательского образа системы позволяет сократить время на запуск нового сеанса Julia, например:
-
Без образа системы:
julia> @time using ControlSystems
1.646961 seconds (2.70 M allocations: 173.558 MiB, 1.08% gc time, 2.06% compilation time)
-
С пакетами OrdinaryDiffEq и Plots в образе системы:
julia> @time using ControlSystems
0.120975 seconds (413.37 k allocations: 27.672 MiB, 1.66% compilation time)
Чтобы выполнить сборку образа системы с помощью ControlSystems, сохраните приведенный ниже скрипт в файле, например precompile_controlsystems.jl (в него можно добавить и любые другие пакеты, которые должны загружаться).
using OrdinaryDiffEq # Включите этот пакет, если вы хотите участвовать в разработке ControlSystems.jl
using ControlSystems # Включите этот пакет, если вы хотите просто использовать ControlSystems.jl
using Plots # Если вы также хотите использовать функции построения графиков
# Добавим несколько операторов, чтобы убедиться в том, что они предварительно компилируются. Не включайте их, если вы хотите участвовать в разработке ControlSystems.jl
for P = StateSpace[ssrand(2,2,2), ssrand(2,2,2, Ts=0.1)]
bodeplot(P)
nyquistplot(P)
plot(step(P, 10))
end
Затем выполните следующий код:
using PackageCompiler
PackageCompiler.create_sysimage(
[
:OrdinaryDiffEq,
:Plots,
:ControlSystems,
];
precompile_execution_file = "precompile_execution_file",
sysimage_path = "sys_ControlSystems_$(VERSION).so",
)
exit()
После создания образа системы запустите Julia с указанием флага -J и созданного образа, который имеет имя sys_ControlSystems_<VERSION>.so. Дополнительные сведения см. здесь. После этого пакет должен загружаться очень быстро.
|
При обновлении установленных пакетов Julia образ системы не изменится, пока вы не выполните его повторную сборку. |
Чтобы этот образ системы загружался в vscode, добавьте
"julia.additionalArgs": [
"-J/path_to_sysimage/sys_ControlSystems_<VERSION>.so"
],
в файл settings.json.