Этот пример показывает, как аппроксимировать нелинейное поведение системы как массива взаимосвязанных моделей LTI.
Пример описывает линейное приближение динамики оси тангажа планера в области значений условий работы. Массив полученных таким образом линейных систем используется для создания представления динамики Линейного Параметра (LPV). Модель LPV служит приближением нелинейной динамики тангажа.
Во многих ситуациях нелинейную динамику системы необходимо аппроксимировать с помощью более простых линейных систем. Одна линейная система предоставляет разумную модель поведения, ограниченную маленькой окрестностью вокруг рабочей точки нелинейной системы. Когда нелинейное поведение должно быть аппроксимировано в области значений рабочих условий, мы можем использовать массив линейных моделей, которые взаимосвязаны подходящими правилами интерполяции. Такая модель называется моделью LPV.
Чтобы сгенерировать модель LPV, нелинейная модель обрезается и линеаризируется по сетке рабочих точек. Для этой цели рабочее пространство параметризовано небольшим количеством параметров планирования. Эти параметры часто являются подмножеством входов, состояний и выходных переменных нелинейной системы. Важным фактором при создании моделей LPV является идентификация набора параметров планирования и выбор области значений параметров, при которой можно линеаризировать модель.
Мы иллюстрируем этот подход для аппроксимации динамики тангажа планера.
Рассмотрим модель трех степеней свободы динамики оси тангажа планера. Состояниями являются координаты Земли, координаты тела, угол тангажа и скорость тангажа. Фигура 1 суммирует отношение между инерционной системой координат и каркасами кузова, углом траектории полета, углом падения и углом тангажа.
Фигура 1: Динамика планера.
Динамика планера нелинейна, и аэродинамические силы и моменты зависят от скорости и частоты падения. Модель scdairframeTRIM
описывает эту динамику.
open_system('scdairframeTRIM')
Используйте скорость и угол падения в качестве параметров планирования; то есть обрезать модель планера по сетке значений и. Обратите внимание, что это два из пяти выходов scdairframeTRIM
модель.
Предположим, что заболеваемость варьируется от -20 до 20 степени и что скорость варьируется от 700 до 1400 м/с. Используйте сетку 15 на 12 пар с линейными интервалами для планирования:
nA = 15; % number of alpha values nV = 12; % number of V values alphaRange = linspace(-20,20,nA)*pi/180; VRange = linspace(700,1400,nV); [alpha,V] = ndgrid(alphaRange, VRange);
Для каждого условия рейса линеаризируйте динамику планера в дифференте (нулевой нормальный момент ускорения и наклона). Это требует вычисления отклонения лифта и скорости тангажа, которые приводят к установившейся и.
Использование operspec
чтобы задать условие обрезки, используйте findop
для вычисления значений обрезки и, и линеаризации динамики планера для полученной рабочей точки. Для получения дополнительной информации см. пример «Обрезка и линеаризация планера».
Координаты тела,, являются известными состояниями для обрезки. Поэтому для них необходимо задать соответствующие значения, которые можно задать явным образом. Однако в этом примере пусть модель выводит эти известные значения на основе каждой пары. Для каждого условия рейса обновляйте значения в модели и создайте спецификацию рабочей точки. Повторите эти шаги для всех 180 условий рейса.
clear op report for ct = 1:nA*nV alpha_ini = alpha(ct); % Incidence [rad] v_ini = V(ct); % Speed [m/s] % Specify trim condition opspec(ct) = operspec('scdairframeTRIM'); % Xe,Ze: known, not steady. opspec(ct).States(1).Known = [1;1]; opspec(ct).States(1).SteadyState = [0;0]; % u,w: known, w steady opspec(ct).States(3).Known = [1 1]; opspec(ct).States(3).SteadyState = [0 1]; % theta: known, not steady opspec(ct).States(2).Known = 1; opspec(ct).States(2).SteadyState = 0; % q: unknown, steady opspec(ct).States(4).Known = 0; opspec(ct).States(4).SteadyState = 1; end opspec = reshape(opspec, [nA nV]);
Обрезать модель для всех заданных спецификаций рабочей точки.
Options = findopOptions('DisplayReport','off', ... 'OptimizerType','lsqnonlin'); Options.OptimizationOptions.Algorithm = 'trust-region-reflective'; [op, report] = findop('scdairframeTRIM',opspec,Options);
The op
массив содержит рабочие точки, найденные findop
который будет использоваться для линеаризации. The report
массив содержит запись входных, выходных и государственных значений в каждой точке.
Задайте входы и выходы линеаризации.
io = [linio('scdairframeTRIM/delta',1,'in');... % delta linio('scdairframeTRIM/Airframe Model',1,'out');... % alpha linio('scdairframeTRIM/Airframe Model',2,'out');... % V linio('scdairframeTRIM/Airframe Model',3,'out');... % q linio('scdairframeTRIM/Airframe Model',4,'out');... % az linio('scdairframeTRIM/Airframe Model',5,'out')]; % gamma
Пакетная линеаризация модели в условиях обрезки. Сохраните информацию о смещении линеаризации в info
структура.
[G,~,info] = linearize('scdairframeTRIM',op,io, ... linearizeOptions('StoreOffsets',true)); G = reshape(G,[nA nV]); G.u = 'delta'; G.y = {'alpha','V','q','az','gamma'}; G.SamplingGrid = struct('alpha',alpha,'V',V);
G
представляет собой массив 15 на 12 линеаризированных модели объекта управления в 180 условиях рейса. Динамика объекта существенно изменяется по всей области рейса, включая места планирования, где локальная динамика нестабильна.
bodemag(G(3:5,:,:,:))
title('Variations in airframe dynamics')
Блок LPV System в Control System Toolbox™ библиотеки блоков облегчает моделирование линейных систем изменения параметров. Первичными данными, требуемыми блоком, являются массив систем в пространстве состояний G
который был сгенерирован путем пакетной линеаризации. Мы дополняем это информацией о входе/выходе, состоянии и производных смещениях состояния от info
структура.
Извлеките информацию о смещении.
offsets = getOffsetsForLPV(info); xOffset = offsets.x; yOffset = offsets.y; uOffset = offsets.u; dxOffset = offsets.dx;
Откройте системный scdairframeLPV
, который содержит системный блок LPV, сконфигурированный на основе линейной системы массива G
и различные смещения.
open_system('scdairframeLPV')
Входной сигнал был подготовлен на основе желаемой траектории планера. Этот сигнал u
и соответствующий временной вектор t
сохраняются в scdairframeLPVsimdata.mat
файл. Задайте начальные условия для симуляции.
alpha_ini = 0;
v_ini = 700;
x0 = [0; 700; 0; 0];
sim('scdairframeLPV')
Симуляция показывает хорошую эмуляцию отклика планера системой LPV. Мы выбрали очень тонкую сетку пространства планирования, приводящую к большому числу (180) линейных моделей. Большие размеры массивов могут увеличить затраты на реализацию. Однако преимущество представлений LPV в том, что мы можем настроить сетку планирования (и, следовательно, количество линейных систем в массиве) на основе:
Подпространство планирования, охватываемое ожидаемой траекторией
Желаемый уровень точности в приложении
Прежняя информация помогает уменьшить область значений для переменных планирования. Последний помогает выбрать оптимальное разрешение (интервал) выборок в пространстве планирования.
Давайте постройте график фактической траектории переменных планирования в предыдущей симуляции на фоне пространства планирования с сеткой. Выходы регистрировались через их возможности (содержащиеся в блоке Compare Responses of scdairframeLPV
).
Stable = false(nA,nV); for ct = 1:nA*nV Stable(ct ) = isstable(G(:,:,ct)); end alpha_trajectory = Alpha_V_Data.signals(1).values(:,1); V_trajectory = Alpha_V_Data.signals(2).values(:,1); plot(alpha(Stable)*180/pi,V(Stable),'g.',... alpha(~Stable)*180/pi,V(~Stable),'k.',... alpha_trajectory,V_trajectory,'r.') title('Trajectory of scheduling variables') xlabel('\alpha'); ylabel('V') legend('Stable locations','Unstable locations','Actual trajectory')
Траектория, прослеженная во время симуляции, показана красным цветом. Обратите внимание, что он проходит как стабильные, так и нестабильные области пространства планирования. Предположим, что вы хотите реализовать эту модель на целевом компьютере для входных профилей, аналогичных используемому для симуляции выше, при использовании наименьшего объема памяти. Эта симуляция предполагает, что траектория в основном остается в область значений скоростей от 890 до 1200 м/с и от -15 до 12 степеней области значений угла падения. Кроме того, можно исследовать увеличение интервала между точками дискретизации. Предположим, что вы используете только каждый третий образец вдоль размерности и каждый второй образец вдоль размерности. Сокращенный системный массив, удовлетворяющий этим ограничениям, может быть извлечен из G следующим образом:
I1 = find(alphaRange>=-15*pi/180 & alphaRange<=12*pi/180); I2 = find(VRange>=890 & VRange<=1200); I1 = I1(1:2:end); I2 = I2(1:3:end); Gr = G(:,:,I1,I2); size(Gr)
5x2 array of state-space models. Each model has 5 outputs, 1 inputs, and 4 states.
Новая матрица дискретизации, Gr
, имеет более экономичный размер 5 на 2. Симулируйте уменьшенную модель и проверяйте ее точность в воспроизведении исходного поведения.
Измените директорию на директорию с возможностью записи, поскольку модель должна быть перекомпилирована
cwd = pwd; cd(tempdir) lpvblk = 'scdairframeLPV/LPV System'; set_param(lpvblk,... 'sys','Gr',... 'uOffset','uOffset(:,:,I1,I2)',... 'yOffset','yOffset(:,:,I1,I2)',... 'xOffset','xOffset(:,:,I1,I2)',... 'dxOffset','dxOffset(:,:,I1,I2)') sim('scdairframeLPV') cd(cwd)
Нет значительного сокращения перекрытия между реакцией исходной модели и ее прокси.
Модель LPV может служить прокси для исходной системы в ситуациях, когда требуются более быстрые симуляции. Линейные системы, используемые моделью LPV, также могут быть получены с помощью методов системы идентификации (с дополнительной осторожностью, необходимой для поддержания согласованности состояний в массиве). Модель LPV может обеспечить хороший суррогат для инициализации задач оптимизации проекта simulink и выполнения быстрых симуляций оборудования в цикле.