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

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

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

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

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

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

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

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

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




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