Объектно-ориентированные численные методы

Постановка задачи и обзор существующих работ

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

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

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

Безусловно, за рубежом существует большое количество работ по анализу применимости объектно-ориентированных языков программирования к решению вычислительных задач [2,4,5]. Основной упор в этих работах делается на преодоление проблемы понижения скорости арифметических операций над большими массивами данных (векторами, матрицами) при использовании таких языков. Другими словами, речь идёт об универсальных рекомендациях вычислителям по эффективному программированию стандартных для процедурных языков конструкций на объектных языках. В частности, в [4] рассматриваются проблемы объектного представления матрицы (вектора), сплошной адресации элементов матриц, разделения данных между матрицей и её подматрицами, уменьшения числа вызовов конструкторов этих объектов. Во многих работах, например, в [2] приводятся результаты сравнения производительности объектных и процедурных языков, и обосновывается выбор наиболее производительных компиляторов. От объектно-ориентированного подхода в таких работах остаётся очень мало; наоборот, целью авторов является приблизить свойства объектно-ориентированных языков к процедурным (процедурные сложно использовать в задачах, связанных, например, с пользовательским интерфейсом). В частности, не делается попыток отказаться от матричного представления данных многих численных методов. Поэтому сами алгоритмы численных методов остаются неизменными, и научных работ по их объектной трактовке не возникает.

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

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

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

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

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

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

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

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

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




double arrow
Сейчас читают про: