Модель прогноза нелинейного контроллера MPC состоит из следующих пользовательских функций:
Функция состояния — Предсказывает, как состояния объекта развиваются в зависимости от времени
Выходная функция — Вычисляет объект выходные параметры с точки зрения переменных состояния и входных переменных
Можно задать или непрерывно-разовое или модель прогноза дискретного времени.
Прежде, чем моделировать ваш контроллер, это - лучшая практика подтвердить ваши пользовательские функции, включая функцию состояния, выходную функцию и их Якобианы с помощью команды validateFcns
.
Можно задать или непрерывно-разовое или функцию состояния дискретного времени. Для a:
Непрерывно-разовая модель прогноза, функция состояния является производной функцией состояния.
Модель прогноза дискретного времени, функция состояния является функцией обновления состояния.
Поскольку нелинейный диспетчер MPC является диспетчером дискретного времени, если ваша функция состояния является непрерывно-разовой, контроллер автоматически дискретизирует модель с помощью неявного метода трапеций. Этот метод может обработать умеренно жесткие модели, и его точность прогноза зависит от шага расчета контроллера; то есть, время большой выборки может потенциально привести к неточному прогнозу.
Если метод дискретизации по умолчанию не предоставляет удовлетворительный прогноз для вашего приложения, можно задать собственную модель прогноза дискретного времени, которая использует различный метод. Для этого можно интегрировать непрерывно-разовую функцию состояния от данного начального условия, xk, к следующему состоянию, xk+1. При выполнении так численно, избегайте подходов, которые требуют итераций, таких как некоторые методы переменного размера шага, потому что эти методы вводят числовой шум, который ухудшает производительность решателя. Явный многоступенчатый Метод Эйлера с размером достаточно небольшого шага часто является лучшим методом, чтобы попробовать сначала. Для примера смотрите Управление Swing Маятника Используя Нелинейное Образцовое Прогнозирующее Управление.
Можно задать функцию состояния одним из следующих способов.
Имя функции в текущей рабочей папке или на пути MATLAB®, заданном как строка или вектор символов
Model.StateFcn = "myStateFunction";
Обработайте к функции в текущей рабочей папке или на пути MATLAB
Model.StateFcn = @myStateFunction;
Анонимная функция
Model.StateFcn = @(x,u,params) myStateFunction(x,u,params)
Ваша функция состояния должна иметь одну из следующих подписей.
Если ваш диспетчер не использует дополнительные параметры:
function z = myStateFunction(x,u)
Если ваш диспетчер использует параметры. Здесь params
является списком, разделенным запятыми параметров:
function z = myStateFunction(x,u,params)
Эта таблица описывает вводы и выводы этой функции, где:
Nx является количеством состояний и равен свойству Dimensions.NumberOfStates
контроллера.
Nu является количеством входных параметров, включая все переменные, которыми управляют, измеренные воздействия и неизмеренные воздействия, и равен свойству Dimensions.NumberOfInputs
контроллера.
Аргумент | Ввод/вывод | Описание |
---|---|---|
x | Входной параметр | Текущие состояния, заданные как вектор-столбец длины Nx. |
u | Входной параметр | Текущие входные параметры, заданные как вектор-столбец длины Nu. |
params | Входной параметр | Дополнительные параметры, заданные как список, разделенный запятыми (например Если ваша модель использует дополнительные параметры, необходимо задать количество параметров с помощью свойства |
z | Вывод | Функциональный выходной параметр состояния, возвращенный как вектор-столбец длины Nx. Для непрерывно-разовой модели прогноза z содержит производные состояния, dx/dt , и для моделей прогноза дискретного времени, z содержит следующие состояния, x(k+1) . |
Как пример функции состояния, рассмотрите непрерывно-разовую модель со следующими уравнениями состояния:
Можно задать функцию состояния можно следующим образом:
z = zeros(6,1); z(1) = x(4); z(2) = x(5); z(3) = x(6); z(4) = (u(1) - u(2) + u(3) - u(4))*cos(x(3)); z(5) = (u(1) - u(2) + u(3) - u(4))*sin(x(3)); z(6) = 0.2*(u(1) - u(2) - u(3) + u(4));
Чтобы повысить вычислительную эффективность, это - лучшая практика задать аналитический якобиан для вашей функции состояния. Если вы не задаете якобиан, контроллер вычисляет якобиевское использующее числовое возмущение. Чтобы задать якобиан для вашей функции состояния, установите свойство Jacobian.StateFcn
контроллера к одному из следующих.
Имя функции в текущей рабочей папке или на пути MATLAB, заданном как строка или вектор символов
Model.StateFcn = "myStateJacobian";
Обработайте к функции в текущей рабочей папке или на пути MATLAB
Model.StateFcn = @myStateJacobian;
Анонимная функция
Model.StateFcn = @(x,u,params) myStateJacobian(x,u,params)
Ваша Функция Якоби состояния должна иметь одну из следующих подписей.
Если ваш диспетчер не использует дополнительные параметры:
function [A,Bmv] = myStateJacobian(x,u)
Если ваш диспетчер использует параметры. Здесь params
является списком, разделенным запятыми параметров:
function [A,Bmv] = myStateJacobian(x,u,params)
Входные параметры Функции Якоби состояния совпадают с входными параметрами функции состояния. Эта таблица описывает выходные параметры Функции Якоби, где:
Nx является количеством состояний и равен свойству Dimensions.NumberOfStates
контроллера
Nu является количеством входных параметров, включая все переменные, которыми управляют, измеренные воздействия и неизмеренные воздействия, и равен свойству Dimensions.NumberOfInputs
контроллера
Аргумент | Описание |
---|---|
A | Якобиан функционального вывода состояния, z , относительно x , возвратился как Nx-by-Nx массив, где . |
Bmv | Якобиан функционального вывода состояния относительно переменных, которыми управляют, заданных как Nx-by-Nmv массив, где и MV (j) является j th индекс мВ в контроллере Dimensions.MVIndex свойство. Bmv содержит градиенты только относительно переменных, которыми управляют, в u , поскольку измеренные и неизмеренные воздействия не являются переменными решения. |
Рассмотрите снова, функция состояния со следующими уравнениями состояния:
Чтобы найти Якобианы, вычислите частные производные уравнений состояния относительно состояний и переменных, которыми управляют, приняв, что все четыре входных параметров являются переменными, которыми управляют.
A = zeros(6,6); A(1,4) = 1; A(2,5) = 1; A(3,6) = 1; A(4,3) = -(u(1) - u(2) + u(3) - u(4))*sin(x(3)); A(5,3) = (u(1) - u(2) + u(3) - u(4))*cos(x(3)); B = zeros(6,4); B(4,:) = cos(x(3))*[1 -1 1 -1]; B(5,:) = sin(x(3))*[1 -1 1 -1]; B(6,:) = 0.2*[1 -1 -1 1];
Выходная функция вашей модели прогноза связывает состояния и входные параметры в текущем интервале управления к выходным параметрам. Если количество состояний и выходные параметры модели прогноза являются тем же самым, можно не использовать OutputFcn
, который подразумевает, что все состояния измеримы; то есть, каждый вывод соответствует одному состоянию.
OutputFcn
не может иметь прямого сквозного соединения ни от какой переменной, которой управляют, ни до какого вывода никогда; другими словами, нелинейный MPC всегда принимает Dmv = 0
.
Можно задать выходную функцию одним из следующих способов.
Имя функции в текущей рабочей папке или на пути MATLAB, заданном как строка или вектор символов
Model.OutputFcn = "myOutputFunction";
Обработайте к функции в текущей рабочей папке или на пути MATLAB
Model.OutputFcn = @myOutputFunction;
Анонимная функция
Model.OutputFcn = @(x,u,params) myOutputFunction(x,u,params)
Ваша выходная функция должна иметь одну из следующих подписей.
Если ваш диспетчер не использует дополнительные параметры:
function y = myOutputFunction(x,u)
Если ваш диспетчер использует параметры. Здесь, params
является списком, разделенным запятыми параметров:
function y = myOutputFunction(x,u,params)
Эта таблица описывает вводы и выводы этой функции, где:
Nx является количеством состояний и равен свойству Dimensions.NumberOfStates
контроллера.
Nu является количеством входных параметров, включая все переменные, которыми управляют, измеренные воздействия и неизмеренные воздействия, и равен Dimensions.NumberOfInputs
контроллера.
NY является количеством выходных параметров и равен свойству Dimensions.NumberOfOutputs
контроллера.
Аргумент | Ввод/вывод | Описание |
---|---|---|
x | Входной параметр | Текущие состояния, заданные как вектор-столбец длины Nx. |
u | Входной параметр | Текущие входные параметры, заданные как вектор-столбец длины Nu. |
params | Входной параметр | Дополнительные параметры, заданные как список, разделенный запятыми (например Если ваша модель использует дополнительные параметры, необходимо задать количество параметров с помощью |
y | Вывод | Текущие выходные параметры, возвращенные как вектор-столбец длины Ny. |
Как пример выходной функции, рассмотрите следующие выходные уравнения. Вспомните, что ваша выходная функция не может иметь прямого сквозного соединения ни от какой переменной, которой управляют, ни до какого вывода никогда.
Можно задать выходную функцию можно следующим образом:
y = zeros(6,1); y(1) = x(1); y(2) = x(2)+0.2*x(3); y(3) = x(3)*x(4);
Чтобы повысить вычислительную эффективность, это - лучшая практика задать аналитический якобиан для вашей выходной функции. Если вы не задаете якобиан, контроллер вычисляет якобиевское использующее числовое возмущение. Чтобы задать якобиан для вашей выходной функции, установите свойство Jacobian.OutputFcn
контроллера к одному из следующих.
Имя функции в текущей рабочей папке или на пути MATLAB, заданном как строка или вектор символов
Model.StateFcn = "myOutputJacobian";
Обработайте к функции в текущей рабочей папке или на пути MATLAB
Model.StateFcn = @myOutputJacobian;
Анонимная функция
Model.StateFcn = @(x,u,params) myOutputJacobian(x,u,params)
Ваша выходная Функция Якоби должна иметь одну из следующих подписей.
Если ваш диспетчер не использует дополнительные параметры:
function C = myOutputJacobian(x,u)
Если ваш диспетчер использует параметры. Здесь params
является списком, разделенным запятыми параметров:
function C = myOutputJacobian(x,u,params)
Входные параметры выходной Функции Якоби совпадают с входными параметрами выходной функции. Эта таблица описывает вывод Функции Якоби. Поскольку выходная функция не может иметь прямого сквозного соединения ни от какой переменной, которой управляют, ни до какого вывода, выходная Функция Якоби возвращает только градиенты выходной функции относительно образцовых состояний.
Аргумент | Описание |
---|---|
C | Якобиан выходной функции, возвращенной как Ny-by-Nx массив, где . |
Рассмотрите снова, модель со следующими выходными уравнениями:
Чтобы найти Якобианы, вычислите частные производные выходных уравнений относительно состояний. Поскольку выходная функция не может иметь прямого сквозного соединения ни от какой переменной, которой управляют, ни до какого вывода никогда, вы не вычисляете якобиан относительно переменных, которыми управляют.
C = zeros(3,4); C(1,1) = 1; C(2,2) = 1; C(2,3) = 0.2; C(3,3) = x(4); C(3,4) = x(3);
Можно задать дополнительные параметры для нелинейной модели прогноза MPC, функции стоимости и пользовательских ограничений. Для этого передайте список, разделенный запятыми аргументов параметра к вашим пользовательским функциям (например, p1,p2,p3
). Эти параметры должны быть численными значениями. Кроме того, необходимо задать количество параметров модели с помощью свойства Model.NumberOfParameters
контроллера.
Те же параметры передаются модели прогноза, пользовательской функции стоимости, пользовательским ограничительным функциям и их соответствующим Якобианам. Например, даже если функция состояния использует только параметр p1
, ограничительные функции используют только параметр p2
, и функция стоимости использует только параметр p3
, необходимо все еще задать три параметра. Все эти параметры передаются во все эти функции, и необходимо выбрать правильный параметр, чтобы использовать в каждой функции.
Для примера, который задает шаг расчета функции состояния дискретного времени в качестве параметра, смотрите Управление Swing Маятника Используя Нелинейное Образцовое Прогнозирующее Управление.
Можно увеличить модель прогноза, чтобы включать неизмеренные воздействия. Например, если ваш объект не имеет интегратора, и вы хотите отклонить определенное неизмеренное воздействие, увеличить ваш план с возмущением. Выполнение так позволяет внешнему средству оценки состояния обнаруживать воздействие и таким образом давать нелинейному контроллеру MPC достаточно информации, чтобы отклонить его.
Во время симуляции контроллер передает нуль каждому неизмеренному входному каналу воздействия, поскольку сигналы не измерены и приняты, чтобы быть нулем - среднее значение по умолчанию.
Чтобы увеличить вашу модель прогноза, необходимо определять один или несколько входных сигналов как неизмеренные воздействия при создании контроллера, использующего nlmpc
. Например, создайте контроллер, где первые два входных параметров являются переменными, которыми управляют, и третий вход является неизмеренным воздействием (UD).
nlobj = nlmpc(nx,ny,'MV',[1 2],'UD',3);
Задайте неизмеренное возмущение в и выходных функциях состояния вашей модели прогноза. Это неизмеренное возмущение может быть любой произвольной моделью, которая точно получает эффект воздействия на вашем объекте. Например:
Если вы ожидаете подобный шагу UD на объекте вывод, то задаете модель UD как интегратор в вашей функции состояния и добавляете состояние интегратора в объект вывод в вашей выходной функции.
Если вы ожидаете подобный пандусу UD во входе объекта, то задаете модель UD как интегратор и добавляете интегратор вывод во входной сигнал в вашей функции состояния.
Любые состояния, которые вы добавляете при определении неизмеренного возмущения, включены в вектор состояния модели прогноза. Значения в этих неизмеренных состояниях возмущения отражают поведение воздействия во время симуляции. Этот вектор состояния соответствует входному параметру x
вашей функции состояния и входному параметру X
к вашей пользовательской стоимости и ограничительных функций.
Для примера, который увеличивает модель прогноза для случайных подобных шагу выходных воздействий, смотрите Нелинейное Образцовое Прогнозирующее Управление Экзотермического Химического Реактора.