В заметке приведён результат работы программы для моделирования динамики самолета. Рассматривается трехстепенная модель самолета в Matlab. Эту программу в текстовом виде Вы можете найти в книге [1, стр.180,189-190]. Трехстепенной моделью называется модель, имеющая три степени свободы. В нашем случае, это перемещения по вертикали и горизонтали, а также угол тангажа.
Для проверки трехстепенной модели, авторы решили задачу балансировки. В Matlab есть специализированные средства для моделированиия динамики самолета. Однако, мне хотелось посмотреть, как работает код, приведенный в книге. Результаты тестов из книги удалось повторить. Следует отметить две особенности, важные при сравнении получаемых результатов с данными в таблице [1, стр.190]. Во-первых, программа выводит угол атаки в радианах, а в таблице он приведен в градусах. Нужно переводить, например: 0.3856 рад = 0.3856*57.3 = 22,09 градуса. Модель работает с градусами только тогда, когда считает величины аэродинамических сил и моментов. Тригонометрические функции в Matlab работают с радианами. Угол отклонения руля высоты выводится в градусах, как в таблице. С ним все нормально. Во-вторых, в тескте книги приведен текст программы для посадочной конфигурации, то-есть, LAND=1. Для того, чтобы получить данные, указанные в упомянутой таблице, нужно установить LAND=0. В приложенном коде это сделано.
Общие сведения о структуре программы
trim — Основная функция, вызывающая все остальные. Она первой создает глобальные переменные для применения их в workspace функции cost. Это следующие переменные: вектор входных параметров x, управления u и величина угла наклона траектории gamma. Вектор выходных параметров модели dx глобальным не является и фигурирует только в cost-функии и в самой модели. Также, trim устанавливает начальные значения и вызывает функцию fminsearch для минимизации cost-функции. То есть, фактически, trim служит для поиска параметров балансировки самолета. Для установки скорости и высоты используются переменные x(1) и x(5). Дело вкуса, конечно, однако данная функция требует от пользователя вводить имя файла cost-функции, имя файла для сохранения данных. Она также требует при каждом запуске вводить скорость, высоту и угол траектории. Я решил написать trimTable, чтобы было удобнее запускать расчет для разных параметров.
trimTable — Эта функция в книге отсутствует. Написана для оперативного расчета балансировки с различными параметрами по причинам, указанным в описании trim. Вызов fminsearch видоизменен так, чтобы программа выдавала количество вызовов cost-функции и другие данные о ходе процесса минимизации. Также изменен вывод результатов расчета балансировки, чтобы было удобнее сравнивать с результатами в книге
transp — трехстепенная модель самолета в Matlab. Текст — см. [1, стр.180]. Модель самолета по текущему вектору входных параметров x определяет элементы вектора выходных параметров (производных) dx. Вычисление производится с учетом управляющего вектора u, а также параметров (масса, площадь характеристическая, положение ЦТ) и конфигурации (закрылки, шасси) самолета. Конфигурация учитывается отличающимися аэродинамическими коэффициентами.
cost — cost-функция [1, стр.190]. Возвращает суммарную взвешенную невязку относительно нуля тех параметров, которые минимизируются в квадрате. У каждого параметра есть весовой коэффициент. Такая функция нужна для работы
fminsearch, вызываемой в trim (trimTable), и должна возвращать одно число.
adc — стандартная атмосфера [1, стр.715]. Нужна для вычисления скоростного напора в зависимости от высоты и скорости. Эту функцию может применить не только реализованная в transpModel трехстепенная модель самолета, но и шестистепенная модель. Функция в книге написана на Фортран 77. В приложенном коде — на Matlab.
Трехстепенная модель самолета — запуск и результаты
Для запуска, достаточно вызвать trimTable() в рабочем окне Matlab. Вывод программы выглядит так:
trimTable Iteration Func-count min f(x) Procedure 0 1 1.93294 1 4 1.85446 initial simplex 2 6 1.75967 expand 3 7 1.75967 reflect 4 9 1.54939 expand ... 122 210 7.86996e-13 contract inside 123 212 3.66873e-13 contract inside Optimization terminated: the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04 and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e-04 iterations: 123 funcCount: 212 algorithm: 'Nelder-Mead simplex direct search' message: 'Optimization terminated: the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04 and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e-04' TAS(ft/s) = 2.965105e-01, H(ft) = 0 Thrl(0...1) Elev(deg) AoA(deg) 0.296511 -25.732269 22.093573
Работа происходит в следующей последовательности. trimTable вызывает функцию fminsearch. Та решает задачу безусловного поиска экстремума методом Нельдера-Мида. В процессе её работы, согласно приведенному выводу, вычисление cost-функции cost происходит 212 раз. Каждый вызов cost-функции приводит к однократному вызову transp. По полученным величинам производных dx, каждый раз вычисляется невязка f в cost-функции. Невязка становится достаточно малой (3.66873e-13) и fminsearch прекращает вызовы cost, поэтому прекращаются вызовы transp. Программа завершает работу.
В результате, для скорости x(1)= TAS = 170 футов в секунду на уровне моря x(5) = 0, тяга балансировки равна 29,7%, отклонение руля высоты -25,7 градусов, балансировка осуществляется на угле атаки в 22,09 градуса. Ср. табл. 3.6-1 [1, стр.190].
Полет горизонтальный, угол атаки в cost-функции приравнивается к тангажу. Угол отклонения руля высоты считается положительным при движении задней кромки руля вниз. Применяемые единицы измерения — английские, поэтому ускорение свободного падения, применяемое для расчета силы веса, равно 32,17 фт/сек.кв.
Исходный код
Литература
[1] B.L.Stevens, F.L.Lewis, E.N.Johnson — «Aircraft Control and Simulation», 3ed.