Модель предсказания нелинейного контроллера 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
входной параметр к вашей пользовательской стоимости и ограничительным функциям.
Для примера, который увеличивает модель предсказания для случайных подобных шагу выходных воздействий, смотрите Нелинейное Прогнозирующее Управление Модели Экзотермического Химического Реактора.