Оценка начальных состояний модели
Создайте нелинейную модель серого ящика. Модель является линейным двигателем постоянного тока с одним входом (напряжением) и двумя выходами (угловое положение и скорость вращения). Структура модели задается 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-шаговую ошибку предсказания. 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
- опции оценки findstates
findstates
Набор опцийОпции оценки для findstates
, заданный как набор опций, созданный с помощью findstatesOptions
x0
- Оценка начальных состоянийПредполагаемые начальные состояния sys модели
, возвращенный как вектор или матрица. Для мультиэкспериментальных данных, x0
является матрицей с одним столбцом для каждого эксперимента.
Report
- Информация об оценке начального состоянияИсходная информация оценки состояния, возвращенная как структура. Report
содержит информацию об используемых данных, ковариации состояний и результатах любой численной оптимизации, выполненной для поиска начальных состояний. Report
имеет следующие поля:
Поле отчета | Описание | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Status | Сводные данные оценки начального состояния. | ||||||||||||||||
Method | Используется метод поиска. | ||||||||||||||||
Covariance | Ковариация оценок состояния, возвращенная как Ns -by - Ns матрица, где Ns - количество состояний. | ||||||||||||||||
DataUsed | Атрибуты данных, используемых для оценки, возвращаются как структура со следующими полями:
| ||||||||||||||||
Termination | Условия окончания итерационного поиска, используемые для начальной оценки состояния нелинейных моделей. Структурируйте следующие поля:
|
Поддержка параллельных вычислений доступна для оценки с помощью lsqnonlin
метод поиска (требует Optimization Toolbox™). Чтобы включить параллельные вычисления, используйте findstatesOptions
, задать SearchMethod
на 'lsqnonlin'
, и задать SearchOptions.Advanced.UseParallel
на true
.
Для примера:
opt = findstatesOptions;
opt.SearchMethod = 'lsqnonlin';
opt.SearchOptions.Advanced.UseParallel = true;
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.