Система object™ является специализированным объектом MATLAB®, который оптимизирован для итеративной обработки. Используйте Системные объекты, когда необходимо будет запустить объект многократно или обработать данные в цикле. При определении собственного Системного объекта используйте следующие предложения, чтобы помочь Системному объекту, запущенному более быстро.
Задайте все одноразовые вычисления в setupImpl метод и кэш результаты в частной собственности. Используйте stepImpl метод для повторных вычислений.
Задайте булевы значения с помощью true или false вместо 1 или 0, соответственно.
Если переменные в методе не должны сохранять свои значения между вызовами, используйте локальный осциллограф для тех переменных в том методе.
Некоторые методы используют stepImpl алгоритм вводит как их входные параметры, такие как setupImplupdateImplvalidateInputsImplisInputDirectFeedthroughImpl, и processInputSizeChangeImpl. Входные параметры должны совпадать с порядком входных параметров к stepImpl, но не должны совпадать с количеством входных параметров. Если ваша реализация не требует ни одних из входных параметров к Системному объекту, можно оставить их всех прочь.
Для getNumInputsImpl и getNumOutputsImpl методы, если вы устанавливаете возвращаемый аргумент от свойства объекта, то свойство объекта, должны иметь Nontunable атрибут.
Все методы, кроме статических методов, ожидают указатель Системного объекта как первый входной параметр. Можно использовать любое имя для указателя Системного объекта. Код, введенный меню MATLAB Editor, использует obj.
Во многих примерах, вместо того, чтобы передать в указателе на объект, ~ используется, чтобы указать, что указатель на объект не используется в функции. Используя ~ вместо указателя на объект предотвращает предупреждения о неиспользуемых переменных.
Для свойств, которые не изменяются, задайте их в как Nontunable свойства. Tunable свойства имеют более медленные времена доступа, чем Nontunable свойства
Каждый раз, когда возможно, используйте protected или private припишите вместо public припишите для свойства. Некоторый public свойства имеют более медленные времена доступа, чем protected и private свойства.
Если к свойствам получают доступ несколько раз в stepImpl метод, кэшируйте те свойства как локальные переменные в методе. Типичным примером множественного доступа к свойствам является цикл. Итеративные вычисления с помощью кэшируемых локальных переменных, запущенных быстрее, чем вычисления, которые должны получить доступ к свойствам объекта. Когда вычисления для завершенного метода, можно сохранить локальные кэшируемые результаты назад в свойства того Системного объекта. Копия часто использовала настраиваемые свойства в частные свойства. Эта лучшая практика также применяется к 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
Значения по умолчанию свойств совместно используются через все экземпляры объекта. Два экземпляра класса могут получить доступ к тому же значению по умолчанию, если то свойство не было перезаписано ни одним экземпляром.
Не используйте сравнения вектора символов или основанные на векторе символов операторы switch в 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 Coder).