Смекни!
smekni.com

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

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

.

В случае одношаговых схем порядок их аппроксимации можно сделать выше первого только за счёт вычисления правой части при значениях аргументов, рассчитываемых по сложным формулам:

,
. При условии объектного представления аргументов (параметров) это приводит к необходимости присваивать им рассчитанные значения непосредственно перед вычислением правой части, после чего нужно «стирать» эти значения из истории изменения аргументов. К счастью, это можно делать чисто техническими способами (не пересматривая саму объектную модель): так как аргументы правой части являются одновременно параметрами элемента, представляющего систему уравнений, он может их изменять без особых проблем. В целом, использование объектно-ориентированных одношаговых методов решения ОДУ (схем типа Рунге-Кутты) предпочтительнее многошаговых (схем Адамса или Гира): не нужно «разгонять» метод на первых шагах и создавать специальные объекты для хранения динамики изменения правой части уравнения, легче изменять шаг по времени и связывать систему с другими расчётными элементами.

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

Наконец, необходимо описать алгоритм реализации неявных схем решения ОДУ. Независимо от того, относятся ли они к одношаговым или многошаговым схемам, возникает необходимость решения на каждом шаге системы нелинейных алгебраических уравнений. Как было указано в разделе 3.2.5, для этого целесообразно привязать к каждому элементу, решающему ОДУ, элемент алгебраической системы. Если для каждой дифференциальной системы имеется своя алгебраическая, то начальное приближение для её решения никуда не исчезает в промежутке между шагами по времени дифференциальной системы, что повышает скорость сходимости (хотя и увеличивает расходование памяти). Кроме того, множественность алгебраических систем имеет смысл, когда не требуется на каждом шаге пересчитывать матрицу Якоби правой части исходной системы (с этой матрицей однозначно связана итерационная матрица алгебраической системы).

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

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

3.3.2. Уравнения в частных производных

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

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

3.3.2.1. Методы для гиперболических уравнений

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

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

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

Схемы чётного (в частности, второго) порядка аппроксимации гиперболических уравнений обладают большой дисперсионной (и малой диффузионной) ошибкой, в связи с чем их решения сильно осциллируют на разрывах. Поэтому среди немонотонных схем имеет смысл рассматривать только схемы третьего порядка на шаблонах, содержащих на нижнем слое (n+3) узлов. Ближе всего к монотонным находятся схемы, шаблон которых также лежит на минимальном расстоянии от базовой точки. Следовательно, описанный выше для схем первого порядка алгоритм быстрого поиска оптимального шаблона остаётся практически без изменений, а значит, элемент, который реализует наименее осциллирующую схему третьего порядка, можно унаследовать от элемента, реализующего наиболее точную монотонную схему. Как было показано в разделе 3.2.5, алгоритм гибридизации этих двух схем на основе объектного подхода является ещё более простым.