В этом примере показано, как аппроксимировать нелинейное поведение системы как массив взаимосвязанных моделей LTI.
Пример описывает линейную аппроксимацию динамики оси тангажа корпуса в области значений условий работы. Полученный массив линейных систем используется, чтобы создать представление линейного варьирования параметра (LPV) динамики. Модель LPV служит приближением нелинейной динамики тангажа.
Во многих ситуациях необходимо аппроксимировать нелинейную динамику системы с помощью более простых линейных систем. Одна линейная система предоставляет разумную модель для поведения, ограниченного маленьким окружением вокруг рабочей точки нелинейной системы. Когда необходимо аппроксимировать нелинейные потребности поведения в области значений условий работы, можно использовать массив линейных моделей, которые соединяются подходящими правилами интерполяции. Такая модель называется моделью LPV.
Чтобы сгенерировать модель LPV, нелинейная модель обрезается и линеаризуется по сетке рабочих точек. С этой целью операционный пробел параметрируется небольшим количеством планирования параметров. Эти параметры часто являются подмножеством входных параметров, состояний и выходных переменных нелинейной системы. Важные соображения в создании моделей LPV являются идентификацией набора параметров планирования и выбором области значений значений параметров, в которых можно линеаризовать модель.
Чтобы проиллюстрировать этот подход, этот пример аппроксимирует динамику тангажа корпуса.
Рассмотрите три модели степени свободы динамики оси тангажа корпуса. Состояния являются Наземными координатами, координатами тела, углом тангажа и уровнем тангажа. Следующая фигура обобщает отношение между инерционными и системами координат тела, углом угла тангажа, углом установки и углом тангажа.
Движущие силы корпуса нелинейны и аэродинамические силы, и моменты зависят от скорости и падения. scdairframeTRIM
модель scdairframeTRIM
описывает эти движущие силы.
open_system('scdairframeTRIM')
Используйте скорость и угол установки как планирование параметров; то есть, обрежьте модель корпуса по сетке и значениям. Эти значения являются двумя из пяти выходных параметров scdairframeTRIM
модель.
Примите, что падение варьируется между-20 и 20 градусами и что скорость варьируется между 700 и 1 400 м/с. Используйте 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
функция.
Линеаризуйте динамику корпуса для получившейся рабочей точки с помощью linearize
функция.
Координаты тела, известны состояния обрезкой. Поэтому необходимо предоставить соответствующие значения им, которых можно задать явным образом. Однако в этом примере, позвольте модели получить эти известные значения на основе каждой пары. Для каждого условия рейса обновите значения в модели и создайте спецификацию рабочей точки. Повторите эти шаги для всех 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]);
Обрежьте модель для всех технических требований рабочей точки.
opt = findopOptions('DisplayReport','off', 'OptimizerType','lsqnonlin'); opt.OptimizationOptions.Algorithm = 'trust-region-reflective'; [op,report] = findop('scdairframeTRIM',opspec,opt);
op
массив содержит рабочие точки, найденные findop
это будет использоваться для линеаризации. 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
структура.
linOpt = linearizeOptions('StoreOffsets',true); [G,~,info] = linearize('scdairframeTRIM',op,io,linOpt); 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 упрощает симуляцию линейного параметра различные системы. Блок требует массива системы в пространстве состояний G
то, что вы сгенерировали линеаризацию пакета использования. Вы также увеличиваете эту информацию с входом, выводите, утверждаете и утверждаете производные смещения от info
структура.
Извлеките информацию о смещении.
offsets = getOffsetsForLPV(info); xOffset = offsets.x; yOffset = offsets.y; uOffset = offsets.u; dxOffset = offsets.dx;
scdairframeLPV
модель, которая содержит блок LPV System, который использует массив линейной системы G
и соответствующие смещения.
Эта модель использует входной сигнал на основе желаемой траектории корпуса. Этот u
сигнала и соответствующий временной вектор
t
сохранены в scdairframeLPVsimdata.mat
файл, который загружается моделью. Задайте начальные условия для симуляции.
alpha_ini = 0; v_ini = 700; x0 = [0; 700; 0; 0];
Откройте и симулируйте модель.
open_system('scdairframeLPV') sim('scdairframeLPV')
Симуляция показывает хорошую эмуляцию ответа корпуса системой LPV. Для этой симуляции вы задали прекрасный gridding продвижения пробела планирования к большому количеству (180) из линейных моделей. Размеры большого массива могут увеличить затраты на внедрение. Однако преимущество представлений LPV состоит в том, что можно настроить сетку планирования, и следовательно количество линейных систем в массиве, на основе:
Подпространство планирования заполнено ожидаемой траекторией
Уровень точности желаем в приложении
Бывшая информация помогает уменьшать область значений для переменных планирования. Последний помогает выбрать оптимальное разрешение (интервал) выборок на пробеле планирования.
Постройте фактическую траекторию планирования переменных в предыдущей симуляции на фоне пробела планирования с координатной сеткой. Выходные параметры регистрировались с помощью их соответствующих осциллографов (содержавший в блоке Compare Responses 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 - 1 200 м/с скоростей и-15 к 12 областям значений степени угла установки. Найдите индексы на пробеле планирования, которые соответствуют этой операционной области.
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);
Извлеките подмножество системного массива LTI.
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. Симулируйте упрощенную модель и проверяйте ее точность в репродуцирование исходного поведения.
Сконфигурируйте блок LPV System, чтобы использовать упрощенную модель и соответствующие смещения.
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')
Нет никакого значительного сокращения перекрытия между ответом исходной модели и ее прокси LPV.
Модель LPV может служить прокси для исходной системы в ситуациях, где более быстрые симуляции требуются. Линейные системы, используемые моделью LPV, могут также быть получены с помощью методов системы идентификации (с дополнительной осторожностью, требуемой обеспечить непротиворечивость состояния через массив). Модель LPV может обеспечить хороший суррогат для инициализации проблем Simulink® Design Optimization™ и выполнения быстрых симуляций оборудования в цикле.
bdclose('scdairframeLPV') bdclose('scdairframeTRIM')