В этом примере показано, как идентифицировать параметры комплекса все же искусственная нелинейная система дискретного времени с одним входом и одним выходом. Система была первоначально предложена и обсуждена Нарендрой и Ли в статье
K. S. Narendra and S.-M. Li. "Neural networks in control systems". In Mathematical Perspectives on Neural Networks (P. Smolensky, M. C. Mozer, and D. E. Rumelhard, eds.), Chapter 11, pages 347-394, Lawrence Erlbaum Associates, Hillsdale, NJ, USA, 1996.
и был рассмотрен в многочисленных идентификационных примерах дискретного времени.
Уравнения дискретного времени системы Narendra-лития:
x1(t+Ts) = (x1(t)/(1+x1(t)^2)+p(1))*sin(x2(t)) x2(t+Ts) = x2(t)*cos(x2(t)) + x1(t)*exp(-(x1(t)^2+x2(t)^2)/p(2)) + u(t)^3/(1+u(t)^2+p(3)*cos(x1(t)+x2(t))
y(t) = x1(t)/(1+p(4)*sin(x2(t))+p(5)*sin(x1(t)))
где x1 (t) и x2 (t) являются состояниями, u (t) входной сигнал, y (t) выходной сигнал и p вектор параметра с 5 элементами.
С точки зрения файла модели IDNLGREY нет никакого различия между непрерывным - и системой дискретного времени. Файл модели Narendra-Li должен поэтому возвратить дуплекс вектора обновления состояния и выход y, и должен взять t (время), x (вектор состояния), u (вход), p (параметр (параметры)) и varargin как входные параметры:
function [dx, y] = narendrali_m(t, x, u, p, varargin) %NARENDRALI_M A discrete-time Narendra-Li benchmark system.
% Output equation. y = x(1)/(1+p(4)*sin(x(2)))+x(2)/(1+p(5)*sin(x(1)));
% State equations. dx = [(x(1)/(1+x(1)^2)+p(1))*sin(x(2)); ... % State 1. x(2)*cos(x(2))+x(1)*exp(-(x(1)^2+x(2)^2)/p(2)) ... % State 2. + u(1)^3/(1+u(1)^2+p(3)*cos(x(1)+x(2))) ... ];
Заметьте, что мы здесь приняли решение уплотнить все 5 параметров в один вектор параметра, где на i:th элемент ссылаются в обычном MATLAB путь, т.е. через p (i).
С этим файлом модели как основание мы затем создаем объект IDNLGREY, отражающий ситуацию с моделированием. Стоящий выделения вот то, что дискретность модели задана через положительное значение Ts (= 1 секунда). Заметьте также, что Параметры только содержат один элемент, вектор параметра 5 на 1, и что SETPAR используются, чтобы указать, что все компоненты этого вектора строго положительны.
FileName = 'narendrali_m'; % File describing the model structure. Order = [1 1 2]; % Model orders [ny nu nx]. Parameters = {[1.05; 7.00; 0.52; 0.52; 0.48]}; % True initial parameters (a vector). InitialStates = zeros(2, 1); % Initial value of initial states. Ts = 1; % Time-discrete system with Ts = 1s. nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts, 'Name', ... 'Discrete-time Narendra-Li benchmark system', ... 'TimeUnit', 's'); nlgr = setpar(nlgr, 'Minimum', {eps(0)*ones(5, 1)});
Сводные данные вводимой структуры модели Narendra-лития получены посредством команды PRESENT:
present(nlgr);
nlgr = Discrete-time nonlinear grey-box model defined by 'narendrali_m' (MATLAB file): x(t+Ts) = F(t, u(t), x(t), p1) y(t) = H(t, u(t), x(t), p1) + e(t) with 1 input(s), 2 state(s), 1 output(s), and 5 free parameter(s) (out of 5). Inputs: u(1) (t) States: Initial value x(1) x1(t) xinit@exp1 0 (fixed) in [-Inf, Inf] x(2) x2(t) xinit@exp1 0 (fixed) in [-Inf, Inf] Outputs: y(1) (t) Parameters: Value p1(1) p1 1.05 (estimated) in ]0, Inf] p1(2) 7 (estimated) in ]0, Inf] p1(3) 0.52 (estimated) in ]0, Inf] p1(4) 0.52 (estimated) in ]0, Inf] p1(5) 0.48 (estimated) in ]0, Inf] Name: Discrete-time Narendra-Li benchmark system Sample time: 1 seconds Status: Created by direct construction or transformation. Not estimated. More information in model's "Report" property.
Две записи данных ввода - вывода с 300 выборками каждый, один для оценки и один в целях валидации, доступен. Входной вектор, используемый и в этих записях, является тем же самым и был выбран в качестве суммы двух синусоид:
u(t) = sin(2*pi*t/10) + sin(2*pi*t/25)
для t = 0, 1..., 299 секунд. Мы создаем два различных объекта IDDATA содержать эти две записи данных, ze для оценки и zv в целях валидации.
load(fullfile(matlabroot, 'toolbox', 'ident', 'iddemos', 'data', 'narendralidata')); ze = iddata(y1, u, Ts, 'Tstart', 0, 'Name', 'Narendra-Li estimation data', ... 'ExperimentName', 'ze'); zv = iddata(y2, u, Ts, 'Tstart', 0, 'Name', 'Narendra-Li validation data', ... 'ExperimentName', 'zv');
Данные ввода - вывода, которые будут использоваться в оценке, показывают в окне графика.
figure('Name', ze.Name);
plot(ze);
Рисунок 1: данные ввода - вывода из Narendra-лития тестируют системы в сравнении с эталоном.
Давайте теперь использовать COMPARE, чтобы исследовать производительность первоначальной модели Narendra-Li. Симулированные и измеренные выходные параметры для ze
и zv
сгенерированы, и подгонка к ze
показан по умолчанию. Используйте контекстное меню графика, чтобы переключить эксперимент данных на zv
. Подгонка не то, что плохо для любого набора данных (приблизительно 74%). Здесь мы должны указать, что COMPARE значением по умолчанию оценивает вектор начального состояния, в этом случае один вектор начального состояния для ze
и другой для zv
.
compare(merge(ze, zv), nlgr);
Рисунок 2: Сравнение между истинными выходными параметрами и симулированными выходными параметрами первоначальной модели Narendra-Li.
%%4 % By looking at the prediction errors obtained via PE, we realize that the % initial Narendra-Li model shows some systematic and periodic differences % as compared to the true outputs. pe(merge(ze, zv), nlgr);
Рисунок 3: ошибки Прогноза получены с первоначальной моделью Narendra-Li. Используйте контекстное меню, чтобы переключиться между экспериментами.
Для того, чтобы уменьшать систематические несоответствия, мы оцениваем все 5 параметров структуры модели Narendra-лития с помощью NLGREYEST. Оценка выполняется на основе набора данных оценки ze только.
opt = nlgreyestOptions('Display', 'on'); nlgr = nlgreyest(ze, nlgr, opt);
COMPARE еще раз используется, чтобы исследовать производительность предполагаемой модели, но на этот раз мы используем внутренне сохраненный вектор начального состояния модели ([0; 0] для обоих экспериментов) без любой оценки вектора начального состояния.
clf opt = compareOptions('InitialCondition','m'); compare(merge(ze, zv), nlgr, opt);
Рисунок 4: Сравнение между истинными выходными параметрами и симулированными выходными параметрами предполагаемой модели Narendra-Li.
Улучшение после оценки является значительным, который, возможно, лучше всего проиллюстрирован через график ошибок прогноза:
figure; pe(merge(ze, zv), nlgr);
Рисунок 5: ошибки Прогноза получены с предполагаемой моделью Narendra-Li.
Степень моделирования предполагаемой модели Narendra-Li также подтверждена посредством корреляционного анализа, обеспеченного через RESID:
figure('Name', [nlgr.Name ': residuals of estimated model']); resid(zv, nlgr);
Рисунок 6: Остаточные значения получены с предполагаемой моделью Narendra-Li.
На самом деле полученные параметры модели также вполне близко к тем, которые использовались, чтобы сгенерировать истинные выходные параметры модели:
disp(' True Estimated parameter vector'); ptrue = [1; 8; 0.5; 0.5; 0.5]; fprintf(' %1.4f %1.4f\n', [ptrue'; getpvec(nlgr)']);
True Estimated parameter vector 1.0000 1.0000 8.0000 8.0082 0.5000 0.5003 0.5000 0.4988 0.5000 0.5018
Некоторые дополнительные качественные результаты модели (функция потерь, FPE Акэйка и предполагаемые стандартные отклонения параметров модели) затем обеспечиваются через команду PRESENT:
present(nlgr);
nlgr = Discrete-time nonlinear grey-box model defined by 'narendrali_m' (MATLAB file): x(t+Ts) = F(t, u(t), x(t), p1) y(t) = H(t, u(t), x(t), p1) + e(t) with 1 input(s), 2 state(s), 1 output(s), and 5 free parameter(s) (out of 5). Inputs: u(1) u1(t) States: Initial value x(1) x1(t) xinit@exp1 0 (fixed) in [-Inf, Inf] x(2) x2(t) xinit@exp1 0 (fixed) in [-Inf, Inf] Outputs: y(1) y1(t) Parameters: Value Standard Deviation p1(1) p1 0.999993 0.0117615 (estimated) in ]0, Inf] p1(2) 8.00821 0.885988 (estimated) in ]0, Inf] p1(3) 0.500319 0.0313092 (estimated) in ]0, Inf] p1(4) 0.498842 0.264806 (estimated) in ]0, Inf] p1(5) 0.501761 0.30998 (estimated) in ]0, Inf] Name: Discrete-time Narendra-Li benchmark system Sample time: 1 seconds Status: Termination condition: Change in parameters was less than the specified tolerance.. Number of iterations: 16, Number of function evaluations: 17 Estimated using Solver: FixedStepDiscrete; Search: lsqnonlin on time domain data "Narendra-Li estimation data". Fit to estimation data: 99.44% FPE: 9.23e-05, MSE: 8.927e-05 More information in model's "Report" property.
Что касается систем ввода-вывода непрерывного времени, также возможно использовать ШАГ в системах ввода-вывода дискретного времени. Давайте сделаем это для двух различных уровней шага, 1 и 2:
figure('Name', [nlgr.Name ': step responses of estimated model']); t = (-5:50)'; step(nlgr, 'b', t, stepDataOptions('StepAmplitude',1)); line(t, step(nlgr, t, stepDataOptions('StepAmplitude',2)), 'color', 'g'); grid on; legend('0 -> 1', '0 -> 2', 'Location', 'NorthWest');
Рисунок 7: Переходные процессы получены с предполагаемой моделью Narendra-Li.
Мы завершаем этот пример путем сравнения производительности предполагаемой модели IDNLGREY Narendra-Li с некоторыми основными линейными моделями. Подгонка, полученная для последних моделей, значительно ниже, чем, что возвращено для предполагаемой модели IDNLGREY.
nk = delayest(ze); arx22 = arx(ze, [2 2 nk]); % Second order linear ARX model. arx33 = arx(ze, [3 3 nk]); % Third order linear ARX model. arx44 = arx(ze, [4 4 nk]); % Fourth order linear ARX model. oe22 = oe(ze, [2 2 nk]); % Second order linear OE model. oe33 = oe(ze, [3 3 nk]); % Third order linear OE model. oe44 = oe(ze, [4 4 nk]); % Fourth order linear OE model. clf fig = gcf; Pos = fig.Position; fig.Position = [Pos(1:2)*0.7, Pos(3)*1.3, Pos(4)*1.3]; compare(zv, nlgr, 'b', arx22, 'm-', arx33, 'm:', arx44, 'm--', ... oe22, 'g-', oe33, 'g:', oe44, 'g--');
Рисунок 8: Сравнение между истинным выходом и симулированными выходными параметрами многих предполагаемых моделей Narendra-Li.
В этом примере мы использовали вымышленную систему сравнительного теста Narendra-лития дискретного времени, чтобы проиллюстрировать основы для выполнения дискретного времени моделирование IDNLGREY.