Оценка начальных состояний модели
Создайте нелинейную серую модель. Модель представляет собой линейный двигатель постоянного тока с одним входом (напряжением) и двумя выходами (угловое положение и угловая скорость). Структура модели определяется файлом dcmotor_m.m.
FileName = 'dcmotor_m'; Order = [2 1 2]; Parameters = [0.24365;0.24964]; nlgr = idnlgrey(FileName,Order,Parameters); nlgr = setinit(nlgr, 'Fixed', false(2,1)); % set initial states free
Данные загрузки для оценки исходного состояния.
load(fullfile(matlabroot,'toolbox','ident',... 'iddemos','data','dcmotordata')); z = iddata(y,u,0.1);
Оцените начальные состояния так, чтобы отклик модели с использованием оцененных состояний X0 и измеренного входного сигнала u был как можно ближе к измеренному выходному сигналу y.
X0 = findstates(nlgr,z,Inf);
Оценка idss моделируют его таким образом, чтобы отклик оцененной модели как можно ближе соответствовал выходному сигналу оценочных данных.
Загрузить данные образца.
load iddata1 z1;
Оцените линейную модель на основе данных.
model = ssest(z1,2);
Оценка значения начальных состояний для наилучшего соответствия измеренному выходному сигналу z1.y.
x0est = findstates(model,z1,Inf);
Моделирование модели.
opt = simOptions('InitialCondition',x0est);
sim(model,z1(:,[],:),opt);
Оценивать исходные состояния модели выборочно, фиксируя первое состояние и позволяя оценивать второе состояние модели.
Создайте нелинейную серую модель.
FileName = 'dcmotor_m';
Order = [2 1 2];
Parameters = [0.24365;0.24964];
nlgr = idnlgrey(FileName,Order,Parameters);Модель представляет собой линейный двигатель постоянного тока с одним входом (напряжением) и двумя выходами (угловое положение и угловая скорость). Структура модели определяется dcmotor_m.m файл.
Загрузите оценочные данные.
load(fullfile(matlabroot,'toolbox','ident',... 'iddemos','data','dcmotordata')); z = iddata(y,u,0.1);
Удерживайте первое состояние фиксированным на нуле и оцените значение второго.
x0spec = idpar('x0',[0;0]);
x0spec.Free(1) = false;
opt = findstatesOptions;
opt.InitialState = x0spec;
[X0,Report] = findstates(nlgr,z,Inf,opt)X0 = 2×1
0
0.0061
Report =
Status: 'Estimated by simulation error minimization'
Method: 'lsqnonlin'
Covariance: [2x2 double]
DataUsed: [1x1 struct]
Termination: [1x1 struct]
Создайте нелинейную серую модель.
FileName = 'dcmotor_m';
Order = [2 1 2];
Parameters = [0.24365;0.24964];
nlgr = idnlgrey(FileName,Order,Parameters);Модель представляет собой линейный двигатель постоянного тока с одним входом (напряжением) и двумя выходами (угловое положение и угловая скорость). Структура модели определяется dcmotor_m.m файл.
Загрузите оценочные данные.
load(fullfile(matlabroot,'toolbox','ident',... 'iddemos','data','dcmotordata')); z = iddata(y,u,0.1);
Укажите начальное предположение для начальных состояний.
x0spec = idpar('x0',[10;10]);x0spec.Free по умолчанию имеет значение true
Оценка начальных состояний
opt = findstatesOptions; opt.InitialState = x0spec; x0 = findstates(nlgr,z,Inf,opt)
x0 = 2×1
0.0362
-0.1322
Создайте нелинейную серую модель.
FileName = 'dcmotor_m'; Order = [2 1 2]; Parameters = [0.24365;0.24964]; nlgr = idnlgrey(FileName,Order,Parameters); set(nlgr, 'InputName','Voltage','OutputName', ... {'Angular position','Angular velocity'});
Модель представляет собой линейный двигатель постоянного тока с одним входом (напряжением) и двумя выходами (угловое положение и угловая скорость). Структура модели определяется dcmotor_m.m файл.
Загрузите оценочные данные.
load(fullfile(matlabroot,'toolbox','ident',... 'iddemos','data','dcmotordata')); z = iddata(y,u,0.1,'Name','DC-motor',... 'InputName','Voltage','OutputName',... {'Angular position','Angular velocity'});
Создайте набор данных из трех экспериментов.
z3 = merge(z,z,z);
Выберите эксперимент для оценки начальных состояний:
Оценка начального состояния 1 для экспериментов 1 и 3
Оценка начального состояния 2 для эксперимента 1
Фиксированные начальные состояния имеют нулевые значения.
x0spec = idpar('x0',zeros(2,3));
x0spec.Free(1,2) = false;
x0spec.Free(2,[2 3]) = false;
opt = findstatesOptions;
opt.InitialState = x0spec;Оценка начальных состояний
[X0,EstInfo] = findstates(nlgr,z3,Inf,opt);
sys - Идентифицированная модельidss объект | idgrey объект | idnlarx объект | idnlhw объект | idnlgrey объектИдентифицированная модель, начальные состояния которой оцениваются, представлена в виде линейного состояния-пространства (idss или idgrey) или нелинейная модель (idnlarx, idnlhw, или idnlgrey).
Data - Оценочные данныеiddata объектОценочные данные, указанные как iddata объект с соответствующими размерами ввода/вывода sys.
Если sys является линейной моделью, Data может быть частотной областью iddata объект. Для упрощения интерпретации начальных условий сделайте частотный вектор из Data симметричны относительно начала координат. Для преобразования данных временной области в данные частотной области используйте fft с 'compl' входной аргумент и убедитесь, что имеется достаточное заполнение нуля. Соответствующее масштабирование данных при сравнении x0 между временной и частотной областями. Поскольку для N-точечного fft входные/выходные сигналы масштабируются на 1/sqrt(N), расчетный x0 вектор также масштабируется на этот коэффициент.
Horizon - Горизонт прогнозирования для вычисления отклика модели1 (по умолчанию) | положительное целое число между 1 и InfГоризонт прогнозирования для вычисления отклика sys, указанное как положительное целое число между 1 и Inf. Наиболее часто используемые значения:
Horizon = 1 - минимизирует одношаговую ошибку прогнозирования. Ответ предсказания на 1 шаг вперед sys сравнивается с выходными сигналами в Data определить x0. Посмотрите predict для получения дополнительной информации.
Horizon = Inf - минимизирует ошибку моделирования. Разность между измеренными выходными данными, Data.yи смоделированный ответ sys к измеренным входным данным, Data.u минимизирована. Посмотрите sim для получения дополнительной информации.
Определить Horizon как любое положительное целое число от 1 до Inf, со следующими ограничениями:
| Сценарий | Horizon |
|---|---|
Модель непрерывного времени с данными временной области | 1 или Inf |
Данные частотной области непрерывного времени ( | Inf |
Модели ошибок вывода (компонент тривиального шума):
|
Не важный Любое значение |
Нелинейный ARX (idnlarx) | 1 или Inf |
Options - Варианты оценки для findstatesfindstates Набор опцийВарианты оценки для findstates, задается как набор опций, созданный с помощью findstatesOptions
x0 - Расчетные начальные состоянияПредполагаемые начальные состояния модели sys, возвращается в виде вектора или матрицы. Для данных нескольких экспериментов, x0 является матрицей с одним столбцом для каждого эксперимента.
Report - Информация об оценке исходного состоянияИнформация оценки начального состояния, возвращенная в виде структуры. Report содержит информацию об используемых данных, ковариации состояний и результатах любой численной оптимизации, выполняемой для поиска начальных состояний. Report имеет следующие поля:
| Поле отчета | Описание | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Status | Резюме того, как оценивалось начальное состояние. | ||||||||||||||||
Method | Используемый метод поиска. | ||||||||||||||||
Covariance | Ковариация оценок состояния, возвращаемая в виде матрицы Ns-by-Ns, где Ns - число состояний. | ||||||||||||||||
DataUsed | Атрибуты данных, используемых для оценки, возвращаемые в виде структуры со следующими полями:
| ||||||||||||||||
Termination | Условия окончания итеративного поиска, используемые для оценки начального состояния нелинейных моделей. Структура со следующими полями:
|
Поддержка параллельных вычислений доступна для оценки с использованием lsqnonlin метод поиска (требуется Toolbox™ оптимизации). Чтобы включить параллельные вычисления, используйте findstatesOptions, комплект SearchMethod кому 'lsqnonlin', и установить SearchOptions.Advanced.UseParallel кому true.
Например:
opt = findstatesOptions;
opt.SearchMethod = 'lsqnonlin';
opt.SearchOptions.Advanced.UseParallel = true;
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.