Смекни!
smekni.com

Объектно-ориентированный подход (стр. 6 из 22)

Естественным приложением научных работ данной тематики (в том числе и настоящей работы) является создание «объектно-ориентированных вычислительных библиотек». Несмотря на то, что их создано очень много, большинство предназначено для решения задач линейной алгебры, вычисления сложных функций и решения недифференциальных уравнений. Более сложные задачи, как обосновывается в [2], должны решаться самостоятельно пользователями этих базовых алгебраических библиотек. В данной работе предлагается иная концепция объектно-ориентированной библиотеки (см. 3.4).

3.2. Объектная интерпретация понятий вычислительной математики

3.2.1. Системы уравнений

В разделе 2.2.1 было обосновано, что элемент вычислительной модели должен представлять собой набор семантически связанных параметров, к которым привязаны расчётные алгоритмы. Другими словами, элемент трактовался как объект (в смысле ООП) и соответствовал либо типичным математическим объектам, либо типичным объектам предметной области. Ниже как раз обсуждается соответствие элемента универсальным математическим понятиям, без привязки к конкретной предметной области. Примером чисто математического элемента является система уравнений, а «семантически связанными параметрами», объединяемыми элементом, в этом случае являются искомые переменные и коэффициенты системы. Если коэффициенты системы – параметры элемента – не являются постоянными, а зависят от решения системы, то эту зависимость также можно представлять как объект или даже совокупность объектов (функций); однако такое представление описывалось выше и не имеет прямого отношения к рассматриваемому здесь математическому объекту.

На базе одной и той же системы уравнений могут, как правило, решаться задачи нескольких типов. Например, для системы обыкновенных дифференциальных уравнений может ставиться задача Коши или краевая задача. При решении обеих задач может использоваться один и тот же элемент, что является одним из основных преимуществ объектно-ориентированного представления численных методов. Более того, если для решения краевой задачи применять удобные алгоритмы (например, метод «стрельбы»), то не требуется создавать специальные методы элемента – достаточно в цикле использовать метод, отвечающий за решение задачи Коши.

Другое преимущество объектно-ориентированного подхода связано с простотой совместного решения уравнений различных типов. Например, в одной части моделируемой системы может происходить чисто конвективный перенос и решаться гиперболическое уравнение, а в другой – диффузионный перенос и, соответственно, параболическое уравнение. Данный подход инвариантен также относительно размерности задачи и позволяет рассматривать дискретно-непрерывные системы, то есть решать совместно алгебраические и дифференциальные уравнения.

Ещё одно математическое достоинство объектов заключается в их инвариантности относительно типа решаемой задачи. Является ли задача статической, динамической или вообще обратной задачей идентификации параметров модели – во всех этих случаях используются одни и те же расчётные классы элементов. Различие между этими задачами заключается только в алгоритме обновления состояния элементов, и этот алгоритм занимает всего несколько строчек кода. В случае динамической задачи обновление происходит вплоть до заданного времени, в случае статической – до получения заданной точности. В случае обратной задачи получение заданной точности происходит много раз в цикле, итерации которого соответствуют различным значениям искомых параметров модели, а изменение этих параметров происходит согласно какому-либо методу решения нелинейных уравнений.

Таким образом, основной элемент объектно-ориентированной модели – система уравнений – рассчитывает значения неизвестных системы (возможно, динамику их изменения во времени) по значениям своих коэффициентов (и правой части), взаимодействуя при этом с другими объектами, если коэффициенты или правая часть зависят от решения. Ниже принципиальные алгоритмы таких расчётов рассматриваются более подробно.

3.2.2. Схемы решения уравнений

В соответствии с методологией вычислительной математики, для решения системы уравнений (даже если она является простейшей алгебраической) необходимо сначала перейти к её дискретному аналогу – схеме. В схему входят значения параметров элемента (неизвестные и коэффициенты системы уравнений) на нескольких последовательных временных слоях или на нескольких итерациях. При стандартной (процедурной) реализации схемы разным слоям (или итерациям) соответствуют различные переменные (точнее, массивы переменных), что приводит к высокой сложности алгоритмов, к трудностям в их изменении, в совместном использовании нескольких алгоритмов и т.п.

