Контроллер прогнозирования нелинейной модели
Контроллер прогнозирования нелинейной модели вычисляет оптимальные управляющие перемещения по горизонту прогнозирования с использованием модели нелинейного прогнозирования, функции нелинейных затрат и нелинейных ограничений. Дополнительные сведения о нелинейном MPC см. в разделе Нелинейный MPC.
nx - Количество состояний модели прогнозированияЧисло состояний модели прогнозирования, указанное как положительное целое число. Это значение сохраняется в Dimensions.NumberOfStates свойство только для чтения контроллера. После создания объекта контроллера изменить количество состояний невозможно.
ny - Количество выходов модели прогнозированияКоличество выходов модели прогнозирования, указанное как положительное целое число. Это значение сохраняется в Dimensions.NumberOfOutputs свойство только для чтения контроллера. Невозможно изменить количество выходов после создания объекта контроллера.
nu - Количество входов модели прогнозированияКоличество входов модели прогнозирования, которые задаются в качестве переменных манипулирования, указанных как положительное целое число. Это значение сохраняется в Dimensions.NumberOfInputs свойство только для чтения контроллера. После создания объекта контроллера изменить число управляемых переменных невозможно.
mvIndex - Манипулируемые индексы переменныхМанипулируемые индексы переменных, определяемые как вектор положительных целых чисел. Это значение сохраняется в Dimensions.MVIndex свойство только для чтения контроллера. После создания объекта контроллера изменить эти индексы невозможно.
Комбинированный набор индексов из mvIndex, mdIndex, и udIndex должен содержать все целые числа из 1 через Nu, где Nu - количество входов модели прогнозирования.
mdIndex - Измеренные показатели возмущенийИзмеренные индексы возмущений, определяемые как вектор положительных целых чисел. Это значение сохраняется в Dimensions.MDIndex свойство только для чтения контроллера. После создания объекта контроллера изменить эти индексы невозможно.
Комбинированный набор индексов из mvIndex, mdIndex, и udIndex должен содержать все целые числа из 1 через Nu, где Nu - количество входов модели прогнозирования.
udIndex - Неизмеренные индексы возмущенийНеизмеренные индексы возмущений, определяемые как вектор положительных целых чисел. Это значение сохраняется в Dimensions.UDIndex свойство только для чтения контроллера. После создания объекта контроллера изменить эти индексы невозможно.
Комбинированный набор индексов из mvIndex, mdIndex, и udIndex должен содержать все целые числа из 1 через Nu, где Nu - количество входов модели прогнозирования.
Ts - Время выборки модели прогнозирования1 (по умолчанию) | положительный конечный скалярВремя выборки модели прогнозирования, указанное как положительный конечный скаляр. Контроллер использует модель дискретного времени с временем выборки Ts для прогнозирования. Если задана модель прогнозирования непрерывного времени (Model.IsContinuousTime является true), то контроллер дискретизирует модель, используя встроенное неявное трапециевидное правило с временем выборки Ts.
PredictionHorizon - Горизонт прогнозирования10 (по умолчанию) | положительное целое числоШаги горизонта прогнозирования, заданные как положительное целое число. Продукт PredictionHorizon и Ts - время прогнозирования; то есть насколько контроллер смотрит в будущее.
ControlHorizon - Горизонт управления2 (по умолчанию) | положительное целое | вектор положительных целых чиселГоризонт управления, указанный как один из следующих:
Положительное целое число, m, между 1 и p, включительно, где p равно PredictionHorizon. В этом случае контроллер вычисляет m свободных перемещений управления, происходящих в моменты времени от k до k + m-1, и удерживает выходную константу контроллера для оставшихся шагов горизонта прогнозирования от k + m до k + p-1. Здесь k - текущий интервал управления.
Вектор положительных целых чисел [m1, m2,...], указывающий длины блокирующих интервалов. По умолчанию контроллер вычисляет M блоков свободных перемещений, где M - количество интервалов блокировки. Первое свободное перемещение применяется к временам k-k + m1-1, второе свободное перемещение применяется от времени k + m1-k + m1 + m2-1 и так далее. Использование блокировочных перемещений может повысить надежность контроллера. Сумма значений вControlHorizon должен соответствовать горизонту предсказания p. Если указан вектор, сумма которого равна:
Меньше горизонта прогнозирования, тогда контроллер добавляет интервал блокировки. Длина этого интервала такова, что сумма длин интервала равна р. Например, если p =10 и указывается горизонт управления ControlHorizon=[1 2 3], то контроллер использует четыре интервала с длинами [1 2 3 4].
Больше горизонта прогнозирования, то интервалы усекаются до тех пор, пока сумма длин интервалов не будет равна р. Например, если p =10 и указывается горизонт управления ControlHorizon= [1 2 3 6 7], то контроллер использует четыре интервала с длинами [1 2 3 4].
Кусочно-постоянные блокирующие перемещения часто слишком ограничительны для приложений оптимального планирования пути. Чтобы создать менее ограничительную проблему нелинейного программирования с лучшими условиями, можно задать кусочно-линейные интервалы блокировки переменных. Для этого установите Optimization.MVInterpolationOrder собственность вашего nlmpc объект контроллера для 1.
Дополнительные сведения о том, как работает блокирование переменных с помощью различных методов интерполяции, см. в разделе Блокирование переменных с помощью манипуляций.
Dimensions - Прогнозная информация о размерах моделиЭто свойство доступно только для чтения.
Информация о размерах модели прогнозирования, заданная при создании контроллера и сохраненная в виде структуры со следующими полями.
NumberOfStates - Количество состоянийЧисло состояний в модели прогнозирования, указанное как положительное целое число. Это значение соответствует nx.
NumberOfOutputs - Количество выходовКоличество выходов в модели прогнозирования, указанное как положительное целое число. Это значение соответствует ny.
NumberOfInputs - Количество состоянийЧисло входов в модели прогнозирования, указанное как положительное целое число. Это значение соответствует либо nmv или сумма длин mvIndex, mdIndex, и udIndex.
MVIndex - Манипулируемые индексы переменныхМанипулируемые индексы переменных для модели прогнозирования, заданные как вектор положительных целых чисел. Это значение соответствует mvIndex.
MDIndex - Измеренные показатели возмущенийИзмеренные индексы возмущений для модели прогнозирования, определенные как вектор положительных целых чисел. Это значение соответствует mdIndex.
UDIndex - Неизмеренные индексы возмущенийНеизмеренные индексы возмущений для модели прогнозирования, определенные как вектор положительных целых чисел. Это значение соответствует udIndex.
Model - Модель прогнозированияМодель прогнозирования, заданная как структура со следующими полями.
StateFcn - Функция состоянияФункция состояния, заданная как строка, символьный вектор или дескриптор функции. Для модели непрерывного прогнозирования, StateFcn - производная от состояния. Для модели дискретного прогнозирования, StateFcn - функция обновления состояния.
Если функция состояния выполняется непрерывно, контроллер автоматически дискретизирует модель с помощью неявного трапециевидного правила. Этот метод может обрабатывать умеренно жесткие модели, и его точность прогнозирования зависит от времени выборки контроллера Ts; то есть большое время выборки приводит к неточному прогнозированию.
Если метод дискретизации по умолчанию не обеспечивает удовлетворительное прогнозирование для приложения, можно указать собственную модель дискретного прогнозирования, использующую другой метод, например правило Euler многоступенчатого прямого режима.
Можно указать функцию состояния одним из следующих способов:
Имя функции в текущей рабочей папке или в пути MATLAB ®, указанное как вектор строки или символа
Model.StateFcn = "myStateFunction";Обращаться к функции в текущей рабочей папке или по пути MATLAB
Model.StateFcn = @myStateFunction;
Анонимная функция
Model.StateFcn = @(x,u,params) myStateFunction(x,u,params)
Дополнительные сведения см. в разделе Указание модели прогнозирования для нелинейного MPC.
OutputFcn - Функция вывода[] (по умолчанию) | строка | символьный вектор | дескриптор функцииФункция вывода, заданная как строка, символьный вектор или дескриптор функции. Если количество состояний и выходов модели прогнозирования одинаково, можно опустить OutputFcn, что подразумевает, что все состояния поддаются измерению; то есть каждый выход соответствует одному состоянию.
Примечание
Функция вывода не может иметь прямой проход от любой управляемой переменной к любому выходу в любое время.
Можно указать функцию вывода одним из следующих способов:
Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа
Model.OutputFcn = "myOutputFunction";Обращаться к функции в текущей рабочей папке или по пути MATLAB
Model.OutputFcn = @myOutputFunction;
Анонимная функция
Model.OutputFcn = @(x,u,params) myOutputFunction(x,u,params)
Дополнительные сведения см. в разделе Указание модели прогнозирования для нелинейного MPC.
IsContinuousTime - Флаг, указывающий временную область модели прогнозированияtrue (по умолчанию) | falseФлаг, указывающий временную область модели прогнозирования, указанный как один из следующих:
true - Модель непрерывного прогнозирования. В этом случае контроллер автоматически дискретизирует модель во время прогнозирования с использованием Ts.
false - Модель дискретно-временного прогнозирования. В этом случае Ts - время выборки модели.
Примечание
IsContinuousTime должны соответствовать функциям, указанным в Model.StateFcn и Model.OutputFcn.
Если IsContinuousTime является true, StateFcn должен возвращать производную состояния относительно времени, в текущее время. Иначе StateFcn должен возвращать состояние в следующем интервале управления.
NumberOfParameters - Количество дополнительных параметров модели0 (по умолчанию) | неотрицательное целое числоЧисло необязательных параметров модели, используемых моделью прогнозирования, функцией пользовательских затрат и функциями пользовательских ограничений, указанных как неотрицательное целое число. Количество параметров включает все параметры, используемые этими функциями. Например, если функция состояния использует только параметр p1, функции ограничения используют только параметр p2, и функция затрат использует только параметр p3, то NumberOfParameters является 3.
States - Информация о состоянии, границы и масштабные коэффициентыИнформация о состоянии, границы и масштабные коэффициенты, заданные как структурный массив с элементами Nx, где Nx - количество состояний. Каждый структурный элемент имеет следующие поля.
Min - Состояние нижней границы-Inf (по умолчанию) | скаляр | векторСостояние нижней границы, указанное как скаляр или вектор. По умолчанию нижняя граница не ограничена.
Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.
Чтобы изменить границу по горизонту прогнозирования от времени k + 1 до времени k + p, укажите вектор до p значений. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, конечная граница используется для оставшихся шагов горизонта прогнозирования.
Границы состояний всегда являются жесткими ограничениями.
Max - Верхняя граница состоянияInf (по умолчанию) | скаляр | векторВерхняя граница состояния, заданная как скаляр или вектор. По умолчанию верхняя граница не ограничена.
Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.
Чтобы изменить границу по горизонту прогнозирования от времени k + 1 до времени k + p, укажите вектор до p значений. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, конечная граница используется для оставшихся шагов горизонта прогнозирования.
Границы состояний всегда являются жесткими ограничениями.
Name - Название штатаИмя состояния, указанное как строковый или символьный вектор. Имя состояния по умолчанию: "x#", где # - его индекс состояния.
Units - Государственные единицы"" (по умолчанию) | строка | символьный векторЕдиницы состояния, указанные как строковый или символьный вектор.
ScaleFactor - Масштабный коэффициент состояния1 (по умолчанию) | положительный конечный скалярМасштабный коэффициент состояния, заданный как положительный конечный скаляр. В общем, используйте рабочий диапазон состояния. Определение соответствующего масштабного коэффициента может улучшить численное кондиционирование для оптимизации.
OutputVariables - Выводить переменную информацию, границы и масштабные коэффициентыИнформация выходной переменной (OV), границы и масштабные коэффициенты, заданные как структурный массив с элементами Ny, где Ny - количество выходных переменных. Для доступа к этому свойству можно использовать псевдоним OV вместо OutputVariables.
Каждый структурный элемент имеет следующие поля.
Min - нижняя граница OV-Inf (по умолчанию) | скаляр | векторНижняя граница OV, заданная как скаляр или вектор. По умолчанию эта нижняя граница не ограничена.
Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.
Чтобы изменить границу по горизонту прогнозирования от времени k + 1 до времени k + p, укажите вектор до p значений. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, конечная граница используется для оставшихся шагов горизонта прогнозирования.
Max - верхняя граница OVInf (по умолчанию) | скаляр | векторВерхняя граница OV, заданная как скаляр или вектор. По умолчанию эта верхняя граница не ограничена.
Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.
Чтобы изменить границу по горизонту прогнозирования от времени k + 1 до времени k + p, укажите вектор до p значений. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, конечная граница используется для оставшихся шагов горизонта прогнозирования.
MinECR - Мягкость нижней границы OV1 (по умолчанию) | неотрицательный конечный скаляр | векторOV мягкость нижней границы, где большее значение ECR указывает более мягкое ограничение, указанное как неотрицательный конечный скаляр или вектор. По умолчанию верхние границы OV являются мягкими ограничениями.
Чтобы использовать одно и то же значение ECR для горизонта прогнозирования, укажите скалярное значение.
Чтобы изменить значение РПУ по горизонту прогнозирования от времени k + 1 до времени k + p, задайте вектор до значений p. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, окончательное значение ECR используется для оставшихся шагов горизонта прогнозирования.
MaxECR - Мягкость верхней границы OV1 (по умолчанию) | неотрицательный конечный скаляр | векторOV мягкость верхней границы, где большее значение ECR указывает более мягкое ограничение, указанное как неотрицательный конечный скаляр или вектор. По умолчанию нижние границы OV являются мягкими ограничениями.
Чтобы использовать одно и то же значение ECR для горизонта прогнозирования, укажите скалярное значение.
Чтобы изменить значение РПУ по горизонту прогнозирования от времени k + 1 до времени k + p, задайте вектор до значений p. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, окончательное значение ECR используется для оставшихся шагов горизонта прогнозирования.
Name - Наименование OVИмя OV, указанное как строковый или символьный вектор. Имя OV по умолчанию: "y#", где # - его выходной индекс.
Units - блоки OV"" (по умолчанию) | строка | символьный векторЕдиницы OV, указанные как строковый или символьный вектор.
ScaleFactor - коэффициент масштаба OV1 (по умолчанию) | положительный конечный скалярКоэффициент масштаба OV, заданный как положительный конечный скаляр. В общем случае используйте рабочий диапазон выходной переменной. Определение соответствующего масштабного коэффициента может улучшить численное кондиционирование для оптимизации.
ManipulatedVariables - Управляемая переменная информация, границы и масштабные коэффициентыИнформация о манипулированной переменной (MV), границах и масштабных коэффициентах, заданная как структурный массив с элементами Nmv, где Nmv - количество манипулируемых переменных. Для доступа к этому свойству можно использовать псевдоним MV вместо ManipulatedVariables.
Каждый структурный элемент имеет следующие поля.
Min - нижняя граница СН-Inf (по умолчанию) | скаляр | векторНижняя граница MV, заданная как скаляр или вектор. По умолчанию эта нижняя граница не ограничена.
Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.
Для изменения границы по горизонту прогнозирования от времени k до времени k + p-1 укажите вектор до p значений. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, конечная граница используется для оставшихся шагов горизонта прогнозирования.
Max - верхняя граница СНInf (по умолчанию) | скаляр | векторВерхняя граница MV, заданная как скаляр или вектор. По умолчанию эта верхняя граница не ограничена.
Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.
Для изменения границы по горизонту прогнозирования от времени k до времени k + p-1 укажите вектор до p значений. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, конечная граница используется для оставшихся шагов горизонта прогнозирования.
MinECR - Мягкость нижней границы СН0 (по умолчанию) | неотрицательный скаляр | векторMV мягкость нижней границы, где большее значение ECR указывает более мягкое ограничение, указанное как неотрицательный скаляр или вектор. По умолчанию нижние границы СН являются жесткими ограничениями.
Чтобы использовать одно и то же значение ECR для горизонта прогнозирования, укажите скалярное значение.
Для изменения значения РПУ по горизонту прогнозирования от времени k до времени k + p-1 задайте вектор до p значений. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, окончательное значение ECR используется для оставшихся шагов горизонта прогнозирования.
MaxECR - верхняя граница СН0 (по умолчанию) | неотрицательный скаляр | векторMV верхняя граница мягкости, где большее значение ECR указывает более мягкое ограничение, указанное как неотрицательный скаляр или вектор. По умолчанию верхние границы СН являются жесткими ограничениями.
Чтобы использовать одно и то же значение ECR для горизонта прогнозирования, укажите скалярное значение.
Для изменения значения РПУ по горизонту прогнозирования от времени k до времени k + p-1 задайте вектор до p значений. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, окончательное значение ECR используется для оставшихся шагов горизонта прогнозирования.
RateMin - Скорость изменения среднего напряжения в нижней границе-Inf (по умолчанию) | неположительный скаляр | векторMV скорость изменения нижней границы, заданная как непозволительный скаляр или вектор. Скорость изменения MV определяется как MV (k) - MV (k-1), где k - текущее время. По умолчанию эта нижняя граница не ограничена.
Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.
Для изменения границы по горизонту прогнозирования от времени k до времени k + p-1 укажите вектор до p значений. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, конечная граница используется для оставшихся шагов горизонта прогнозирования.
RateMax - Скорость изменения среднего напряжения в верхней границеInf (по умолчанию) | неотрицательный скаляр | векторMV скорость изменения верхней границы, заданная как неотрицательный скаляр или вектор. Скорость изменения MV определяется как MV (k) - MV (k-1), где k - текущее время. По умолчанию эта нижняя граница не ограничена.
Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.
Для изменения границы по горизонту прогнозирования от времени k до времени k + p-1 укажите вектор до p значений. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, конечная граница используется для оставшихся шагов горизонта прогнозирования.
RateMinECR - Скорость изменения MV мягкости нижней границы0 (по умолчанию) | неотрицательный конечный скаляр | векторMV скорость изменения мягкости нижней границы, где большее значение ECR указывает более мягкое ограничение, указанное как неотрицательный конечный скаляр или вектор. По умолчанию MV скорости изменения нижних границ являются жесткими ограничениями.
Чтобы использовать одно и то же значение ECR для горизонта прогнозирования, укажите скалярное значение.
Для изменения значений РПУ по горизонту прогнозирования от времени k до времени k + p-1 задайте вектор до значений p. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, то конечные значения ECR используются для оставшихся шагов горизонта прогнозирования.
RateMaxECR - Скорость изменения MV мягкости верхней границы0 (по умолчанию) | неотрицательный конечный скаляр | векторMV скорость изменения мягкости верхней границы, где большее значение ECR указывает более мягкое ограничение, указанное как неотрицательный конечный скаляр или вектор. По умолчанию скорость изменения верхних границ среднего напряжения является жестким ограничением.
Чтобы использовать одно и то же значение ECR для горизонта прогнозирования, укажите скалярное значение.
Для изменения значений РПУ по горизонту прогнозирования от времени k до времени k + p-1 задайте вектор до значений p. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, то конечные значения ECR используются для оставшихся шагов горизонта прогнозирования.
Name - Наименование СНИмя MV, указанное как строковый или символьный вектор. Имя MV по умолчанию: "u#", где # является его входным индексом.
Units - блоки СН"" (по умолчанию) | строка | символьный векторЕдиницы среднего напряжения, указанные как строковый или символьный вектор.
ScaleFactor - масштабный коэффициент СН1 (по умолчанию) | положительный конечный скалярМасштабный коэффициент СН, заданный как положительный конечный скаляр. В общем случае используйте рабочий диапазон управляемой переменной. Определение соответствующего масштабного коэффициента может улучшить численное кондиционирование для оптимизации.
MeasuredDisturbances - Измеренная информация о возмущениях и масштабные коэффициентыИзмеренная информация о возмущениях (MD) и масштабные коэффициенты, определенные как структурная матрица с элементами Nmd, где Nmd - количество измеренных возмущений. Если в модели нет измеренных возмущений, то MeasuredDisturbances является []. Для доступа к этому свойству можно использовать псевдоним MD вместо MeasuredDisturbances.
Каждый структурный элемент имеет следующие поля.
Name - наименование MDИмя MD, указанное как строковый или символьный вектор. Имя MD по умолчанию: "u#", где # является его входным индексом.
Units - блоки MD"" (по умолчанию) | строка | символьный векторЕдиницы MD, заданные как строковый или символьный вектор.
ScaleFactor - масштабный коэффициент MD1 (по умолчанию) | положительный конечный скалярМасштабный коэффициент MD, заданный как положительный конечный скаляр. В общем, используйте рабочий диапазон возмущений. Определение соответствующего масштабного коэффициента может улучшить численное кондиционирование для оптимизации.
Weights - Веса настройки функции стандартных затратВеса настройки функции стандартных затрат, определенные как структура. Контроллер применяет эти веса к масштабированным переменным. Поэтому веса настройки являются безразмерными значениями.
Примечание
При определении пользовательской функции затрат с помощью Optimization.CustomCostFcn и набор Optimization.ReplaceStandardCost кому true, то контроллер игнорирует веса настройки функции стандартной стоимости в Weights.
Weights имеет следующие поля.
ManipulatedVariables - Манипулируемые веса переменной настройкиМанипулируемые переменные настроечные веса, которые штрафуют за отклонения от целей СН, указанные как вектор строки или массив неотрицательных значений. Вес по умолчанию для всех управляемых переменных: 0.
Чтобы использовать одни и те же веса по горизонту прогнозирования, укажите вектор строки длиной Nmv, где Nmv - количество манипулируемых переменных.
Чтобы изменять веса настройки по горизонту прогнозирования от времени k до времени k + p-1, укажите массив со столбцами Nmv и до строк p. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит управляемые веса настройки переменной для одного шага горизонта прогнозирования. Если указано меньше p строк, веса в последней строке используются для оставшихся шагов горизонта прогнозирования.
Чтобы указать цели СН во время выполнения, создайте nlmpcmoveopt объект и задайте его MVTarget собственность.
ManipulatedVariablesRate - Манипулируемые веса настройки переменной скоростиМанипулируемые веса настройки переменной скорости, которые штрафуют за большие изменения в движениях управления, указанные как вектор строки или массив неотрицательных значений. Вес по умолчанию для всех манипулируемых переменных скоростей равен 0.1.
Чтобы использовать одни и те же веса по горизонту прогнозирования, укажите вектор строки длиной Nmv, где Nmv - количество манипулируемых переменных.
Чтобы изменять веса настройки по горизонту прогнозирования от времени k до времени k + p-1, укажите массив со столбцами Nmv и до строк p. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит манипулированные веса настройки переменной скорости для одного шага горизонта прогнозирования. Если указано меньше p строк, веса в последней строке используются для оставшихся шагов горизонта прогнозирования.
OutputVariables - Веса настройки выходных переменныхВеса настройки выходной переменной, штрафующие за отклонение от выходных ссылок, заданные как вектор строки или массив неотрицательных значений. Вес по умолчанию для всех выходных переменных: 1.
Чтобы использовать одни и те же веса по горизонту прогнозирования, укажите вектор строки длиной Ny, где Ny - количество выходных переменных.
Чтобы изменить веса настройки по горизонту прогнозирования от времени k + 1 до времени k + p, укажите массив со столбцами Ny и до строк p. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит веса настройки выходной переменной для одного шага горизонта прогнозирования. Если указано меньше p строк, веса в последней строке используются для оставшихся шагов горизонта прогнозирования.
ECR - Вес переменной настройки Slack1e5 (по умолчанию) | положительный скалярВес настройки переменной Slack, заданный как положительный скаляр.
Optimization - Пользовательские функции оптимизации и решательПользовательские функции оптимизации и решатель, заданные как структура со следующими полями.
CustomCostFcn - Пользовательская функция затрат[] | строка | символьный вектор | дескриптор функцииПользовательская функция затрат, заданная как одна из следующих:
Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа
Optimization.CustomCostFcn = "myCostFunction";Обращаться к функции в текущей рабочей папке или по пути MATLAB
Optimization.CustomCostFcn = @myCostFunction;
Анонимная функция
Optimization.CustomCostFcn = @(X,U,e,data,params) myCostFunction(X,U,e,data,params);
Функция затрат должна иметь подпись:
function J = myCostFunction(X,U,e,data,params)Дополнительные сведения см. в разделе Определение функции затрат для нелинейного MPC.
ReplaceStandardCost - Флаг, указывающий на необходимость замены функции стандартных затратtrue (по умолчанию) | falseФлаг, указывающий, следует ли заменить функцию стандартных затрат функцией пользовательских затрат, указанной как одно из следующих значений:
true - Контроллер использует только пользовательские затраты в качестве целевой функции при оптимизации. В этом случае Weights свойство контроллера игнорируется.
false - Контроллер использует сумму стандартных и пользовательских затрат в качестве целевой функции при оптимизации.
Если пользовательская функция затрат не указана с помощью CustomCostFcn, то контроллер игнорирует RepalceStandardCost.
Дополнительные сведения см. в разделе Определение функции затрат для нелинейного MPC.
CustomEqConFcn - Пользовательская функция ограничения равенства[] (по умолчанию) | строка | символьный вектор | дескриптор функцииПользовательская функция ограничения равенства, заданная следующим образом:
Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа
Optimization.CustomEqConFcn = "myEqConFunction";Обращаться к функции в текущей рабочей папке или по пути MATLAB
Optimization.CustomEqConFcn = @myEqConFunction;
Анонимная функция
Optimization.CustomEqConFcn = @(X,U,data,params) myEqConFunction(X,U,data,params);
Ваша функция ограничения равенства должна иметь подпись:
function ceq = myEqConFunction(X,U,data,p1,p2,...)
Дополнительные сведения см. в разделе Указание ограничений для нелинейного MPC.
CustomIneqConFcn - Пользовательская функция ограничения неравенства[] (по умолчанию) | строка | символьный вектор | дескриптор функцииПользовательская функция ограничения неравенства, заданная следующим образом:
Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа
Optimization.CustomIneqConFcn = "myIneqConFunction";Обращаться к функции в текущей рабочей папке или по пути MATLAB
Optimization.CustomIneqConFcn = @myIneqConFunction;
Анонимная функция
Optimization.CustomIneqConFcn = @(X,U,e,data,params) myIneqConFunction(X,U,e,data,params);
Ваша функция ограничения равенства должна иметь подпись:
function cineq = myIneqConFunction(X,U,e,data,params)Дополнительные сведения см. в разделе Указание ограничений для нелинейного MPC.
CustomSolverFcn - Пользовательский решатель нелинейного программирования[] (по умолчанию) | строка | символьный вектор | дескриптор функцииПользовательская функция решателя нелинейного программирования, заданная как строка, символьный вектор или дескриптор функции. Если у вас нет программного обеспечения Optimization Toolbox™, необходимо указать собственный пользовательский решатель нелинейного программирования. Пользовательскую функцию решателя можно задать одним из следующих способов.
Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа
Optimization.CustomSolverFcn = "myNLPSolver";Обращаться к функции в текущей рабочей папке или по пути MATLAB
Optimization.CustomSolverFcn = @myNLPSolver;
Дополнительные сведения см. в разделе Настройка решателя оптимизации для нелинейного MPC.
SolverOptions - Параметры решателяfmincon | []Опции решателя, указанные как объект опций для fmincon или [].
При наличии ПО Optimization Toolbox SolverOptions содержит объект опций для fmincon решатель.
Если панель инструментов оптимизации отсутствует, SolverOptions является [].
Дополнительные сведения см. в разделе Настройка решателя оптимизации для нелинейного MPC.
RunAsLinearMPC - Флаг, указывающий, следует ли моделировать в качестве линейного контроллера"off" (по умолчанию) | "Adaptive" | "TimeVarying"Флаг, указывающий, следует ли моделировать как линейный контроллер, указанный как одно из следующих значений:
"off" - Моделирование контроллера как нелинейного контроллера с помощью модели нелинейного прогнозирования.
"Adaptive" - для каждого интервала управления линейная модель получается из заданного нелинейного состояния и выходных функций в текущей рабочей точке и используется по горизонту прогнозирования. Чтобы определить, обеспечивает ли адаптивный MPC-контроллер производительность, сравнимую с нелинейным, используйте эту опцию. Дополнительные сведения о адаптивном MPC см. в разделе Адаптивный MPC.
"TimeVarying" - для каждого интервала управления получают p линейных моделей из заданного нелинейного состояния и выводят функции в p рабочих точках, предсказанных из предыдущего интервала, по одной для каждого шага горизонта прогнозирования. Чтобы определить, обеспечивает ли линейный контроллер MPC с изменяющимся во времени производительностью, сравнимой с нелинейным контроллером, используйте эту опцию. Дополнительные сведения о изменяющемся во времени MPC см. в разделе Изменяющийся во времени MPC.
Для использования либо "Adaptive" или "TimeVarying" , ваш контроллер не должен иметь пользовательских ограничений и пользовательской функции затрат.
Пример моделирования нелинейного MPC-контроллера в качестве линейного контроллера см. в разделе Оптимизация и управление реактором периодического питания с использованием нелинейного MPC.
UseSuboptimalSolution - Флаг, указывающий, приемлемо ли неоптимальное решениеfalse (по умолчанию) | trueФлаг, указывающий, является ли неоптимальное решение приемлемым, указывается как логическое значение. Когда решатель нелинейного программирования достигает максимального количества итераций без нахождения решения (флаг выхода - 0), контроллер:
Замораживает значения СН, если UseSuboptimalSolution является false
Применяет неоптимальное решение, найденное решателем после окончательной итерации, если UseSuboptimalSolution является true
Чтобы указать максимальное количество итераций, используйте Optimization.SolverOptions.MaxIter.
MVInterpolationOrder - Порядок линейной интерполяции, используемый для перемещения блоков0 (по умолчанию) | 1Порядок линейной интерполяции, используемый при перемещении блоков, определяется одним из следующих параметров:
0 - Использование кусочно-постоянных регулируемых интервалов.
1 - использование кусочно-линейных регулируемых интервалов.
Если горизонт управления является скалярным, то контроллер игнорирует MVInterpolationOrder.
Дополнительные сведения о блокировании манипулируемых переменных см. в разделе Блокирование манипулируемых переменных.
Jacobian - якобинцы функций модели и пользовательских функций затрат и ограниченийЯкобианы функций модели и пользовательских функций затрат и ограничений, заданных как структура. Рекомендуется использовать якобинцев всякий раз, когда они доступны, поскольку они повышают эффективность оптимизации. Если якобиан для данной функции не указан, решатель нелинейного программирования должен численно вычислить якобиан.
Jacobian содержит следующие поля.
StateFcn - Якобян государственной функции[] (по умолчанию) | строка | символьный вектор | дескриптор функцииЯкобян государственной функции z от Model.StateFcn, указано как одно из следующих
Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа
Model.StateFcn = "myStateJacobian";Обращаться к функции в текущей рабочей папке или по пути MATLAB
Model.StateFcn = @myStateJacobian;
Анонимная функция
Model.StateFcn = @(x,u,params) myStateJacobian(x,u,params)
Дополнительные сведения см. в разделе Указание модели прогнозирования для нелинейного MPC.
OutputFcn - Якобиан выходной функции[] (по умолчанию) | строка | символьный вектор | дескриптор функцииЯкобиан выходной функции y от Model.OutputFcn, указано как одно из следующих:
Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа
Model.StateFcn = "myOutputJacobian";Обращаться к функции в текущей рабочей папке или по пути MATLAB
Model.StateFcn = @myOutputJacobian;
Анонимная функция
Model.StateFcn = @(x,u,params) myOutputJacobian(x,u,params)
Дополнительные сведения см. в разделе Указание модели прогнозирования для нелинейного MPC.
CustomCostFcn - Якобиан пользовательской функции затрат[] | строка | символьный вектор | дескриптор функцииЯкобиан пользовательской функции затрат J от Optimization.CustomCostFcn, указано как одно из следующих:
Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа
Jacobian.CustomCostFcn = "myCostJacobian";Обращаться к функции в текущей рабочей папке или по пути MATLAB
Jacobian.CustomCostFcn = @myCostJacobian;
Анонимная функция
Jacobian.CustomCostFcn = @(X,U,e,data,params) myCostJacobian(X,U,e,data,params)
Ваша функция Jacobian должна иметь подпись:
function [G,Gmv,Ge] = myCostJacobian(X,U,e,data,params)Дополнительные сведения см. в разделе Определение функции затрат для нелинейного MPC.
CustomEqConFcn - Якобиан о пользовательских ограничениях равенства[] (по умолчанию) | строка | символьный вектор | дескриптор функцииЯкобян о пользовательских ограничениях равенства ceq от Optimization.CustomEqConFcn, указано как одно из следующих:
Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа
Jacobian.CustomEqConFcn = "myEqConJacobian";Обращаться к функции в текущей рабочей папке или по пути MATLAB
Jacobian.CustomEqConFcn = @myEqConJacobian;
Анонимная функция
Jacobian.CustomEqConFcn = @(X,U,data,params) myEqConJacobian(X,U,data,params);
Ваше ограничение равенства якобинская функция должна иметь подпись:
function [G,Gmv] = myEqConJacobian(X,U,data,params)Дополнительные сведения см. в разделе Указание ограничений для нелинейного MPC.
CustomIneqConFcn - Якобян о пользовательских ограничениях неравенства[] (по умолчанию) | строка | символьный вектор | дескриптор функцииЯкобян о пользовательских ограничениях неравенства c от Optimization.CustomIneqConFcn, указано как одно из следующих:
Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа
Jacobian.CustomEqConFcn = "myIneqConJacobian";Обращаться к функции в текущей рабочей папке или по пути MATLAB
Jacobian.CustomEqConFcn = @myIneqConJacobian;
Анонимная функция
Jacobian.CustomEqConFcn = @(X,U,data,params) myIneqConJacobian(X,U,data,params);
Ваше ограничение неравенства якобинская функция должна иметь подпись:
function [G,Gmv,Ge] = myIneqConJacobian(X,U,data,params)Дополнительные сведения см. в разделе Указание ограничений для нелинейного MPC.
nlmpcmove | Вычислите оптимальное действие управления для нелинейного контроллера MPC |
validateFcns | Изучение модели прогнозирования и пользовательских функций nlmpc или nlmpcMultistage объекты для потенциальных проблем |
convertToMPC | Новообращенный nlmpc объект в один или несколько mpc объекты |
createParameterBus | Создание объекта шины Simulink и настройка блока Bus Creator для передачи параметров модели в блок нелинейного контроллера MPC |
Создайте нелинейный контроллер MPC с четырьмя состояниями, двумя выходами и одним входом.
nx = 4; ny = 2; nu = 1; nlobj = nlmpc(nx,ny,nu);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.
Укажите время выборки и горизонты контроллера.
Ts = 0.1; nlobj.Ts = Ts; nlobj.PredictionHorizon = 10; nlobj.ControlHorizon = 5;
Укажите функцию состояния контроллера, которая находится в файле pendulumDT0.m. Эта дискретно-временная модель интегрирует непрерывную временную модель, определенную в pendulumCT0.m с использованием многоступенчатого прямого метода Эйлера.
nlobj.Model.StateFcn = "pendulumDT0";
nlobj.Model.IsContinuousTime = false;Функция состояния дискретного времени использует необязательный параметр, время выборки Ts, для интеграции модели непрерывного времени. Поэтому необходимо указать количество дополнительных параметров как 1.
nlobj.Model.NumberOfParameters = 1;
Укажите функцию вывода для контроллера. В этом случае определите первое и третье состояния как выходные. Даже если эта функция вывода не использует необязательный параметр времени выборки, необходимо указать параметр в качестве входного аргумента (Ts).
nlobj.Model.OutputFcn = @(x,u,Ts) [x(1); x(3)];
Проверка функций модели прогнозирования для номинальных состояний x0 и номинальные входы u0. Поскольку в модели прогнозирования используется пользовательский параметр, необходимо передать этот параметр в validateFcns.
x0 = [0.1;0.2;-pi/2;0.3];
u0 = 0.4;
validateFcns(nlobj, x0, u0, [], {Ts});Model.StateFcn is OK. Model.OutputFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.
Создайте нелинейный контроллер MPC с тремя состояниями, одним выходом и четырьмя входами. Первые два входа являются измеренными возмущениями, третий вход - управляемой переменной, а четвертый вход - неизмеренным возмущением.
nlobj = nlmpc(3,1,'MV',3,'MD',[1 2],'UD',4);
Для просмотра состояния контроллера, выходных и входных размеров и индексов используйте Dimensions свойства контроллера.
nlobj.Dimensions
ans = struct with fields:
NumberOfStates: 3
NumberOfOutputs: 1
NumberOfInputs: 4
MVIndex: 3
MDIndex: [1 2]
UDIndex: 4
Укажите время и горизонты выборки контроллера.
nlobj.Ts = 0.5; nlobj.PredictionHorizon = 6; nlobj.ControlHorizon = 3;
Укажите функцию состояния модели прогнозирования, которая находится в файле exocstrStateFcnCT.m.
nlobj.Model.StateFcn = 'exocstrStateFcnCT';Укажите функцию вывода модели прогнозирования, которая находится в файле exocstrOutputFcn.m.
nlobj.Model.OutputFcn = 'exocstrOutputFcn';Проверка функций модели прогнозирования с использованием начальной рабочей точки в качестве номинального условия для тестирования и установки состояния неизмеренного возмущения. x0(3)Кому 0. Поскольку модель измерила возмущения, необходимо передать их в validateFcns.
x0 = [311.2639; 8.5698; 0]; u0 = [10; 298.15; 298.15]; validateFcns(nlobj,x0,u0(3),u0(1:2)');
Model.StateFcn is OK. Model.OutputFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.
Создайте нелинейный контроллер MPC с шестью состояниями, шестью выходами и четырьмя входами.
nx = 6; ny = 6; nu = 4; nlobj = nlmpc(nx,ny,nu);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.
Укажите время и горизонты выборки контроллера.
Ts = 0.4; p = 30; c = 4; nlobj.Ts = Ts; nlobj.PredictionHorizon = p; nlobj.ControlHorizon = c;
Укажите функцию состояния модели прогнозирования и якобиан функции состояния. В этом примере используется модель летающего робота.
nlobj.Model.StateFcn = "FlyingRobotStateFcn"; nlobj.Jacobian.StateFcn = "FlyingRobotStateJacobianFcn";
Укажите пользовательскую функцию затрат для контроллера, который заменит функцию стандартных затрат.
nlobj.Optimization.CustomCostFcn = @(X,U,e,data) Ts*sum(sum(U(1:p,:))); nlobj.Optimization.ReplaceStandardCost = true;
Укажите пользовательскую функцию ограничения для контроллера.
nlobj.Optimization.CustomEqConFcn = @(X,U,data) X(end,:)';
Проверка модели прогнозирования и пользовательских функций в начальных состояниях (x0) и начальные входы (u0) робота.
x0 = [-10;-10;pi/2;0;0;0]; u0 = zeros(nu,1); validateFcns(nlobj,x0,u0);
Model.StateFcn is OK. Jacobian.StateFcn is OK. No output function specified. Assuming "y = x" in the prediction model. Optimization.CustomCostFcn is OK. Optimization.CustomEqConFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.
Создайте нелинейный контроллер MPC с четырьмя состояниями, одной выходной переменной, одной управляемой переменной и одним измеренным возмущением.
nlobj = nlmpc(4,1,'MV',1,'MD',2);
Укажите время и горизонты выборки контроллера.
nlobj.PredictionHorizon = 10; nlobj.ControlHorizon = 3;
Укажите функцию состояния модели прогнозирования.
nlobj.Model.StateFcn = 'oxidationStateFcn';Укажите функцию вывода модели прогнозирования и масштабный коэффициент выходной переменной.
nlobj.Model.OutputFcn = @(x,u) x(3); nlobj.OutputVariables.ScaleFactor = 0.03;
Задайте изменяемые зависимости и масштабный коэффициент.
nlobj.ManipulatedVariables.Min = 0.0704; nlobj.ManipulatedVariables.Max = 0.7042; nlobj.ManipulatedVariables.ScaleFactor = 0.6;
Укажите измеренный масштабный коэффициент возмущения.
nlobj.MeasuredDisturbances.ScaleFactor = 0.5;
Вычислите состояние и входные рабочие условия для трех линейных контроллеров MPC с помощью fsolve функция.
options = optimoptions('fsolve','Display','none'); uLow = [0.38 0.5]; xLow = fsolve(@(x) oxidationStateFcn(x,uLow),[1 0.3 0.03 1],options); uMedium = [0.24 0.5]; xMedium = fsolve(@(x) oxidationStateFcn(x,uMedium),[1 0.3 0.03 1],options); uHigh = [0.15 0.5]; xHigh = fsolve(@(x) oxidationStateFcn(x,uHigh),[1 0.3 0.03 1],options);
Создайте линейные контроллеры MPC для каждого из этих номинальных условий.
mpcobjLow = convertToMPC(nlobj,xLow,uLow); mpcobjMedium = convertToMPC(nlobj,xMedium,uMedium); mpcobjHigh = convertToMPC(nlobj,xHigh,uHigh);
Можно также создать несколько контроллеров, используя массивы номинальных условий. Число строк в массивах определяет число создаваемых контроллеров. Линейные контроллеры возвращаются в виде массива ячеек mpc объекты.
u = [uLow; uMedium; uHigh]; x = [xLow; xMedium; xHigh]; mpcobjs = convertToMPC(nlobj,x,u);
Просмотр свойств mpcobjLow контроллер.
mpcobjLow
MPC object (created on 23-Apr-2021 11:07:17):
---------------------------------------------
Sampling time: 1 (seconds)
Prediction Horizon: 10
Control Horizon: 3
Plant Model:
--------------
1 manipulated variable(s) -->| 4 states |
| |--> 1 measured output(s)
1 measured disturbance(s) -->| 2 inputs |
| |--> 0 unmeasured output(s)
0 unmeasured disturbance(s) -->| 1 outputs |
--------------
Indices:
(input vector) Manipulated variables: [1 ]
Measured disturbances: [2 ]
(output vector) Measured outputs: [1 ]
Disturbance and Noise Models:
Output disturbance model: default (type "getoutdist(mpcobjLow)" for details)
Measurement noise model: default (unity gain after scaling)
Weights:
ManipulatedVariables: 0
ManipulatedVariablesRate: 0.1000
OutputVariables: 1
ECR: 100000
State Estimation: Default Kalman Filter (type "getEstimator(mpcobjLow)" for details)
Constraints:
0.0704 <= u1 <= 0.7042, u1/rate is unconstrained, y1 is unconstrained
Создайте нелинейный контроллер MPC с шестью состояниями, шестью выходами и четырьмя входами.
nx = 6; ny = 6; nu = 4; nlobj = nlmpc(nx,ny,nu);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.
Укажите время и горизонты выборки контроллера.
Ts = 0.4; p = 30; c = 4; nlobj.Ts = Ts; nlobj.PredictionHorizon = p; nlobj.ControlHorizon = c;
Укажите функцию состояния модели прогнозирования и якобиан функции состояния. В этом примере используется модель летающего робота.
nlobj.Model.StateFcn = "FlyingRobotStateFcn"; nlobj.Jacobian.StateFcn = "FlyingRobotStateJacobianFcn";
Укажите пользовательскую функцию затрат для контроллера, который заменит функцию стандартных затрат.
nlobj.Optimization.CustomCostFcn = @(X,U,e,data) Ts*sum(sum(U(1:p,:))); nlobj.Optimization.ReplaceStandardCost = true;
Укажите пользовательскую функцию ограничения для контроллера.
nlobj.Optimization.CustomEqConFcn = @(X,U,data) X(end,:)';
Задайте линейные ограничения для переменных, которыми манипулируют.
for ct = 1:nu nlobj.MV(ct).Min = 0; nlobj.MV(ct).Max = 1; end
Проверка модели прогнозирования и пользовательских функций в начальных состояниях (x0) и начальные входы (u0) робота.
x0 = [-10;-10;pi/2;0;0;0]; u0 = zeros(nu,1); validateFcns(nlobj,x0,u0);
Model.StateFcn is OK. Jacobian.StateFcn is OK. No output function specified. Assuming "y = x" in the prediction model. Optimization.CustomCostFcn is OK. Optimization.CustomEqConFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.
Вычислите оптимальное состояние и управляемые переменные траектории, которые возвращаются в info.
[~,~,info] = nlmpcmove(nlobj,x0,u0);
Slack variable unused or zero-weighted in your custom cost function. All constraints will be hard.
Постройте график оптимальных траекторий.
FlyingRobotPlotPlanning(info)
Optimal fuel consumption = 4.712383



Создайте нелинейный контроллер MPC с четырьмя состояниями, двумя выходами и одним входом.
nlobj = nlmpc(4,2,1);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.
Укажите время выборки и горизонты контроллера.
Ts = 0.1; nlobj.Ts = Ts; nlobj.PredictionHorizon = 10; nlobj.ControlHorizon = 5;
Укажите функцию состояния контроллера, которая находится в файле pendulumDT0.m. Эта дискретно-временная модель интегрирует непрерывную временную модель, определенную в pendulumCT0.m с использованием многоступенчатого прямого метода Эйлера.
nlobj.Model.StateFcn = "pendulumDT0";
nlobj.Model.IsContinuousTime = false;Модель прогнозирования использует необязательный параметр, Ts, для представления времени выборки. Укажите количество параметров.
nlobj.Model.NumberOfParameters = 1;
Укажите функцию вывода модели, передав параметр времени выборки в качестве входного аргумента.
nlobj.Model.OutputFcn = @(x,u,Ts) [x(1); x(3)];
Определите стандартные ограничения для контроллера.
nlobj.Weights.OutputVariables = [3 3]; nlobj.Weights.ManipulatedVariablesRate = 0.1; nlobj.OV(1).Min = -10; nlobj.OV(1).Max = 10; nlobj.MV.Min = -100; nlobj.MV.Max = 100;
Проверка функций модели прогнозирования.
x0 = [0.1;0.2;-pi/2;0.3];
u0 = 0.4;
validateFcns(nlobj, x0, u0, [], {Ts});Model.StateFcn is OK. Model.OutputFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.
Измеримы только два состояния растений. Поэтому создайте расширенный фильтр Калмана для оценки четырех состояний установки. Его функция перехода состояния определена в pendulumStateFcn.m и его измерительная функция определена в pendulumMeasurementFcn.m.
EKF = extendedKalmanFilter(@pendulumStateFcn,@pendulumMeasurementFcn);
Определите начальные условия для моделирования, инициализируйте расширенное состояние фильтра Калмана и укажите нулевое начальное управляемое значение переменной.
x = [0;0;-pi;0]; y = [x(1);x(3)]; EKF.State = x; mv = 0;
Укажите выходное ссылочное значение.
yref = [0 0];
Создание nlmpcmoveopt и укажите параметр времени выборки.
nloptions = nlmpcmoveopt;
nloptions.Parameters = {Ts};Запустить моделирование для 10 секунд. В течение каждого контрольного интервала:
Исправьте предыдущий прогноз с помощью текущего измерения.
Вычисление оптимальных перемещений управления с помощью nlmpcmove. Эта функция возвращает вычисленные оптимальные последовательности в nloptions. Передача обновленного объекта опций nlmpcmove в следующем интервале управления обеспечивает начальные догадки для оптимальных последовательностей.
Спрогнозировать состояния модели.
Примените первое вычисленное оптимальное контрольное перемещение к установке, обновив состояния установки.
Генерируйте данные датчика с белым шумом.
Сохраните состояния завода.
Duration = 10; xHistory = x; for ct = 1:(Duration/Ts) % Correct previous prediction xk = correct(EKF,y); % Compute optimal control moves [mv,nloptions] = nlmpcmove(nlobj,xk,mv,yref,[],nloptions); % Predict prediction model states for the next iteration predict(EKF,[mv; Ts]); % Implement first optimal control move x = pendulumDT0(x,mv,Ts); % Generate sensor data y = x([1 3]) + randn(2,1)*0.01; % Save plant states xHistory = [xHistory x]; end
Постройте график результирующих траекторий состояния.
figure subplot(2,2,1) plot(0:Ts:Duration,xHistory(1,:)) xlabel('time') ylabel('z') title('cart position') subplot(2,2,2) plot(0:Ts:Duration,xHistory(2,:)) xlabel('time') ylabel('zdot') title('cart velocity') subplot(2,2,3) plot(0:Ts:Duration,xHistory(3,:)) xlabel('time') ylabel('theta') title('pendulum angle') subplot(2,2,4) plot(0:Ts:Duration,xHistory(4,:)) xlabel('time') ylabel('thetadot') title('pendulum velocity')

Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.