В этом разделе описывается, как программное обеспечение оценивает выход нелинейных оценщиков и использует этот выход для вычисления отклика нелинейной модели ARX.
Оценка предсказанного выхода нелинейности для определенного x значений регрессора требует, чтобы вы сначала извлекли F нелинейности и регрессоры из модели:
F = m.Nonlinearity; x = getreg(m,'all',data) % computes regressors
Оцените F (x):
y = evaluate(F,x)
где x
- вектор-строка значений регрессора.
Можно также вычислить предсказанные выходные значения в несколько моментов времени путем оценки F для нескольких регрессорных векторов одновременно:
y = evaluate(F,[x1;x2;x3])
Этот пример показывает, как программное обеспечение вычисляет моделируемый и предсказанный выход нелинейной модели ARX в результате оценки выхода своей оценки нелинейности для заданных значений регрессора.
Оценка и исследование нелинейной модели ARX
Оцените нелинейную модель ARX с нелинейностью сигмоидной сети.
load twotankdata estData = iddata(y,u,0.2,'Tstart',0); M = nlarx(estData,[1 1 0],'sig');
Смотрите свойства модели и результат оценки.
present(M)
Nonlinear ARX model with 1 output and 1 input Inputs: u1 Outputs: y1 Regressors: Linear regressors in variables y1, u1 Output function: Sigmoid Network with 10 units Sample time: 0.2 seconds Status: Estimated using NLARX on time domain data "estData". Fit to estimation data: 96.31% (prediction focus) FPE: 4.804e-05, MSE: 4.666e-05
Эта команда предоставляет информацию о входных и выходных переменных, регрессорах и оценщике нелинейности.
Осмотрите устройство оценки нелинейности.
NL = M.Nonlinearity; % equivalent to M.nl class(NL) % nonlinearity class
ans = 'sigmoidnet'
display(NL) % equivalent to NL
NL = Sigmoid Network Inputs: y1(t-1), u1(t) Output: y1 Nonlinear Function: Sigmoid network with 10 units. Linear Function: initialized to [-0.161 -0.105] Output Offset: initialized to 0.271 Input: [1x1 idpack.Channel] Output: [1x1 idpack.Channel] LinearFcn: [1x1 nlident.internal.UseProjectedLinearFcn] NonlinearFcn: [1x1 nlident.internal.RidgenetFcn] Offset: [1x1 nlident.internal.ChooseableOffset]
Осмотрите значения параметров сигмоидной сети.
NL.Parameters;
Модельный выход:
y1 (t) = f (y1 (t-1), u1 (t))
где f - функция сигмоидной сети. Модели регрессоров y1 (t-1) и u1 (t) являются входами к блоку оценки нелинейности. Время t является дискретной переменной, представляющей kT, где k = 0, 1, ... ,
и T является интервалом дискретизации. В этом примере T=0.2
второе.
Выходное уравнение предсказания:
yp (t) = f (y1_meas (t-1), u1 _ meas (t))
где yp (t) - предсказанное значение отклика в момент времени t. y1_meas (t-1) и u1_meas (t) - измеренные выходные и входные значения в моменты времени t-1 и t, соответственно.
Вычисление предсказанного отклика включает в себя:
Вычисление значений регрессора из входно-выходных данных.
Оценка нелинейности для заданных значений регрессора.
Чтобы вычислить предсказанное значение отклика с помощью начальных условий и токового входа:
Оцените модель из данных и получите параметры нелинейности.
load twotankdata estData = iddata(y,u,0.2,'Tstart',0); M = nlarx(estData,[1 1 0],'sig'); NL = M.Nonlinearity;
Задайте нулевые начальные состояния.
x0 = 0;
Модель имеет одно состояние, потому что существует только один отложенный термин y1(t-1)
. Количество состояний равно sum(getDelayInfo(M))
.
Вычислите предсказанный выход в момент времени t = 0.
RegValue = [0,estData.u(1)]; % input to nonlinear function f
yp_0 = evaluate(NL,RegValue);
RegValue
- вектор регрессоров в t=0
. Предсказанный выход - yp (t = 0) = f (y1_meas (t = -1), u1 _ meas (t = 0)). Что касается переменного MATLAB, этот выход f(0,estData.u(1))
, где
y1_meas (t = 0) - измеренное выходное значение в t=0
, что означает estData.y(1)
.
u1_meas (t = 1) является второй выборкой
входных данных estData.u(2)
.
Выполните предсказание с одним шагом вперед в любое время значения для которого доступны данные.
RegMat = getreg(M,[],estData,x0); yp = evaluate(NL,RegMat.Variables);
Этот код получает матрицу регрессоров RegMat
для всех временных выборок используя getreg
. RegMat
имеет столько строк, сколько существует временных выборок, и столько столбцов, сколько регрессоров в модели - две, в этом примере.
Эти шаги эквивалентны предсказанной реакции, вычисленной за один шаг с использованием предсказания:
yp_direct = predict(M,estData,1,'InitialState',x0); % compare t = estData.SamplingInstants; plot(t,yp, t,yp_direct.OutputData,'.')
Модельный выход:
y1 (t) = f (y1 (t-1), u1 (t))
где f - функция сигмоидной сети. Модели регрессоров y1 (t-1) и u1 (t) являются входами к блоку оценки нелинейности. Время t является дискретной переменной, представляющей kT, где k = 0, 1,.., и T является интервалом дискретизации. В этом примере T = 0,2 секунды.
Моделируемый выход:
ys (t) = f (ys (t-1), u1 _ meas (t))
где ys (t) - моделируемое значение отклика в момент t. Уравнение симуляции аналогично уравнению предсказания, за исключением того, что прошедшее выходное значение ys(t-1)
результаты симуляции на предыдущем временном шаге, а не измеренное выходное значение.
Вычисление симулированного отклика включает в себя:
Вычисление значений регрессора из входно-выходных данных с помощью моделируемых выходных значений.
Оценка нелинейности для заданных значений регрессора.
Чтобы вычислить моделируемое значение отклика с помощью начальных условий и токового входа:
Оцените модель из данных и получите параметры нелинейности.
load twotankdata estData = iddata(y,u,0.2,'Tstart',0); M = nlarx(estData,[1 1 0],'sig'); NL = M.Nonlinearity;
Задайте нулевые начальные состояния.
x0 = 0;
Модель имеет одно состояние, потому что существует только один отложенный термин y1 (t-1). Количество состояний равно sum(getDelayInfo(M))
.
Вычислите моделируемый выход в момент времени t = 0, ys (t = 0).
RegValue = [0,estData.u(1)]; ys_0 = evaluate(NL,RegValue);
RegValue является вектором регрессоров при t = 0. ys (t = 0) = f (y1 (t = -1), u1 _ meas (t = 0)). Что касается переменного MATLAB, этот выход f(0,estData.u(1))
, где
y1 (t = -1) является начальным состоянием x0 (=0)
.
u1_meas (t = 0) - значение входа при t = 0, которое является первой выборкой
входных данных estData.u(1)
.
Вычислите моделируемый выход в момент t = 1, ys (t = 1).
RegValue = [ys_0,estData.u(2)]; ys_1 = evaluate(NL,RegValue);
Моделируемый выход ys (t = 1) = f (ys (t = 0), u1 _ meas (t = 1)). Что касается переменного MATLAB, этот выход f(ys_0,estData.u(2))
, где
ys (t = 0) является моделируемым значением выхода при t = 0.
u1_meas (t = 1) является второй выборкой входных данных estData.u (2).
Вычислите моделируемый выход в момент t = 2.
RegValue = [ys_1,estData.u(3)]; ys_2 = evaluate(NL,RegValue);
В отличие от выходного предсказания, вы не можете использовать getreg
вычисление значений регрессора для всех временных значений. Значения регрессоров необходимо вычислять в каждый раз отдельно, потому что выходные выборки, необходимые для формирования вектора регрессора, доступны итерационно, по одной выборке за раз.
Эти шаги эквивалентны симулированному отклику, вычисленной за один шаг, используя sim(idnlarx)
:
ys = sim(M,estData,x0);
Эти примеры выполняют низкоуровневый расчет нелинейного отклика для sigmoidnet
сетевая функция:
где f - сигмоидная функция, заданная следующим уравнением:
В F(x)
, вход в сигмоидную функцию x-r
. x
- значение регрессора и r
- средний регрессор, вычисленный из данных оценки. , , и сохраняются ли сетевые параметры в свойстве модели M.nl.par
, где M
является idnlarx
объект.
Вычислите выходное значение в момент t = 1, когда значения регрессора x=[estData.y(1),estData.u(2)]
:
Оцените модель из выборочных данных.
load twotankdata estData = iddata(y,u,0.2,'Tstart',0); M = nlarx(estData,[1 1 0],'sig'); NL = M.Nonlinearity;
Присвойте значения параметрам в выражении для F(x)
.
x = [estData.y(1),estData.u(2)]; % regressor values at t=1 r = NL.Parameters.RegressorMean; P = NL.Parameters.LinearSubspace; L = NL.Parameters.LinearCoef; d = NL.Parameters.OutputOffset; Q = NL.Parameters.NonLinearSubspace; aVec = NL.Parameters.OutputCoef; % [a_1; a_2; ...] cVec = NL.Parameters.Translation; % [c_1; c_2; ...] bMat = NL.Parameters.Dilation; % [b_1; b_2; ...]
Вычислите линейный фрагмент отклика (плюс смещение).
yLinear = (x-r)*P*L+d;
Вычислите нелинейный фрагмент отклика.
f = @(z)1/(exp(-z)+1); % anonymous function for sigmoid unit yNonlinear = 0; for k = 1:length(aVec) fInput = (x-r)*Q* bMat(:,k)+cVec(k); yNonlinear = yNonlinear+aVec(k)*f(fInput); end
Вычислите общую y = F(x) = yLinear + yNonlinear
отклика.
y = yLinear + yNonlinear;
y
равно evaluate(NL,x)
.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.