Системный object™ - это специализированный объект MATLAB ®, оптимизированный для итеративной обработки. Системные объекты используются при необходимости многократного запуска объекта или обработки данных в цикле. При определении собственного объекта System используйте следующие рекомендации, чтобы ускорить запуск объекта System.
Определите все разовые расчеты в setupImpl метод и кэширование результатов в частном свойстве. Используйте stepImpl способ повторных расчетов.
Укажите логические значения с помощью true или false вместо 1 или 0соответственно.
Если переменные в методе не должны сохранять свои значения между вызовами, используйте локальную область для этих переменных в этом методе.
Некоторые методы используют stepImpl входы алгоритма как их входы, такие как setupImpl, updateImpl, validateInputsImpl, isInputDirectFeedThroughImpl, и processInputSpecificationChangeImpl. Входные данные должны соответствовать порядку входных данных stepImpl, но не нужно совпадать с количеством входов. Если реализация не требует ввода каких-либо данных в объект System, их можно оставить выключенными.
Для getNumInputsImpl и getNumOutputsImpl методы, если задать возвращаемый аргумент из свойства объекта, это свойство объекта должно иметь Nontunable атрибут.
Все методы, за исключением статических, ожидают, что дескриптор объекта System будет первым входным аргументом. Для дескриптора объекта System можно использовать любое имя. Код, вставленный в меню редактора MATLAB, использует obj.
Во многих примерах вместо прохождения в дескрипторе объекта, ~ используется для указания того, что дескриптор объекта не используется в функции. Использование ~ вместо дескриптора объекта предотвращает предупреждения о неиспользуемых переменных.
Для свойств, которые не изменяются, определите их как Nontunable свойства. Tunable свойства имеют более медленный доступ, чем Nontunable свойства
По возможности используйте protected или private вместо атрибута public атрибут для свойства. Некоторые public свойства имеют более медленный доступ, чем protected и private свойства.
Если свойства доступны более одного раза в stepImpl кэшировать эти свойства как локальные переменные в методе. Типичным примером множественного доступа к свойствам является цикл. Итеративные вычисления с использованием кэшированных локальных переменных выполняются быстрее, чем вычисления, которые должны получить доступ к свойствам объекта. По завершении вычислений для метода можно сохранить локальные кэшированные результаты обратно в свойства этого объекта System. Копирование часто используемых настраиваемых свойств в частные свойства. Эта передовая практика также применима к updateImpl и outputImpl методы.
Например, в этом коде k вызывается несколько раз в каждой итерации цикла, но сохраняется в свойстве объекта только один раз.
function y = stepImpl(obj,x) k = obj.MyProp; for p=1:100 y = k * x; k = k + 0.1; end obj.MyProp = k; end
Значения свойств по умолчанию являются общими для всех экземпляров объекта. Два экземпляра класса могут получить доступ к одному и тому же значению по умолчанию, если это свойство не было перезаписано ни одним из них.
Не используйте сравнения символьных векторов или операторы переключения на основе символьных векторов в stepImpl способ. Вместо этого создайте дескриптор метода в setupImpl. Этот дескриптор указывает на метод в том же файле определения класса. Использовать этот дескриптор в цикле в stepImpl.
В этом примере показано, как использовать обработчики методов и кэшированные локальные переменные в цикле для реализации эффективного объекта. В setupImplвыбирать myMethod1 или myMethod2 на основе сравнения символьных векторов и назначения дескриптора метода pMethodHandle собственность. Потому что есть цикл в stepImpl, назначьте pMethodHandle свойство для локального дескриптора метода, myFun, а затем использовать myFun внутри петли.
classdef MyClass < matlab.System function setupImpl(obj) if strcmp(obj.Method, 'Method1') obj.pMethodHandle = @myMethod1; else obj.pMethodHandle = @myMethod2; end end function y = stepImpl(obj,x) myFun = obj.pMethodHandle; for p=1:1000 y = myFun(obj,x) end end end function y = myMethod1(x) y = x+1; end function y = myMethod2(x) y = x-1; end end
Для системных объектов, включенных в Simulink, добавьте StrictDefaults атрибут. Этот атрибут устанавливает все MutableImpl для возврата значения false по умолчанию.
Сведения о системных объектах и генерации кода см. в разделе Системные объекты в коде MATLAB (кодер MATLAB).