Text
                    

веских систем сложной Во второй части изучаются объектно-ориентированные реализации поня- тий, связанных с линейными дискретными и непрерывными системами управ- ления, оптимизируемыми по квадратичному критерию оптимальности с учетом изопериметрических ограничений. Часть 1. ОБЪЕКТНО - ОРИЕНТИРОВАННЫЙ ПОДХОД К МОДЕЛИРОВАНИЮ ДИНАМИЧЕСКИХ СИСТЕМ последовательности векторов состояния математической модели с некоторым шагом по времени. Непрерывная модель обычно задается системой обыкновенных диффе- ренциальных уравнений, которая в векторной форме имеет вид функция; 10 и Т устанавливают интервал времени существования модели. Начальный вектор состояния Х(1$ считается заданным. Принято называть ltob иногда ределенностью физического смысла независимой переменной будем называть ее «системным временем».
где Xt = A’l/,) - вектор состояния; F - векторная функция, устанавливающая число шагов. Для получения вектора состояния модели (1.1) в конечный момент систем- дифференциальных уравнений на интервале ее существования при заданных начальных условиях. В результате приходим к модели вида (1.2), в которой ti=tc. t2=T. N~l, a Ffj - оператор интегрирования. Численное интегрирование уравнений заключается в реализации итераци- онного процесса (1.3) где I - номер шага интегрирования; М - число шагов; приращение, вы- Нетрудно видеть, что модель процесса интегрирования аналогична (1.2), При этом Таким образом, модель (1.1) в конечном счете сводится к модели (1.2). Это позволяет принять модель (1.2) за основу, т.е. рассматривать ее как абстрактное понятие, дающее начало цепочке классов математических моделей различной рашение дискретного процесса (1.2) скрыто в самой модели, а приращение процесса (1.3) определяется методом численного интегрирования уравнений дить признаком, который одназначно идентифицирует ее тип. отнесен вектор значений функций правой части и правило вычисления нового вектора. Таким образом, информационная модель динамической системы номер текущего шага моделирования; число шагов на интервале моделирования;
♦ правило вычисления компонент вектора правых частей; ♦ признак дискретности модели. Отметим, что в общем случае вектор правых частей может быть функцией всех приведенных выше параметров. »объекта удобно представить в ан- Входами модели являются системное время и текущий вектор состояния и единый вектор входа модели. Текущий вектор входа используется для вычис- могут быть различными. Первые и компонент вектора входа - зависимые пере- менные. Остальные компоненты можно использовать для хранения управляю- нимает первые п его компонент, где п - количество производных в правой Следует обратить внимание чиателя на то, что библиотека Simulate пред- лагает те ияи иные возможности. Использовать их или нет - личное дело про- реальных задачах система уравнений, описывающих математическую ) нужно учитывать силу < классе модели предусмотрен список методов-процедур, i зываются последовательно. Составом списка можно управлять в процессе вы- полнения программы. Таким образом, любая математическая модель может
i структурой соотнес г иерархическую структуру. До по- приводить иерархическую модель к одноуровневой до написания программы. ссылками на объект-владелец подсистемы и на подчиненные подсистемы. По- этому можно говорить о предопределенной связи космического аппарата с «надсистемой» или с «внешним миром». Надсистемой может быть космическая
, схема декомпозиции достаточно условна. Так, детализацию можно : элементы могут обмениваться информацией друг с другом. Это означает, ) в процессе моделирования любая из подсистем имеет доступ к свойствам и Объекты-дннамические системы являются строительными блоками при- чиной программы. Они не могут функционировать в отрыве от среды, кото- Среда моделирования в библиотеке simulate 1.0 представлена классом улятор». Этот класс инкапсулирует задачу моделирования сложной сис- путем численного интегрирования дифференциальных уравнений с ис- > моделей общего вида существуют ли- । содержит матрицы коэффициентов. Библио* мизации. Рассмотрим иерархию классов simulate 1.0, отражающих абстракции математических моделей. Схема наследования показана на рис Л .2. Нетрудно видеть, что общим предком всех рассматриваемых здесь клас- сов является TPersistent. Так рекомендует руководство по Delphi. Первым представителем (т.е. родительским классом) в библиотеке simulate является I Owner, которые служат для зации элементов любой математической модели. Так, TFloatVar - это класс скалярных переменных с плавающей точкой. Его наследник TAngle трактует переменную как угловую величину с присущими ей свойствами. ся переменные типа TFloatVar, а класс TMatrix - матрицу с элементами типа
Класс TProcList является аналогом TList, но его элементами являются не объекты, а процедуры. Он создан для представления структуры переменного состава в правой части математической модели. Класс TCustomPoxat соответствует точке в трехмерном декартовом про- странстве. Объекты этого класса характеризуются декартовыми и сферически- Вертикальная ветвь классов содержит абстракции с общим предком объект обращается к виртуальным методам, с помощью которых можно уста- новить исходную структуру правой части (метод initAltPart) и задать какие-
структуры. Этот класс владеет списком, элементами которого являются ссылки на объекты-подсистемы данной системы. При создании представителя класса TDynamicSyscem, элементам списка можно присваивать ссылку на лю- TDynamicSyscem. Таким образом поддерживается возможность представления сложной иерархии математической модели. пении правых частей. При изменении системного времени сначала устанавли- екта так, как это показано на рис. 1.4 (здесь SlfS2,...S„ - объекты-подсистемы).
Такая последовательность поддерживает приоритет объекта ynatnicSystetn над его подсистемами. Для обслуживания списка подсистем имеются специальные методы. При TDynsmicSystem. Следовательно, программист может «добраться» до полей и методов системы верхнего уровня, используя свойство подсистемы Owner. Если система активируется или пассивизируется изменением свойства Enabled, то же происходит и со всеми ее подсис- Например, класс системы диф- нциальных уравнений второго порядка при а^О.1; Ь=1. можно объявить следующим образом:
Класс TCoetoajrterator инкапсулирует итерационный процесс вида (1.2). 1 (1.2) при заданных начальных услови- следников можно использовать непосредственно. Однако для моделирования сложной системы следует применять только объект класса TSimulator. рархической структуры с подсистемами различных видов. При этом численный метод интегрирования применяется только к тем ее подсистемам, которые TCustomlterator с учетом признака дискретности модели. реализующие метод Эйлера (TEuler), Эйлера-Коши (TEuierCauchy), Рунге- Если потребуется написать собственный метод численного интегрирования, доста- /ющий иной может создавать собственные классы моделей и методов. Класс TSimulat.oz инкапсулирует общую задачу моделирования динами- вания. Моделирование осуществляется на интервале времени [iniTime...SysTune] с шагом step. Ключевыми свойствами класса являются ссылка на модель (Model) и ссылка на численный метод (Method). По умолча- нию в качестве метода создается экземпляр TCustomiterator. Владельцем объекта класса TSimulator может быть как динамическая система, так и среда прикладной программы, например - диалоговая форма. В первом случае в составе сложной модели можно иметь подсистему, которая представлена дифференциальными уравнениями, но с помощью класса TSimulator она сведена к дискретной. Иными словами, на шаге моделирования некоторой системы имеется возможность получить выходные параметры ее Во втором случае мы обеспечиваем связь объекта - симулятора с визуаль- ными компонентами программы. Эта возможность явно не поддерживается.
Однако она может быть реализована путем создания соответствующей компе- боту [3]. Р ₽ Для управления процессом моделирования класс TSinulacor имеет ряд свойств-ссылок на процедуры-обработчики событий типа TNotifyEvent. Их семантика аналогична событиям, принятым в визуальных компонентах Delphi. Так, при входе в цикл моделирования возникает событие OnEnter, при измене- Рассмотрим примеры прикладных программ, которые иллюстрируют ме- тодику применения классов динамических систем Simulate 1. о. Для составления программы интегрирования системы обыкновенных диф- ференциальных уравнений на заданном интервале времени, программист дол- 1) обеспечить доступ своих программ и модулей к модулям библиотеки simulate i.o с именами ucustom (классы динамических систем), uCommon (сервисные функции) и uvector (векторы и матрицы) с ломо- ; уравнений и перекрыть i симулятора, Необходимо оценить точность численного интегрирования системы вто- рого порядка xt(l)=sm(t). xj(t)=cos(t). решение этой системы имеет вид
объектно- •'{ [ ’г -ур i л примера предста- вим так, как показано на рис. 2.1. Здесь TSinComp - наследник класса | TSinAaElfEqn j Уравнения (2.0 | TSlnto«lyt | Функция Sin(t) ~~| числении абсолютной потреш- численным решениями. Класс TSinAsDifEqn-на- следник класса TDifEquation. Он реализует систему уравнений (2.1). Класс TSinftnalyt - наследник класса обработчиком выходных данных своих подсистем. Главное окно программы данного приме- ра показано на рис.2.2. Результаты моделирования отображаются с помощью компонента Memoi и выводятся в текстовый файл. Запуск программы осуществ- Текст программы с комментариями при-

