Я использую MATLAB для создания кода, который выполняет автоматическую настройку трех коэффициентов усиления ПИД-регулятора. То, как я думаю об этом, заключается в том, чтобы свести к минимуму ошибку (разницу между желаемым состоянием и полученной) моей системы, для этого я закодировал функцию, которая принимает значения ПИД-усиления в качестве входных параметров и возвращает вычисленную ошибку, а именно:Минимизация функции возврата массива с использованием «fminunc»
errors_vector = closedLoopSimulation(pidGains)
Поскольку у меня есть три заданных точки (входные команды), то размерность выходного сигнала errors_vector
3 * N, где N представляет собой число выборок раз, когда я (1000 в моем случае). Так что это функция, которую я хочу, чтобы свести к минимуму, и для этого, я попытался с помощью fminunc
команды, а именно:
pidGains_ini = [2.4 0.1 0.4];
func = @closedLoopSimulation;
[pid, fval] = fminunc(func, pidGains_ini)
Однако, когда я бегу последний кусок кода, я получаю эту ошибку:
User supplied objective function must return a scalar value.
, что явно связано с тем, что errors_vector
представляет собой массив 3 * 1000, а не скаляр.
Мои вопросы были бы, с точки зрения программирования, есть способ, которым я могу сделать fminunc
минимизировать функции, возвращающие массивы?
С другой стороны, и с точки зрения теории управления, существует ли другой способ, который я могу оптимизировать для усиления ПИД-регулятора автоматически?
Надеюсь, я сделал себе достаточно ясно.
Благодаря
Не могли бы вы объяснить errors_vector лучше? Понятно, что за каждый шаг времени есть ошибка, но почему на каждом временном шаге есть три? Вы управляете тремя выходами одновременно? – tvo
Метод [Ziegler-Nichols] (https://en.wikipedia.org/wiki/Ziegler-Nichols_method) и метод [Relay] (http://www.controleng.com/search/search-single-display/ relay-method-automates-pid-loop-tuning/4a5774decc.html) являются двумя популярными схемами настройки ПИД-регулятора. – horchler
@tvo, да, это то, что я делаю. Моя система MIMO, имеющая 3 команды ввода и 3 усилия управления, выводимые с ПИД-регулятора. –