Инициализируйте персистентные переменные в функциях MATLAB

Персистентная переменная является локальной переменной в функции MATLAB®, которая сохраняет ее значение в памяти между вызовами функции. Для генерации кода функции должны инициализировать персистентную переменную, если это пусто. Для получения дополнительной информации смотрите persistent.

При программировании функций MATLAB в этих ситуациях:

специализированная семантика влияет, как функция инициализирует свои персистентные данные. Поскольку инициализация должна быть независима от входа к функции, следовать этим инструкциям:

  • Функция инициализирует свои персистентные переменные только путем доступа к константам.

  • Поток управления функции не зависит от того, происходит ли инициализация.

Например, эта функция имеет персистентную переменную n.

function y = fcn(u)
    persistent n
        
    if isempty(n)
        n = u;
        y = 1;
        return
    end
    
    y = n;
    n = n + u; 
end
Этот тип инициализации приводит к ошибке, потому что начальное значение n зависит от входа u, и оператор return прерывает нормальный поток управления функции.

Чтобы исправить ошибку, инициализируйте персистентную переменную путем установки его на постоянное значение и удалите оператор return. Например, эта функция инициализирует персистентную переменную, не производя ошибку.

function y = fcn(u)
    persistent n
        
    if isempty(n)
        n = 1;
    end
    
    y = n;
    n = n + u; 
end

Блок MATLAB function без прямого сквозного соединения

Эта модель содержит блок MATLAB function, который задает функциональный fcn, описанный ранее. Вход u является прямоугольной волной со значениями 1 и-1.

В блоке MATLAB function:

  • Начальное значение персистентной переменной n зависит от входа u.

  • Оператор return прерывает нормальный поток управления функции.

Поскольку флажок Allow direct feeedthrough снимается, результаты инициализации по ошибке.

Если вы изменяете функцию, таким образом, она инициализирует n независимо от входа, то можно моделировать безошибочную модель.

Блок Госконтроля в синхронном режиме

Эта модель содержит блок MATLAB function, который задает функциональный fcn, описанный ранее. Вход u является прямоугольной волной со значениями 1 и-1.

В блоке MATLAB function:

  • Начальное значение персистентной переменной n зависит от входа u.

  • Оператор return прерывает нормальный поток управления функции.

Поскольку модель содержит блок State Control в режиме Synchronous, результаты инициализации по ошибке.

Если вы изменяете функцию, таким образом, она инициализирует n независимо от входа, то можно моделировать безошибочную модель.

Диаграмма Stateflow, реализующая семантику Мура

Эта модель содержит диаграмму Stateflow, которая реализует семантику машины Мура. График содержит функцию MATLAB, которая задает функциональный fcn, описанный ранее. Вход u имеет значения 1 и-1, которые зависят от состояния графика.

В функции MATLAB:

  • Начальное значение персистентной переменной n зависит от входа u.

  • Оператор return прерывает нормальный поток управления функции.

Поскольку график реализует семантику Мура, результаты инициализации по ошибке.

Если вы изменяете функцию, таким образом, она инициализирует n независимо от входа, то можно моделировать безошибочную модель.

Смотрите также

| | |

Похожие темы