№НИЙ с двумя входами и для задания начальных условий интегрирования. Метод Dynamics вычисляет производные при текущих значениях зависимых переменных. Класс TSinftnalyt определяет подсистему, единственным выходом которой является текущее значение синуса, вычисляемое с помощью стандартной функции, в те- «главной» системе нашего примера. Его метод Dynamics вычисляет разность процедурами-обработчиками событий симулятора OnEnter, onOutput, onExit итератор (численный метод) в параметре Sender: TObject. Поскольку все клас- intest.dat, очищает этот файл и компонент тем на каждом шаге моделирования. Его оператор
fember [ 1 ] для доступа ко второй. В данном примере система интегрируется истодом Эйлера на интервале времени [О..2п]. На рис.2.3,а показан график, построенный с помощью программы Grapher L. 09 по текстовому файлу sintest. dat, созданному программой. Нетрудно видеть, что погрешность метода Эйлера существенна. Заменим t обработчике события формы TForml .OnButtoniclick строку : снова выполним программу. Кривые точного и численного решений, пред- точность метода Эйлера-Коши второго порядка в данной задаче при принятом шаге интегрирования § 2.2. Переход с одной орбиты на другую мического аппарата (КА) с одной орбиты на другую при непрерывно дейст- вующем малом реактивном ускорении. Математическая модель движения в безразмерных переменных имеет вид [5]:
где г -безразмерное расстояние между КА и центром Земли; и, V - безразмер- ные составляющие орбитальной скорости, направленные по радиусу и нормали к нему в плоскости движения; (2- долгота восходящего узла; аргумент пе- ригея; истинная аномалия. Безразмерная скорость связана с радиусом соотношением Безразмерные составляющие ускорения зададим следующими функцями вре- “Д')=°. «.(')= 0«мЛ(')»в»(')=~аsiK*(t)sgnfpofa+&)), (2.3) (2-4) г - номинальное безразмерное ускорение. Составляющие управляющего ускорения выбраны так, что радиус орбиты са и наклонения задаются пользователем, а все остальные - нулевые. Зависимости ускорения от времени, т.е. алгоритм управления системой (2-2), целесообразно выделить в отдельный объект. Это даст возможность заме- екта, реализующего уравнения движения. Реализация алгоритмов управления в непосредственно в процессе моделирования. В качестве главной системы данного примера выберем дифференциальные описывается уравнениями (2.3), (2.4). Тогдв главная система будет наследником TDif Equation, а блок управления - наследником TDynamicOb ject. В рамках данного примера мы иллюстрируем создание сложной модели с ставляющими. На листинге 2.2 приведен модуль классов данного примера.


Вычисление правых частей уравнения движения (2.2) реализует метод свойству х(index] соответствует производная DxDt[index]. Считается, что иной равен порядковому номеру уравнения в системе 1(2.3), (2.4). Его свой- «ние; Аг - ралиаль- Алгоритм управления запрограммирован в методе Dynamics. Форма главного окна прикладной программы показана на рис. 2.4, а п
Labels: TLabel; edRadius: TEdit GroupBox2: TGroupBox; GroupBox3; TGroupBox; LabelS: TLabel: tbim ; TSimuiatoi FOrbSteps Bevell: TBeve cbMethod: TCon_. Label6: TLabel; FMethodlndex : integer; // Индекс метода интегрирования 'Forml: TForml; implementation ($R *.DFM} procedure TForml.OnEnterSim(Sender:TObj ect),