Этого можно избежать, если использовать объектно-ориентированный подход не только на уровне элементов, но и на более низком уровне – на уровне их параметров. Параметр, рассматриваемый как объект, объединяет несколько значений, которые соответствуют нескольким моментам времени (или нескольким итерациям). У этого объекта имеются методы, вычисляющие разностные аппроксимации производных параметра различных порядков, методы, эффективным (по быстродействию) способом смещающие историю изменения параметра на один шаг по времени (на одну итерацию), и т.д. Объектно-ориентированная трактовка параметра имеет большое значение при создании компактных и развиваемых библиотек численных методов, однако с точки зрения предмета данной главы она важна и для описания расчётных схем.

Система уравнений, к какому бы типу она ни относилась, может быть аппроксимирована несколькими схемами (семействами схем), и с каждой схемой, в свою очередь, может быть ассоциировано несколько вычислительных алгоритмов. Как следствие, у соответствующего системе объекта (элемента) может быть несколько методов, которые по-разному решают одну и ту же задачу. Однако такой подход неудобен тем, что разные схемы могут иметь различный набор вспомогательных параметров, которые к тому же не должны иметь ничего общего с параметрами исходной системы уравнений. В связи с этим предлагается выделить вспомогательные параметры из элемента в отдельный объект – схему. Одновременно решается проблема слишком большого количества методов у элемента: различные варианты реализации каждой схемы программируются в соответствующих им объектах, а элементу остаётся лишь вызывать методы схемы, передавая им свои параметры. Таким образом, элемент, содержащий данные об исходной задаче, не хранит и не использует информацию о решающем эту задачу численном методе.

Разделение элемента и схемы имеет и другое преимущество: данные схемы могут быть полностью формализованы (т. е. приведены к форме, удобной для расчётов и математического анализа), в то время как параметры элемента могут сильнее отражать структуру предметной области (например, потребности имитационного моделирования запрещают делать их безразмерными). Численные методы, реализуемые схемой, совершенствуются гораздо реже, чем изменяются элементы, которые могут различаться для каждой предметной области, поэтому их разделение на разные объекты весьма целесообразно.

Выше обсуждалась внутренняя структура системы уравнений – элемента вычислительной модели – и его взаимодействие с такими объектами как зависимости, параметры, схемы. Однако немалое значение имеет также взаимодействие нескольких систем уравнений между собой. Конечно, было бы хорошо, если вся совокупность параметров модели могла бы быть формализована в виде одной системы уравнений какого-либо типа. Однако сложные модели обычно приводят ко многим системам уравнений разных типов; кроме того, даже если тип систем одинаков, не всегда целесообразно объединение их в одном расчётном элементе. К примеру, слабо связанные системы обыкновенных дифференциальных уравнений, матрицы Якоби которых имеют сильно отличающиеся спектры, гораздо эффективнее решаются по отдельности, поскольку для них целесообразно выбирать различный шаг по времени и даже различные схемы.

Проблема оптимизации решения больших систем уравнений путем их расщепления на несколько лучше обусловленных систем меньшей размерности пока не рассматривалась в вычислительной математике. Это связано с тем, что реализовать совместное решение этих систем с помощью процедурного подхода крайне затруднительно. Дело в том, что системы связаны между собой через общие данные, в то время как процедурным образом представленные алгоритмы их решения должны работать независимо. Использование объектного подхода позволяет избежать сложных приёмов разделения одних и тех же данных между процедурами решения разных систем: ничто не мешает одному и тому же параметру входить в несколько различных элементов – систем уравнений (а также в элементы других типов). Самый удобный среди процедурных приём разделения данных существует в языке FORTRAN (оператор EQUIVALENCE), однако он бессилен, если разные системы уравнений решает одна и та же процедура (проблема в том, что процедура, в отличие от класса, не может иметь нескольких экземпляров).

Помимо проблемы разделения данных между системами, объектный подход решает задачу выбора последовательности их переходов к следующему моменту времени. Поскольку шаг по времени может различаться для разных систем (более, того, он может меняться со временем), системы (и любые другие элементы) необходимо упорядочивать по времени в виде очереди, что возможно только за счёт их объектного представления. Головной элемент очереди осуществляет переход к следующему моменту времени, после чего он переносится в то место очереди, которое отстоит от её головы на величину текущего шага по времени для этого элемента.