в процессе моделирования if Stop then Mentol. Lines. Add (1 Моделирование прервано ’) ; bCancel.Enabled bRun.Enabled := FMethodlndex := cbMethod.Itemindex; FSim := TSimulator.Create; ): FSim.Method L: FSim.Method TEulerCauchy.Create; TRungeKutta4,Create; FSim.Model :» Передаем модель •• - StrToFloat (edlncl ination. Text) *utToRad; 1/Sqrt(R); M. Ini .Assignitems([R, О, V, 0,Incl,0,0]); FOrbSteps : FSim.OnStop FSim.OnEnter ;= OnEnterSim; FSim.OnOutput :« OnOutputSim; OnStopSim; TwoFi/FOrbSteps;
bRun.Enabled Здесь приведены формальные описания классов динамических систем. В таблицах ключевых свойств использованы следующие обозначения: во - толь- § 3.1. Простой объект подсистем. Класс TDynamicObject является родительским для пользователь- ного использования. Его ключевые не выполняют никаких действий, но они вызываются в блоке моделирования Любой простой элемент сложной динамической системы, который можно отнести к элементу непрерывного или типа, должен быть объявлен как наслед- ник класса TDynamicObject. По умолчанию элемент является непрерывным. Если эемент имеет дискретную природу, необходимо при его создании уста-
новть свойство Discrete-true. Простой объект может иметь управляемую (т.е. переменную) структуру уравнений динамики (правой части). Для реализации доввида procedure AitItem < Sender:TObject). Процедуры переменной структуры правой части вызываются вслед за ме- тодом Dynamics, поэтому код такой процедуры может модифицировать, значе- ния компонент вектора Out. Ключевые свойства и методы класса приведены в табл. 3.1. Таблица 3.1 Свойства и методы класса TDynamicQbject Устанавливает тип модели - непрерывная (false) или дис- кретная (true). По умолчанию имеет значение false. *RWJ Ссылка на объект - вектор начальных условий. (RW) Inp (RW) property Inp : TVector; Вектор входов модели. property InputDim : integer; Размер вектора входов. proptrty Out : TVector; Вектор выходов модели. OutputDim Размер вектора выходов. С”’11"5 property CurTime : TFloat; Время начала очередного шага моделирования. property CurStepslongint; екты могут изменять свое состояние при изменении систем- ного времени. По умолчанию Enabled=true. TimeStep Шаг моделирования (интегрирования). StepsCount Количество шагов на интервале моделирования. mo’1" Системное время, на которое необходимо вычислить век- тор выходов модели. | Терминальное время модели.
Компонента вектора состояния модели с номером index. 0„„0У Создает экземпляр объекта с нулевыми размерностями векторов входов и выходов и с пустым списком процедур Освобождает память, выделенную объекту, уничтожает векторы входов и выходов. procedure AddAltltern(Item rTNotifyEvent): Добавляет процедуру item в список переменной структу- ры правой части уравнений движения. AfterStep Вызывается в конце каждого шага перед ModifyAltPart. procedure De LeteAlcltem(Item: TNotifyEvent); Удаляет ссылку на процедуру item из списка переменной структуры правой части уравнений движения. procedure Disable: Делает объект «пассивным». Пассивные объекты не могут изменять свое состояние. Вызывайте этот метод тогда, ко- Dynmle. procedure Dynamics; virtual; Реализует алгоритм изменения состояния модели в зави- Enable симости от системного времени. Всегда перекрывается. Делает объект активным. Только активные объекты - эле- менты сложной динамической системы могут изменять свое InitAltPart состояние. procedure InitAltPart; virtual; Создает структуру переменной правой части модели. Пере- крывайте этот метод для инициализации списка процедур InaertAltltem Item:TNotifyEvent); Используйте этот метод чтобы вставить процедуру в спи- ; сок переменной структуры правой части по индексу. Init».™. | Вызывается при изменении начального времени модели.
Надо иметь i моделирования компоненты вектора входов инициализируются значениями компонент начальных условий автоматически. Если программист при создании наследника TDynamieobject решает не использовать эти понятия в своей моде- дает свойством Asstring, которое форматирует вещественное значение в 31
строку. Это свойство удобно использовать для вывода как в текстовые файлы. § 3.2. Динамическая система ческие модели иерархической структуры. Компонентами (подсистемами) моде- ли могут быть любые объекты - наследники тDynamicobject, Класс TOynamicSystem наследует все свойства и методы своего родителя. В табл. 3.2 приведены сведения только о новых свойствах и методах Таблица 3.2 Свойства и методы класса TDynamicSystem Количество подсистем данной системы. Ссылка на подсистему с порядковым номером index. Индекс первой подсистемы равен нулю. Создает экземпляр главной системы с размерностями вход- ного и выходного векторов AlnputDim и AOutputDim соответ- ственно. Размер входного вектора может превышать размер
Уничтожает список подсистем и освобождает память, вы- деленную под векторы начальных условий, входов и выхо- procedure AddMember (AMember: TCustomDynamicObject) ; Добавляет подсистему AMember к списку подсистем. Метод вызывается при изменении текущего времени сис- изменению иерархической структуры модели. DeleteMember OeleteMember (var Member: TCustomDynamicObject) ; Удаляет AMember из списка подсистем. При этом количе- ство элементов (свойство Count) не изменяется, ссылка на удаленную подсистему принимает значение nil. для всех подсистем сложной системы с учетом ее иерархии. Пояснения даны ниже. ,.h li! !fl HI IS 01 InsertMember(Be fore, RemoveMember HP Hi li! Ш fl и Рассмотрим метод ForEach подробнее. С его помощью одно и то же действие можно применить ко всем подсистемам, входящим в состав объек- та. Параметром метода является процедура преобразует иерархическую структуру сложной системы в линейную. Такое
Им. 1-я зависимая переменная. Отсчет индексов производных и зави- симых переменных ведется с 1. j ЗА Симулятор
Таблица 3.4 Если. то симулятор выводит начальные условия. Начальное значение системного времени (интервала модели- рования). Указатель на динамическую систему. Указатель на объект - численный метод интегрирования. Указатель на обработчик события, которое возникает непо- средственно перед входом в цикл моделирования property OnExit:TNoti fyEvent; Указатель на обработчик события, которое возникает после выхода из цикла моделирования. “о?*"9' Указатель на обработчик события «изменить состояние систе- Указатель на обработчик события «проверить условие окон- step <RWJ , ₽1ШаТ мХелированияГ(интегрирования) по системному време- ST” Системное время симулятора задает конечное значение интер- вала времени. Создает экземпляр симулятора. D““°* Уничтожает все внутренние объекты кроме модели Напомним, что моделирование начинается сразу как только программа из- ит значение свойства sysTime симулятора. Стандартная последователь-
Глава 4. Сервисные средства Рассмотрим классы математических понятий, объявления констант, ти- со строками и файлами. рируют понятиями «переменная», «вектор» и «матрица». Соответствующие классы объявлены в модуле uvector. Объекты этих классов могут быть исполь-
зованы при программировании любых задач научно-технического характера где необходимо осуществлять действия над векторами и матрицами. Класс srioatvar определяет понятие «вещественная переменная». Его предком является TCustomCbject. Данный класс имеет два перегружаемых constructor create создает переменную с нулевым значением; значением Initval. Ключевые свойства класса представлены в табл. 4.1. Таблица 4.1 FloatToStrF. Соответствует параметру Digits функции FloatToStrF. По умолчанию Digits = 5; Precision = 15; Format = ftGen- и!°‘1 Значение переменной как вещественного числа типа TFloat. Значение переменной в виде строки, отформатированной с помощью функции FloatToStrF при текущих Format, шественных значений в строки при выводе или при чтении исходных данных с V TFloatVar.Create v.Format ffFixed; V.AsString Forml.I
Таблица 4.2 Свойства класса TAngle Значение угла в радианах. (RW) property AsString:string Значение угла в ваде строки, выраженное в в радианной мере. Digits (RW) Используется при форматировании вещественного числа в строку (см. описание функции FloatTostrF в справочной сис- IHW) Используется при форматировании вещественного числа в строку (см. описание функции FloatTostrF в справочной системе Delphi). Format (RW) Код формата (см. описание функции FloatTostrF в справоч- ной системе Delphi). property AngleFcrmat zTAngleFormat; Код форматирования строки для свойства AsGMSstr. Может принимать одно из значений :af360 - приведение к диапазону [0..360*]; а £180 - приведение к диапазону [-180°.. 180°]; afEW- приведение к диапазону [-180°.. 180*]. Десятичное значение угла, выраженное в угловых трэду- /^сятичное значение угла, выраженное в угловых градусах
Значение угла в формате sODDomm- ss" . zz где s- знак, опреде- если ftngleFormat=afEW и угол к востоку от Гринвича. Следующий пример свойств класса ТАгд 1е: щение к элементу вектора v с индексом к в программе можно записывать как v [к]. Свойства и методы представлены в табл. 43. Максимальное по модулю значение зелемента вектора.
Минимальное по модулю значение эелемента вектора. AsStxing Значение элемента вектора с индексом index в виде строки. шог——I Количество элементов вектора (размерность). Параметр форматирования значения элемента index в стро- ку (см. класс, TFloatVar свойство Digits ). Общий для всех элементов параметр TFloatVar. Digits. Максимальное значение среди всех эелементов вектора. (RO) Параметр форматирования значения элемента Index в отроку If™' Общий для всех элементов параметр TFloatVar. Format. Указатель на элемент вектора с индексом index. Каждый элемент вектора является объектом типа TFloatVar. property ME:TFloatVar; Математическое ожидание (среднее значение) всех элементов Норма вектора - квадратный корень из суммы квадратов всех Несмещенное среднеквадратическое отклонение элементов property sununa: TFloatVar; Сумма всех элементов вектора.
uun Параметр форматирования значения элемента index в строку (см. класс TFloatVar, свойство Precision ). Общий ДЛЯ всех элементов параметр TFloatVar. Precision. property X (Index: longint ]: TFloaz; default; (число с плавающей точкой). раметры форматирования числовых значений в строки по умол- чанию ДЛЯ каждого элемента Format=ffGeneral; Precision-15; Digits-2. Cr““ Создает экземпляр (объект) - вектор размерности High (v) с элементами типа TFloatVar. Все элементы получают значения из списка аргументов конструктора. Параметры форматирования числовых значений в строки по умолчанию Format-ffGeneral; Precision-15; Digits-2 для всех элементов. Destroy MdVdo, procedure AddVector(V:TVector); Добавляет к элементам данного вектора элементы вектора v. Если размерности векторов не совпадают, то в суммировании одного из векторов. AngleWith function AngleWlth(V:TVectcr);TFloat; Вычисляет угол меду данным вектором и вектором v той же Присваивает элементам вектора значения из списка V. Cl.„ Присваивает всем элементам вектора нулевые значения.
Copyrzo. Копирует значения элементов из вектора V. Объект V должен падать. Копирование идет с первого элемента до исчерпания ин- дексов одного из векторов. procedure CopyFromMatrix (Fromlndex, Vcount: longint ; M:TMatrix; ARow,ACol:longint; Direction:TMatrDirection); индекс элемента вектора, начиная с которого копируются эле- менты матрицы; vcount - количество копируемых элементов. Чтобы скопировать все элемента вектора, надо задать рицы, начиная с которого следует копировать. Первый элемент матрицы имеет индексы [1,1]; Direction задает направление выборки элементов матрицы при копировании (см. описание типа TMatrDirection в таблице 4.6). procedure CopyFromMatrix (Fromlndex, vcount: longint; M•TMatrix; ARow,ACol:longint; Direction:TMatrDirection); Копирует элемены матрицы м в данный вектор. Fromlndex - | индекс элемента вектора, начиная с которого копируются эле- менты матрицы; vcount - количество копируемых элементов. рицы, начиная с которого следует копировать. Первый элемент матрицы имеет индексы [1,1]; Direction задает направление выборки элементов матрицы при копировании (см. описание типа TMatrDirection в таблице 4.6). С«рут« Копирует значения элементов данного вектора в вектор V. Объ- ект V должен быть создан заранее. Размерности даух векторов .исче^па.ния_ивдексов.одаого из векторов, 43
Нормирует вектор. т.е. делает его единичным. вектора, можно использовать константу cGetAll юный вектор. Fromindex - индекс элемента : которого копируются элементы записанные в RRow, ACol: longintz Direction: TMatrDirection) ; Копирует значения элементов данного вектора в объект- координаты (строку и столбец) ячейки таблицы, начиная с кото- всех формальных параметров аналогичен методу GetFromGrid. и столбцы таблицы принимают.


Clear Присваивает всем элементам матрицы нулевые значения. Соругг» Копирует значения элементов матрицы v той же размерности. CopyTo Копирует свои элементы в матрицу v той же размерности. FromGrid procedure GetFromGrid (Grid:TStringGrid; procedure PutOnGrid(Grid:TStringGrid; GridRow.GridCol:longint); Выводит матрицу в таблицу TStringGrid. (см.метод GetFromGrid ) Изменяет размер матрицы. Исходная матрица сохраняется в дыдущие, то добавленные элементы равны нулю. Вычитает из данной матрицы матрицу V той же размерности. Умножает все элементы данной матрицы на коэффициент Меняет местами строки матрицы с номерами Rowi и Row2. Транспонирует себя. Если исходная матрица имела п строк и m столбцов, то транспонированная матрица будет иметь m строк и Выполняет операцию r-a+b, где R, а, в — матрицы одинако-
class procedure SubstrMatr(А,В,В:TMatrix); Выполняет операцию r=a - в, где R, а, в - матрицы едина- ковых размеров. Результат получается в векторе R размером nxl. R:Tvector); v - вектор размером mxl; R - вектор mxl. class procedure MultMatr(A,B,R:Tmatrix); Выполняет операцию R= А- В, где A - матрица размером mxn; В - матрица размером nxk; R - матрица размером mxk. Программист должен обеспечить корректность размеров матриц. procedureVectByVect (V, U: Tvector ; R: Tmatrix) ; Выполняет операцию r=v- и1, где v и и - векторы размером nxl; R - матрица размером пхщ нятие «квадратная матрица». Квадратная матрица имеет дополнительные свой- ство и методы. Так, свойство Upper3Count целого типа есть суммарное количе- ство элементов верхне-треугольной матрицы. Конструктор constructor Create (ADim : integer) имеет единст- венный параметр, задающий порядок матрицы. вращает алгебраическое дополнение элемента матрицы с индексами i (строка) и /(столбец). годом преобразования матрицы в верхне-треугольную. Функция function IsSymmetrical : boolean возвращает true, если матрица является симметричной. Метод function invert : boolean обращает матрицу (на месте исход- ной) и возвращает true, если матрица неособенная. В противном случае метод возвращает значение false. Метод procedure Makeunit делает матрицу единичной. 48
Метод procedure Resize (ADim:integer) изменяет рамер квадратной матрицы. Класс TSysatatxix определяет симметричную квадратную матрицу как наследника квадратной матрицы. В дополнение к методам предка имеются ме- Метод-процедура GetFromVector( const v : TVector) формирует симметричную матрицу, копируя значения ее элементов из вектора V, а проце- дура Putonvector ( const v : TVector) копирует п(п+1)/2 элементов верх- элементов. Функция function QForm( v : TVector) : TFloat возвращает зна- вести несимметричную квадратную матрицу к симметричному виду. ; предназначен для организации списков с элементами возвращает ссылку на элемент (вектор) списка по индексу index. Отсчет ни- которое возвращает ссылку на элемент (матрицу) списка по индексу index. От- счет индексов ведется от нуля. § 4.2. Модуль uCommon Объявления базовых типов, констант, процедур и функций общего харак- ном модуле uCortunon. В частности, здесь объявлен стандартный для всех клас- сов тип вещественных чисел TFloat.
Объявления констант и типов приведены в табл. 4.5 и 4.6. Таблица 4.5 Объявления констант ulTOD.g 1SC/H Множитель перевода углов из радианной меры в градусную. Fi/100 Множитель перевода углов из градусной ме- ры в радианную. TWOP1 2 * Pi Удвоенное значение числа те. HalfPi 0.5 * Pi Половина числа те. AlmostZero le-9 Предназначена для проверки вещественных значений на приблизительное равенство нулю. Таблица 4.6 type TFloat = extended; T6xivector type T6xlVector = array[1.. 6] of TFloat; Вектор вещественных чисел из 6 элементов (стандарт- ный вектор состояния в декартовой системе координат). TSxlV.ctor type T3xlVector = array(1. . 3]of TFloat; T3x3Matrix type T3x3Matrix = array[ 1. .3, 1. .3] of TFloat; Квадратная матрица вещественных чисел 3x3. T6x6Matrix type T6x6Matrix = array(1. .6,1. .6]of TFloat; Квадратная матрица вещественных чисел 6x6 TAngleFormat type TAngleFcrmat = (af360, af 180, afEW) и методы класса TAngie). TOnStopBvent type TOnStopEvent - procedure (Caller iTObject; var Stop:boolean) of abject; Тип обработчика события, возникающего в симуляторе при проверке условия окончания процесса моделирования. Direction type TMatrDireetion-( mdRowRighc, mdRowLeft, Используется в методах GetFromGrid и PutOnGrid классов TVector и TMatrix для указания направления копирования значений: mdRowRight- по строке вправо; mdRowLeft-no строке влево; mdcolDown-по столбцу вниз; mdColUp-no столбцу вверх; mdDiagDcwn - по диагонали вправо - вниз; mdoiagop-no диагонали влево - вверх.
ны-функции вычисляют значения некого- I стандартном модуле Hath можно найти то возникает необходимость приведения значения некоторой угловой величины Главное значение arccos х можно получить с помощью функции Для вычисления arccos х и приведения результата к интервалу [О..2л] Для вычисления арктангенса предназначена функция ). Параметры: Sinx - значение синуса При исследовании относительного движения нескольких спутников Зем- лы а и ь отсчитываются от нуля и лежат в интервале [О.2л] каждый. При опре- делении углового расстояния значения а и ь рассматриваются как аргументы широты первого и второго спутника. Функция function Sign (х: TFloat): integer возвращает знак вещест- венного числа: 1, если х50 и -1 - в противном случае. функция function Tan_(х:TFloat):TFloat возвращает значение тан- генса угла х, выраженного в радианах. При значениях х близких к л/2 возвра- щает значение MaxFloat. Для получения реализаций случайных величин предназначена функция
1 строки, отформатированные по специальным правилам. Функция в зависимости от знака вещественного числа к возвращает либо символ «плюс» (+), либо символ «минус» (-). Знак числа определяется с помощью функции Функция function TimeAsHMS(Value : TFloat) : string Значение value - время, выраженное в секундах. Функция г строку вида sdodomm- ss" , zz, т.е. значение угла value, выраженно- at-af36С или AngleFormat-af180; s-E, если AngleFormat=afEW, а угол - к западу от Гринвича; s-w, если AngleFormat-afEW и угол - к востоку от Гринвича; ddd - целое число градусов; мм - целое число угловых минут; ss - целое число угловых секунд; zz- десятичная дробная часть угловых секунд. Для специального форматирования целых чисел имеется функция пределах и позиций. Например, если Num=12, а и=4, функция вернет строку Файловые функции. Для проверки корректности значения строковой переменной, значением которой является путь к файлу, используйте Эта функция возвращает строку value плюс символ \, если его нет i се Value. Пример:
Для проверки наличия на диске некоторой папки предназначена функция Чтобы получить в программе полный путь к файлу параметров приложе- ния используйте функцию function GetlniFile : string. Имя файла па- раметров совпадает с именем исполняемого файла прикладной программы и имеет расширение «ini». Файл параметров расположен в той же папки, что и исполняемый файл прикладной программы, а не в папке windows, как это при- нято по умолчанию. предназначена функция Она возвращает вещественное значение параметра, i ключевым словом KeyName в секции Section RefArea=2.55 ременным программы как показано ниже. 'SatelXitel' Для чтения строковых значений из файла параметров приложения ис- пользуйте функцию ет свойства я методы, присущие точке в трехмерном декартовом пространстве. Онн представлены в таблице 4.7.
Таблица 4.7 ‘прямое;»™™ Декартовы координаты точки х, Y, г. Обобщенный вектор координат точки: [1] -X, [2J-Y, [3]-Z, [4]-R (расстояние), [5] - прямое восхождение (рад), [6]- скло- нение (рад). Склонение, рад до точки. Spherical property Spherical : T3xlVector; Сферическиее координаты точки: [^-расстояние; [2]-прямое восхождение (рад); Pl-склонение (рад). CartCian Задает декартовы координаты точки X, Y, Z. Sbp.rie.l Задает сферические координаты точки: [Ц-расстояние; [2]-прямое восхождение (рад); [3}-склонение (рад).
Часть 2. ОПТИМИЗАЦИЯ ЛИНЕЙНЫХ СИСТЕМ УПРАВЛЕНИЯ Рассматриваемые здесь средства предназначены для разработки приклад- ных программ в рамках курсового и дипломного проектирования по соответст- вующей тематике. К ним относятся классы непрерывных и дискретных линеЙ- тимальности. В непрерывных системах учитывается аддитивное случайное ется возможность учета изопериметрических ограничений и статистическо- Прежде всего рассмотрим основные положения теории оптимального ставленных в библиотеке. Глава 5. Математический аппарат § 5.1. Непрерывные системы ния линейной непре рии оптимальности. лой при квадратичном крите- времени коэффициентами -[-.J] и - вектор управления размерности шума с матрицей интенсивностей Д. висят ни от компонент вектора состояния, ни от управления. Вектор состояния в начальный момент времени задан точно. Если то система (5.1) называется детерминированной. Требуется найти оптимальное управление u(t.x), которое минимизирует 7 - м( J[xre(<). . , (S.2)
где g и /g - заданные симметричные матрицы размером Симметричная матрица Ж имеет размеры (тли). Все матрицы, входящие в выражение (5.2), должны быть положительно определенными. мает вид [7] рассматриваемом случае црини 44^)сН]} : граничным условием Я(х,Г)=хг№г*(Г). (53) (5.4) При положительно определенной матрице Wfi) алгоритм оптимального управ- ления связан с функцией будущих потерь соотношением «(«)—(3.5) 1 функция будущих потерь имеет вид (5.6) где матрица K(t) удовлетворяет матричной системе обыкновенных дифферен- ~-с+к[(И')+4г(«М)-^М)»г-|(')в㹫 (5.7) с граничным условием к[т) =КТ. (5.8) В случае детерминированной системы c(t)^O. Иначе функция eft) есть решение дифференциального уравнения ‘(т)= 0. С учетом (5.6), алгоритм оптимального управления принимает вид и(м)-4И). (5.10)
£(г)=Г-(/)зЧ^(»). Матрица L(t) называется матрицей коэффициентов обратной связи. Ее (5.10), получаем уравнение оптимальной замкнутой системы: -W (S.12) Численное решение задачи синтеза оптимального управления проводится в два этапа. Этап 1. Цель первого этапа ~ вычислить матрицу K^Kfy) и параметр Q/d- Для этого необходимо проинтегрировать систему дифференциальных уравнений (5.7), (5.9) при известных граничных условиях на интервале времени [T./rf. Если задан неслучайный аектор начальных условий хй= *(«<>), находим функцию будущих потерь Jtu.j./W.cfc). (5.13) Значение выражения (5.13) по определению определяет минимум крите- рия оптимальности (52), который может быть достигнут при движении систе- Этап 2. Цель второго этапа - получить оптимальную траекторию движе- ния. Для этого необходимо вычислить компоненты аектора состояния в функ- ции времени путем моделирования системы (5.12). Для получения одной реа- лизации необходимо интегрироавть две системы векторно-матричных диффе- ренциальных уравнений (5.7) и (5.12) с учетом (5.11) при начальных условиях В случае стохастической системы необходимо провести статистическое моделирование для получения заданного количества реализаций случайного процесса (5.12). ми задач оптимизации непрерывных систем, рассматриваемыми ниже. Метод оптимизации линейных систем можно применять и при решении нелинейных задач. Так, часто используется прием линеаризации исходных не- замкнутую систему, динамика которой описывается нелинейными уравнения- ми, а управление вычисляется согласно алгоритму, найденному для линейных уравнений движения.

Согласно методу множителей Лагранжа минимизация критерия (5.16) с учетом ограничений (5.17) эквивалентна безусловной минимизации обобщен- ного критерия оптимальности (7,8 ] где Oj -множители Лагранжа, подлежащие определению с привлечением уело- Рассмотрим алгоритмы вычисления оптимального управления и ограни- чений при заданных множителях Лагранжа. Для определения оптимального управления используется рекуррентное соотношение метода динамического программирования [7], которое в рассмат- где а=£«,е.': »;=£«Л; <5-20> <5-211 (5.22) Функция будущих потерь имеет квадратичную структуру (5.23) = а + " 4ГА; Кн„ = К; (5.24) С, = с„, 1; =0. (5-25)
ратной связи. Алгоритм оптимального управления имеет вид (5 28) Функции Я/(х.) ДЛЯ любых I и j (5.23): где матрицы К‘ и коэффициенты с! вычисляются с помощью рекуррентных COOTHOlLJHHlj Kf sq> -аГк^-^к^, (5-29) (530) Г/ = Wf + ВТ К,>„В.(1 (5.31) Граничными условиями для соотношений (5.29) и (5.30) являются (5.32) Применяя рекуррентные соотношения (5.24), (5.25), (5.29) и (5.30), получа- ем следующие формулы для вычисления функции будущих потерь (5.33) которые, по определению, совпадают с левыми частями изопериметрических ограничений (5.17). Попутно вычисляются и коэффициенты обратной связи (5.27). Так же, как и в непрерывном случае, моделирование замкнутой системы (5.15) с алгоритмом управления (5.28) распадается на два этапа. Этап 1. Необходимо вычислить матрицы коэффициентов обратной связи и функции я/fe) при заданных исходных данных - числе шагов, матрицах Ah рекуррентных соотношений (5.24), (5.25), (5.29), (5.30) при соответствующих граничных условиях. Матрицы коэффициентов обратной связи на каждом шаге Этап 2. Получить реализацию процесса (5.15). В случае детерминирован- ной системы достаточна одна реализация, а в случае стохастической - несколь- 60
ко. При этом управление (5.28) должно вычисляяться по текущему вектору со- ко вся информация, необходимая их поиска, повучается на первом этапе. Для решения задач синтеза управления линейными дискретными систе- мами в библиотеке simulate 1. о имеются классы, реализующие свойства оптимальной дискретной линейной системы; замкнутую дискретную систему общего вида с линейным алгоритмом управления; • линейную дискретную систему, оптимальную по обобщенному квадра- и правила их поведения во времени. Все они являются наследниками класса "DynamicSystem. Поскольку свойствами линейной системы и критериев явля- ются матрицы, вычислять которые необходимо только в текущий момент вре- мени, по умолчанию они отнесены к дискретному типу. Схема наследования 1—j TContOpcLinSvsProcs | Класс TLinSysFrops инкапсулирует свойства линейной системы, причем программной реализации одинаков. Чтобы вычислить правую часть любого из Основной задачей объекта этого класса является вычисление элементов матриц, входящих в правую часть (5.1) или (5.15). Поэтому по умолчанию свойство Discrete установлено равным true.
Таким образом, к свойствам линейной системы относятся: ♦ матрица коэффициентов при векторе состояния A(i) или 4; * матрица коэффициентов при аекторе управления B(t) или В,; • корреляционная матрица аддитивного возмущения D(t) или Д; ♦ среднеквадратическое отклонение (СКО) мультипликативного возму- Если свойства ураввеннй не зависят от времени, достаточно задать их зна- При создании объекта конструктор класса TLinSys Frops инициализирует нулевую корреляционная матрицу аддитивного возмущения: D=0„ и нулевое СКО мультипликативной ошибки. TContOptLinsysProps, которые инкапсулируют свойства линейной системы и первого из них должно иметь: оптимизируемой по обобщенному критерию (5.18). Класс TCritPxape инкапсулирует свойства интегротерминалъного квадра- тичного критерия (5.2) или (5.16). К ним относятся: По умолчанию вес критерия равен единице, все матрицы - нулевые. Если свойства критерия не зависят от времени, достаточно задать их зна- чения в программе. В противном случае необходимо создать наследника класса TCritProps, перекрыть родительский метод Dynamics, и реализовать в Класс TCeepiCritPxops реализует критерий Лагранжа как взвешенную сумму нескольких квадратичных форм. В дополнение к свойствам родитель- ского класса TCompiCritProps инкапсулирует список, который содержит 1+1
формуле (5.22). Свойства линейных систем и критериев используются классами динами- ческих систем, оптимизируемых по квадратичному критерию оптимальности. Глава 7. Контроллеры линейных систем Под контроллером системы понимается объект, который вычисляет управ- ляющее воздействие согласно тому или иному алгоритму оптимального управ- ления. Когда говорят о задаче синтеза оптимального управления, контроллером является блок управления, включенный в контур обратной связи. Поскольку алгоритмы управления непрерывными и дискретными систе- мами различны, имеем два класса контроллеров, схемы наследования которых Класс TContSyaContzoiier вычисляет правые части дифференциальных уравнений (5.7) и (5.9). При этом матричное уравнение (5.7) преобразуется в векторное отображением верхнего треугольника симметричной матрицы K(t) в Размерность вектора правых частей системы дифференциальных уравне- ний (5.7), (5.9) равна п(п+1)/2+1. Доступ к свойствам оптимизируемой системы ной системы вида (5.1), критерия оптимальности (5.2) и «умеет» вычислять правые части дифференциальных уравнений (5.7) и (5.9). Объект этого класса
может быть только компонентой (подсистемой) замкнутой системы и самостоя- тельного значения не имеет. Для типовых приложений достаточно создать объ- ект данного класса в составе объекта типа TContoptsystem или любого его на- Ключевыми свойствами данного класса являются: :я корректной тогда, когда в любой мо- ложительно определенными, а матрица W(t) имеет обратную. Проверка на по- ложительную определенность этих матриц не осуществляется, но если матрица § 7.2. Контроллер дискретной системы Контроллер дискретной системы TDiscrSysContcollec является наслед- ником TDynamicSystem. Его задача заключается в вычислении правых частей рекуррентных соотношений (5.24), (5.25), (5.29), (5.30) и матриц коэффициен- тов обратной связи (5.27). Доступ к свойствам оптимизируемой системы осу- решением задачи оптимального управления с изопериметрическими отраниче-
Правые части соотношений (5.24), (5.25), roiecrsyeconeroiiec (5.29), (5.30) и матрицы (5.27) | TDis^crOptLinSysProps | Матрицы Bt, Dj И Сщ | I----j TCcnplCritPrcps | Матрицы Wlf Q„ К | ----| TCritProps | Матрицы w*!, 0°!, К* и <х° | ______________________________________________| TCritProps | Матрицы W\, Q*j, К1 и a1] ----1 TCritProps | Матрицы w\, Q*t, к1 и a1 j Объект этого класса может быть только подсистемой замкнутой системы и самостоятельного значения не имеет. Для типовых приложений достаточно любого его наследника. Ключевыми свойствами данного класса являются: коэффициенты {с/ }>j = 07. 1Я задач со скалярным управлением дополнительно имеется свойство нейной дискретной системой считается корректной тогда, когда в любой мо- мент времени все матрицы, входящие в критерий оптимальности, являются по- Глава 8. Замкнутая система управления Замкнутая система управления получается объединением свойств линей- ной системы (дискретной или непрерывной), критерия оптимальности и кон- троллера. Поскольку свойства непрерывных и дискретных систем, а также их
TContoptSys и TDiscrOptSys соответственно. Первый класс порожден от roif Equation, а второй - от TDynamicSystem. Оба класса замкнутых систем не Как было отмечено выше, линейная система может быть получена линеа- ризацией исходной нелинейной системы в окрестности некоторой опорной тра- ной системы, когда : блоком управления придется создать наследника соответствующего класса и } 8.1. Непрерывная система циальных уравнений, в цепи обратной связи которой используется блок синтеза оптимального управления пюбои задачи синтеза оптимального управления этапа, класс TContOptSystem имеет методы Resetcontroller и roller {То, тк, step) решает задачу синтеза опти- юй системой (5.1) на интервале времени [Т^Т^ с ....J выбрать любой из имеющихся методов (Эйле- , Эйлера-Коши, Рунге-Кутты или Дормана-Прниса). Собственно моделирование замкнутой системы на интервале [Г^Т^ обес- свойства - ссылки на методы onEnter, ondutput, onExit, Onstop, что по- зволяет организовать вывод результатов как на этапе синтеза, так и на этапе моделирования. При этом вывод можно разрешать нни запрещать обращением к методам EnableLogging или DisableLogging соответственно.
ской моделью непрерывного случайного векторного воздействия типа белого возмущений. Для учета аддитивных возмущений при статистическом модели- ровании его необходимо модифицировать с учетом рекомендаций, данных вы- Если динамические коэффициенты линейной системы и критерия постоян- ны, в программе можно использовать экземпляры TCcntOptLinSyst класса не- ходимо объявить свои классы свойств системы и (или) критерия, наследуя их от совместно с TContOptSystem или TContOptLinSyst. 67
j 8.2. Дискретная система асе TDiscxCptSystem есть дискретная система, в цепи обратной связи I используется блок синтеза оптимального управления соответствующей еквадратического отклонения мультипликативного возмущения сгя , а : характеристик сложного критерия - матриц w>, Q>, к1, Второй втоматически при создании объекта класса TDiscroptSystem. Если для реали- подсистемы, то это можно сделать с помощью метода AddMember. на рис. 8.2. Как и в предыдущем случае, решение задачи синтеза оптимального управ- ления включает два этапа. Класс TDiscroptSystem имеет два соответствующих | TDiscroptSystem | Модель исследуемой дискретной системы ~ ~ | -------1 TDiscrOptLinSysProps | Сц1 и матрицы А1,В„Р1 I—[ TCompiCritProps | Структура показана на рис.7.3 Метод Resetcontroller (N) решает задачу синтеза //-шагового оптималь- ного управления линейной дискретной системой (5.15) при обобщенном крите- рии (5.18). Собственно моделирование замкнутой системы при обеспе- чивает метод Simulate.
: результаты как на этапе синтеза, так и на этапе моделирования. Вывод DxsableLogging соответственно. Отметим, что после обращения к методу Resetcontroller систему можно моделировать неограниченное число раз, что открывает возможность статистического моделирования. рованных гауссовских возмущений при моделировании не вызывает затрудне- ний. Поскольку фактическая модель дискретной системы еще не определена, моделирование случайных факторов возлагается на программиста при создании наследников класса TDiscrOptSystem. В отличие от класса TContoptSystem . На- чика случайных чисел RandomGauss. Специально для исследования стохастических дискретных линейных сис- (или) критерия, наследуя их от tdi Глава 9. Примеры программ моделирования непрерывных и дискретных систем с использованием классов линейных систем, оптимизируемых по квадратичному критерию оптимально- Первый пример связан с исследованием i ой системы второго по- 1 квадратичном кртерии в форме Больца. Второй пример иллюстрирует решение задачи перевода стационарного спутника Земли в заданное положение [5]. Каждый пример сопровождают по- становка задачи, ее анализ с точки зрения имеющихся возможностей, програм-
§ 9.1. Моделирование непрерывной системы Дана линейная детерминированная система (9Д) / = «>’Л + Х?(Г)+Ж’(Г)->«»Й- Перейдем к векторно-матричной форме записи модели: * = At+ Ви. J = wfu2dt+хг(г)кгх[т). (9.2) "Чй ч?) -и Несмотря на то что классы свойств линейных систем и критерия опреде- лены для векторного управления (В и W- матрицы), их можно использовать и ! и критерия не зависят от времени. Поэтому мы можем использовать i Листинг 9.1. Текст метода TForml. SoiveExatnpie.
при различных значениях множителя w. элементов матриц Q,, А, Кт я началь- ных условиях Х(0). Для простоты примем, что все матрицы от времени не зави- сят Кроме того, требуется вычислить оценку энергозатрат как функцию време- (9.5)
и оценку л.(о)=°. ^)=хЧ/Ы4 лДо)=о. (9.7) (9-8) Для учета уравнений (9.7) и (9.8) объявим класс TRiskitems как наслед-
Сиачала интегрируется система уравнении (5./). Но уравнения (У-1) являются подсистемой объекта TContoptLinSys и на данном этапе их интегрировать не надо. Класс TContoptLinSys снабжен специальным свойством BackMode бу- шается задача синтеза. В противном случае объект находится в режиме моде- мой системы, так и уравнения составляющих критерия будут интегрироваться совместно с уравнениями (5.7). На рис. 9.1 показана форма окна программы примера. Группа исходных данных программы содержит: ♦ метод интегрирования (тсошЬоВох);
• начальный вектор состояния Х(0) (TStringGrid). В группе результатов представлены: ♦ значение функции будущих потерь (TLabel); ♦ оценка энергозатрат - значение R/Cty (TLabel); ♦ значение второго слагаемого критерия (9.4) (оценка терминальной точ- Результаты моделирования выводятся в текстовый файл, имя которого лы, комментарии к нему и фрагмент выходного фейла приведены на листинге и- и элементов матрицы Q. В табл. 9.1 приведены значения функции бу- чноЙ точности (Я.?) при Q=0, К(7)=Ь. xt=0, х2=1. Т=5с. Таблица 9.1 Поскольку в качестве оценки энергозатрат рассматривается интеграл мо- уля управления, функция будущих потерь не совпадает со взвешенной суммой На рис. 9.2 и 9.3 показаны переходные процессы и фазовые портреты системы при w = /hw = O./ соответственно. Рассмотрим влияние на переходный процесс значений элементов матрицы Q. Пусть £?п=С»=2, Qn=Qn=0. На рис.9.4 показаны переходный процесс (еле- предыдущем случае. Энергозатраты (оценка Я,) также уменьшаются. Объясне- ние эффектов, связанных с динамическими свойствами критерия и системы, ветствующем теоретическом курсе. Здесь лишь дана иллюстрация возможно- стей классов оптимизации при проведении разнообразных исследований.

.... Л m J Puc.9 4. Переходный процесс (слева) и фазовьп инг 9 3. Текст модуля программы модели^ >дуль формы, приведенной на рис.9.1 .ndows. Messages, SysUtils, Classes



IbRisk.Caption : = FI.Readstring(ASection,•Risk•,•0'); IbFuel.Caption := FI.Readstring(ASection,•Fuel1,’0’); // Метод записи свойства Filename ractFileName(FFileName)+’]’; procedure TForml.SimSnter(Sender:TObject); AssignFile(F,Filename); Rewrite(F); Writein(F, • Time’: 10, • X1':LO,' X2*:10,a U’:10, ' Ll':10,1 L2':10, • Kll’:10,• K12’:10,1 K22‘:10, ’ Rl*:10, • R2*:10); procedure TForml. SimPr int (Sender: TObj ect), me 0.1 выводить каждый десятый шаг Trunc(0.1/OS.TimeStep*O.3 J Write(F,State[1].AsFloat:10:4, State [2].AsFloat:10:4); Write(F, Controller.![1]:10:4,Controller.L[2]:10:4)7 Controller.K.M[2,2]:10:4); Write(F, Member[VserMember].State[1].AsString: 10); Writein(F);
81
OS.AddMember(TRiskIterns.Create); OS.OnSolverEnter :«= SimEnter; OS.OnSolverOutput := SimPrint; Memol.Lines. Add(’Идет моделирование. Ждите. .. case cbMethod.Itemindex of 0: OS.Method := itEuler; 1: OS.Method itEulerCauchy; 2: OS.Method := ItRungeKutta; StrToFloat(edWeight.Text); OS.DisableLogging; OS.Resetcontroller (StrToFloat (edStart.Text), OS.Simulate; Memol.Clear; Memol .Lines. LoadFrotnFile (Filename) ; IbRisk.Caption : = FloatToStrF(OS.Risk,ffFixed,18,5); IbTermRisk.Caption:= FloatToStrF(OS.Controller.К-QForm(OS.Inp), procedure TForml.FormCreate(Sender: TObject); // файла и выравнивает вертикальную разделительную черту Enablecontrols(false); mRunl.Enabled false; Beveil.Width := GroupBoxl.Width; // Обработчик списка выбора метода интегрирования procedure TForml.cbMethodChange(Sende г: TObj ect); ClearDataComponent s;

§ 9.2. Моделирование дискретной системы логична моделированию непрерывных систем. Разница состоит в том, что ис- моделирования стохастических систем с мультипликативными и ад- терий оптимальности может быть взвешенной суммой нескольких частных критериев. Это означает, что для вычисления значений составляющих исходно- го критерия не надо создавать свои классы вроде TRiskiterns, как это было в Рассмотрим в качестве примера задачу оптимизации процесса перевода тационарного спутника земли (СИСЗ) с помощью корректирующей двига- ельной установки (КДУ) большой тяги [5]. -И- Ч Ч*)- <91о> Под оптимизацией процесса перевода СИСЗ понимается определение ал- >ритма коррекции его орбиты, позволяющего достичь заданного конечного )стояния (х(=0, х2=0) с требуемой точностью при минимальных энергетиче- сих затратах. Количество коррекций N задано. Энергетические затраты оцениваются величиной (9.12) <• - длительность пассивного участка i Требуется найти алгоритм коррекции, обеспечивающий минимум (9.11) с том изопериметрического ограничения J, <J*. Для решения задачи необхо- ю составить обобщенный критерий вида (5.18) и применить условие опта-
числе коррекций, интервалах между коррекциями Д*, весовом множителе и па- Для простаты примем, что интервалы меяц не зависят от времени (т.е. от номера коррекции). Поскольку динамические коэффициенты системы (9.9) постоянны, в про- являются выражения (9.11) и (9.12). управления. На рис.9.5 показано окно программы примера «Перевод СИСЗ». пей Все действия, связанные с подготовкой и решением задачи синтеза, сосре- доточены в методе формы главного окна TForml.Problemsolver, текст которо- го с комментариями приведен на листинге 9.4. Листинг 9 4. Текст метода ProblenSolver 85
Ввод значений параметров из компонент TEdit Tz StrToFlOat(edKeep.Text); // цикл удержания Delta := StrToFloat(edDelta.Text); // интервалы StrToFloat(edSigmaMu.Text); // CKO ошибки p TDiscrOptLinSyst. Create
OS.OnSc1verExir \= SimExit,- FloatToStrF(OS.Risk!ij,trGeneral,6,5); статистическое моделирование процесса перевода СИСЗ при фиксированном (неслучайном) векторе начальных условий. Результаты статистического моде- ния. Для определенности примем, что допустимая область конечного состояния СИСЗ ограничена по координате xt значением Г (по модулю). жаются результаты статистического моделирования.
Для реализации статистического моделирования в текст метода Prob lemSolver предыдущего примера после строк, обеспечивающих вывод критерия и оценок на метки формы, добавлен код:

LbFuel.Caption := 1 '; IbTerminal.Caption ;= •1; Memol.Clear; bRun.Enabled := true; Image 1 .Canvas.Brush.Color := clWindow; Imagel.Canvas.FillRect (Rect(0,0,Width,Height)) DrawCross; procedure TForml.DrawCross; OldColor : TColor; begin with Image1 do OldColor := Canvas.Pen,Color; Canvas.Pen.Color := clSrlver; Canvas.Move To(Width div 2, 0) ; 'Canvas.LineTo(Width div 2, Height); Canvas.MoveTo(0, Height div 2); Canvas.LineTo(Width, Height div 2); Canvas.Pen.Color:’•OldColor; procedure TForml.DrawTermAr ea; OldColor : TColor; const Dxm • 1; // Допустимое угловое отклонение 2/Tz; with Image1.Canvas do OldColor := Brush.Color; MoveTo(GetXplot(-Dxm),GetYplot(0)); LineTo(GetXplot (-Dxm), GetYplot (Vy)); LineTo(GetXplot(Dxm), GetYplot(0)); LineTo(GetXplot(Dxm), GetYplot(-Vy)); LineTo(GetXplot(-Dxm), GetYplot(0)) ; Brush.Color := clInfoBk; FloodFill(FXo,FYo, clBlack, fsBorder); Brush.Color : = OldColor; DrawCross; function TForml .GetXplot (X: TFloat) : integer; begin Result := FXo + Trunc(FMx * X);
Getxplot; GetYploc(Y); Imagel-Height
X : TVector; Ncorr : integer; X. GetFromGrid (1, cGetAll, sgXO, 0,0. mdColDown). StrToFloat(edDelta.Text); Alpha StrToFloat(edAlpha.Text); SigmaMu := StrToFloat(edSigmaMu.Text) i Ncorr StrToInt(edN.Text); OS ;= TDiscrOptLinSyst.Create; OS.SystProps := TDiscrOptLinSy* OS.SystProps.A[1,1] := 1; OS.SystProps.Bv[l] OS.SystProps.Bv'2] SigmaMu; IbRisk .Caption := FloatToStrF(OS.ComplRisk,ffGeneral,6,5); IbFuel .caption :- FloatToStrF(OS.Risk(0],ffGeneral,6,5); IbTerminal.Caption:- FloatToStrF(OS.Risk[1),ffGeneral,6,5) // Статистическое моделирование 100 реализаций OS.MultErrorsOn; OS. DisableLogging; tok j 1 to 100 do
TForml.bRunClick(Sender: TObject)I Глава 10. Классы объектов оптимизации Объявления классов линейных непрерывных и дискретных систем, опти- мизируемых по квадратичному критерию оптимальности, находятся в модулях uoptsys и uDSCtrl библиотеки Simulate 1.0. Поскольку все классы, связан- ные с задачами оптимизации, являются дочерними классами сложных систем, в данном разделе приводятся сведения только о новых и перекрываемых методах и свойствах t управления, матрицы динамических коэффициентов и статистиче-
скис характеристики мультипликативного и аддитивного возмущений. По умолчанию свойства линейной системы отнесены к дискретному типу. Сведения о свойствах и методах класса представлены в табл. 10.1. (RO) Матрица динамических коэффициентов а(!) или А, ««» Матрица динамических коэффициентов B(t) или В* скалярном управлении. 1К» Корреляционная матрица аддитивного возмущения : Dft) или Д СКО мультипликативной ошибки управления а- Размерность вектора управления. №)“ Размерность вектора состояния линейной системы. create Создает объекты - свойства линейной системы в соответствии >..troy Освобождает память, выделенную под объекты- свойства ли- нейной системы. Если свойства системы управления не зависят от времени, можно исполь- зовать объекты данного класса непосредственно как показано в примерах пре-
дыдущего раздела. В противном случае создайте наследника перекройте виртуальный метод Dynamics и реализуйте в нем вычисление эле- ментов матриц динамических коэффициентов как функций времени. Для не- задачи (если это необходимо) в методе Dynamics анализируйте свойство Baek- i 10.2. Свойства квадратичного критерия Свойства квадратичного критерия инкапсулированы в класс TCritFrcps. Он является наследником TDynamicSystem и рассматривается как сервер дан- ных квадратичного критерия вида (5.2), (5.16) , (5.17). Свойствами критерия являются матрицы Q, W, Кт (К) и вес критерия - множитель а. Сведения о свойствах и методах прведены в таблице 10.2. Информацию о размерности тему, которая является владельцем данного критерия. При использовании объ- ектов этого класса в составе TContOptSystem или TDlscrOpSystem необходи- мые ссылки устанавливаются автоматически. Таблица 10.2 Q RO proparty Q : TSquareMatrix; Матрица коэффициентов Q(t) или й. :( Матрица коэффициентов W(t) или w:. RO P^er^Kt^TS^areMatrbu^ RW Ссылка на свойства линейной системы. Haight RW Вес критерия. По умолчанию вес критерия равен 1. Создает «пустой» объект - сервер свойств квадратичного кри- терия с матрицами неопределенных размеров. destructor Destroy; override;
Если объект этого класса будет использоваться в программе самостоя- Последний оператор в приведенном выше фрагменте гарантирует создание матриц, входящих в критерий, с соответствующими размерами. Если свойства критерия не зависят от времени, можно применять в грамме объекты данного класса непосредственно как показано в гл.9. В тивном случае следует создать наследника, перекрыть метод Dynamics и как функций времени. i lit! 110.3. Критерий Лагранжа Класс TComplCritProps (см. рис. 6.1) инкапсулирует критерий Лагранжа - задачи синтеза оптимального управления. Задача любого объекта данного клас- ческой системы показана на рис.7.3. S(L: integer) устанавливает коли- имеется свойство ) 10.4. Свойства оптимальных систем Свойства линейных систем, оптимизируемых по квадратичному критерию имальности, реализуют классы TContOptLinSysProps и Класс TCoatoptLinSysProps инкапсулирует линейную систему (5.1) и критерий (5.2). Таким образом, он является абстракцией оптимальной линейной непрерывной системы управления при квадратичном критерии опимальности. Данный класс является наследником TLinsysProps и имеет иерархическую
жащий сервером свойств уравнений (5.1), а подсистемой - сервер свойств кри- ванных для контроллера. гимального управления. зависят от времени, объект этого 1 наследника ствуюшие действия. I ления. Связь свойств системы с критерием устанавливается присваиванием свойству CritProps ссылки наобъект-свойства критерия, например, (5.15) и критерия (5.18). Тем самым реализуется понятие линейной дискретной системы, оптимизируемой по квадратичному критерию Лагранжа. Объект этого свойств Критерия также имеет иерархическую структуру, fcro продемонстрироваио в примере разд. 9.2. В противном случае следует соз- > наследника TDiscrOptLinSysProps и перекрыть метод Dynamics, реали- 1в в нем соответствующие действия. Если динамические коэффициенты критерия зависят от времени, надо соз- их в список подсистем критерия, доступного через свойство Объект TDiscrLinSysProps создается конструктором Create (л, mJ, гае и - число компонент вектора состояния, а т - число компонент вектора управле-
навливает число частных критериев (5.17), включая и основной критерий (5.16). При составлении программ достаточно применять объекты класса Далее можно определять свойства самой системы и критериев, например: MyDSProps .А[1,1] := 1; МуOSProps.В[1,1] := 2,- вычисления правых частей матричного дифференциального уравнения (5.7) и Свойства класса TConlSysCcntroller (RW) Коэффициент C(t) - решение уравнения (5.9). (RO) Коэффициент обратной связи по i-й компоненте вектора со- мент строки коэффициентов обратной связи для случая ска- лярного управления.

Cj (RO) property Cj (Index: integer] : TFloat; Коэффициенты С’ в (5.30). O^ndexil. Ссылка на свойства обобщенно) критерия (5.18). GainsLiSt property GainsLiat : TMatrixLiet; Указатель на список матриц коэффициентов обратной связи. (RO) Номер шага :=/ .N, где w - количество шагов (см. ниже). (RO) Матрица К, в уравнении (5.24). So) property Kj (Index:integer]: TSymHatrix; Матрица К? в уравнениях (5.30), o^ndex<!. (BO> property L(AStep:integer): TMatrix; Матрица коэффициентов обратной связи Lt где AStep есть <№l property Lv[AStep,Index :integer):TFloat: Значением является коэффициент обратной связи шага AStep по компоненте вектора состояния с номером Index в случае скалярного управления. (№> Количество шагов, заданное методом Resetcontroller объекта TDiscroptSystem - владельца объекта данного клас- Ссылка насвойтсва линейной системы Класс TContOptSystem (наследник TDifEquation) инкапсулирует свойства и правила моделирования замкнутой системы, блоком управления в которой является алгоритм синтеза оптимального управления линейной непрерывной стохастической системой, реализуемый объектом типа TContSysControlier. 100
объект, инкапсулирующий нелинейную систему, траектория движения которой находится в окрестности заданной опорной траектории, а управляющее воздей- Подобный объект необходим, например, для составления программ авали- ния границ приемлемости линеаризации при решении той или иной техниче- ской задачи. Для изучения теории и практики применения линеаризации урав- нений возмущенного движения в задачах синтеза оптимального управления решения задачи синтеза оптимального управления и моделирования замкнутой ий. Для этого рассматриваемый класс инкапсулирует си- управления замкнутой системы класс (RO) property BackMode : boolean; Флаг этапа решения задачи. Если (гае, то объект в режи- ме решения задачи синтеза (этап 1). В противном случае объект находится в режиме моделирования замкнутой системы (этап 2). Controller (RO) property Controller:TContSysController; Указатель на объект - контроллер линейной непрерыв- property Control : TVector; Указатель на объект - вектор управления U(t,xj. property CritPrcpS : TCritProps; указатель на объект - свойства критерия (5.2).
SystProps (RW) Указатель на объект - свойства линейной непрерывной системы, оптимизируемой по квадратичному критерию. Конечное системное время интервала моделирования. property Method : TPropMethod; Определяет метод интегрирования для внутреннего си- мулятора. Допустимы значения: itEuler-метод Эйле- ра; itEulerCauchy - метод Эйлера-Коши; HRungeKutta - метод Рунге-Кутты 4-го порядка. OnSolverEnter property OnSolverEnter:TNoti fyEvent; Метод - обработчик события onEnter внутреннего си- мулятора. OnSolverOutput property OnSolverOutput:TNotifyEvent; Метод - обработчик события cmoutput внутреннего си- мулятора. Обработчик события внутреннего симулятора OnExit. 4^a***S*ep Обработчик события onstop внутреннего симулятора. Risk""" (RO) property Risk : TFloat; Значение функции будущих потерь (5.13). Указатель на встроенный симулятор. (№1 Текущее скалярное управление U(t). Имеет смысл только при прямом моделировании когда работает метод (№> Компонента index текущего векторного управления U(t). Имеет смысл только при прямом моделировании когда работает метод Simulate. 32
тервале [tn,7]. Уравнения модели должен реализовать ме- При прямом моделировании флаг BackMode-false и уравнения движения интегрируются совместно с уравне- ниями контроллера. Задача моделирования линейных оптимальных систем инкапсулирована в класс TContOptLinSys. Он является наследником TContOptSystem и перекры- На листинге 10.1 приведен исходный код класса TContOptLinSyst. Анали-
линейным блоком управления Включение объекта реализующего опорную траекторию в состав замкну- той системы осуществляется оператором вида MyClosedLoopSystem - объект-наследник класса TContOptSystem. Внутри класса MyClosedLoopSystem ссылка на объект пользовательского класса содержится в элементе Member [UserMember ]. 105
§ 10.8. Замкнутая дискретная система свойства и правила моделирования замкнутой системы, блоком управления в которой является алгоритм синтеза оптимального управления линейной дис- кретной стохастической системой, реализуемый объектом типа TDiscrSysController. На основе класса TDiscroptSystem можно создать объ- ходится в окрестности заданной опорной траектории, а управляющее воздейст- вие вычисляет объект типа TDiscrSysController. Подобный объект необхо- дим для анализа поведения нелинейной системы с линейным блоком управле- пракгики применения линеаризации уравнений возмущенного движения в за- комендовать монографии [6.8]. В классе TDiscroptSystem уравнения движения не определены. Так, для альные методы Dynamics и Obtaincontrol. Как было сказано выше, класс TDiscroptSystem инкапсулирует правила решения задачи синтеза оптимального управления и моделирования замкнутой этапа. На каждом из них осуществляется моделирование систем дискретных уравнений. Для этого класс инкапсулирует симулятор TSimulator, свойства и методы которого рассмотрены в §3 4. Для простоты управления моделировани- ем замкнутой системы класс TDiscroptSystem имеет свойства, которые по смыслу аналогичны соответствующим свойствам класса TSimulator. Таблица 10.6 CotqplRisk Значение функции будущих потерь (5.33). Имеет Controller (RO) Указатель на вектор управления и/х). 106
§ 10.8. Замкнутая дискретная система свойства и правила моделирования замкнутой системы, блоком управления в которой является алгоритм синтеза оптимального управления линейной дис- кретной стохастической системой, реализуемый объектом типа TDiscrSysController. На основе класса TDiscrOptSystem можно создать объ- ходится в окрестности заданной опорной траектории, а управляющее воздейст- вие вычисляет объект типа TDiscrSysController. Подобный объект необхо- дим для анализа поведения нелинейной системы с линейным блоком управле- пракгики применения линеаризации уравнений возмущенного движения в за- комендовать монографии [6.8]. В классе TDiscrOptSystem уравнения движения не определены. Так, для альные методы Dynamics и Obtaincontrol. Как было сказано выше, класс TDiscrOptSystem инкапсулирует правила решения задачи синтеза оптимального управления и моделирования замкнутой этапа. На каждом из них осуществляется моделирование систем дискретных уравнений. Для этого класс инкапсулирует симулятор TSimulator, свойства и методы которого рассмотрены в §3 4. Для простоты управления моделировани- ем замкнутой системы класс TDiscrOptSystem имеет свойства, которые по смыслу аналогичны соответствующим свойствам класса Tsimuiator. Таблица 10.6 ComplRisk Значение функции будущих потерь (5.33). Имеет Controller (RO) Указатель на вектор управления и/х). 106
(ВИ property Cri tenon (Index: integer]: TCntProps i Ссылка на свойства критерия (5.16) при index-о или на свойства любого критерия (5.17) при Index - (RO) Текущий шаг на интервале (RO) Количество шагов N. Задает метод Resetcontroller. Количество критериев задачи, включая основной. Указатель на свойства линейной дискретной системы. Обработчик события симулятора OnEnter. xlv-t0“tput Обработчик события симулятора OnOutput. OnSolvezExit Обработчик события симулятора OnExit Обработчик события симулятора OnStop Значение составляющей обобщенного критерия опти- мальности при неслучайном начальном векторе состояния -(5.33), (5.34). property Solver : TSimulator; Указатель на встроенный объект - симулятор. (RO> Текущее скалярное управление Ц. Имеет смысл только при прямом моделировании когда работает метод 107
(RO) Компонента index текущего векторного управления U.ezMember (RO> property OserMember : integer; Создает структуру объекта. Destroy AdditiveErrors procedure AdditiveErrorsOff; Отключает режим учета случайных аддитивных оши- бок. AdditiveErxoreOn Включает режим учета случайных аддитивных ошибок. DisableLogging Отключает обработчики событий симулятора onEnter, OnOutput, CnExit. EnebleLogging Активизирует обработчики событий симулятора MultExroreOff procedure MultErrorsOff; ных ошибок MultErrorsOn Включает режим учета случайных мультипликатив- ObtainControl ObtainControl(V:TVector}; vlrtual; Подлежит перекрытию при наследовании. Предна- значен для вычисления управления V в текущий мо- 108
Со»Ио11.г Решает N- шаговую задачу синтеза. После обращения к этому методу возможно моделирование замкнутой сис- вованы только уравнения контроллера. гов. Уравнения модели должен реализовать метод Dynamics. При прямом моделировании флаг системы BackMode-f al se, уравнения контроллера из цикла мо- Для моделирования линейной дисктретной замкнутой системы имеется класс TDiscrOptLinSys. Он является наследником TDiscroptSystem, который перекрывает только родительский метод Dynamics. На листинге 102 приведены объявление и описание класса TDiscrOptLinSys. Здесь иллюстрируется технология моделирования дискрет- 109
стности опорной траектории, аналогична случаю непрерывной системы. 2. КошткаРэй. Создание оригинальных компонент в среде Delphi. К.:НИПФ - «ДиаСофт Лтд.», 1996. 3. Дарахвелидзе П.Г. Марков ЕЛ. Delphi 4.-СПб.:БХВ -Санкт-Петербург, 1998. 4. Лебедев В.Н. Расчет движения космического аппарата с малой тягоЙ.-М.: ВЦ АН СССР. Выпуск 5.1968 движением космических летательных аппаратов. - М.:Машиностроение, 1974. Учебное пособие. - М.: МАИ, 1983. орбитах / М.Ф.Решетнев, ^Машиностроение, 1988. 110