1 Постановка задачи

Вид материалаДокументы

Содержание


3.2Язык описания численных методов
3.2.1Методы решения алгебраических уравнений
3.2.1.1Метод Гаусса
Xml:link cdata #fixed "simple"
Пример xml-кода, описывающего метод Гаусса
3.2.1.2Итерационные методы
Пример xml-кода, описывающего метод простых итераций
3.2.1.3 Стопперы итерационных методов
3.2.2Методы решения обыкновенных дифференциальных уравнений
3.2.2.2Методы типа Рунге-Кутты
Пример xml-кода, описывающего метод Рунге-Кутты
Подобный материал:
1   2   3   4   5   6   7

3.2Язык описания численных методов


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

Опишем DTD этого языка, давая комментарии к нему по ходу описания.


NumericalMethod ANY>


Главный элемент языка NumericalMethod может включать в себя конкретные численные методы. Так как их количество в принципе не ограничено, то содержимое этого элемента обозначено ключевым словом ANY


% NumMethod "

id ID #REQUIRED

description CDATA #IMPLIED

">


В тело главного элемента включена параметрическая сущность %NumMethod. Параметрические сущности обычно используются, когда стандартный набор атрибутов, логически связанных между собой, может часто наследоваться группой элементов.

В нашем случае все конкретные численные методы наследуют уникальный идентификатор метода id и описание метода description у параметрической сущности %NumMethod, .

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



Методы решения алгебраических уравнений бывают простыми и итерационными. Рассмотрим по одному методу из каждого типа

3.2.1.1Метод Гаусса



GaussAEMethod (Datatype, MathBlock, MainElement?)>



%NumMethod;

>


Элемент GaussAEMethod включает в себя элемент Datatype, описывающий тип переменных метода, элемент MathBlock, содержащий блоки математических выражений

и необязательный элемент MainElement, который нужен для определния главного элемента в случае, если метод Гаусса будет реализовываться с выбором главного элемента. Также элемент GaussAEMethod наследует атрибуты параметрической сущности %NumMethod


MathBlock (Name, (Math|MathBlock+))>

Name (#PCDATA)>


Структура, создаваемая элементами MathBlock, позволяет указать логику в математических формулах MathML. Например, в случае метода Гаусса можно отделить прямой ход метода от обратного. Каждый MathBlock имеет имя и может содержать как математические выражения в теге Math, так и другие элементы MathBlock.


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


MathBlock

XML:LINK CDATA #FIXED "SIMPLE"

HREF CDATA #REQUIRED

SHOW (EMBED | REPLACE | NEW) "EMBED"

ACTUATE (AUTO | USER) "AUTO"

>

Эта ссылка реализована с помощью XLINK и выглядит следующим образом:




Документ GaussAEMethod.xml состоит из нескольких элементов MathBlock и математических выражений на MathML (мы их здесь не будем приводить для экономии места):




directway



a-equation







b-equation









reverseway






Прямой ход метода Гаусса определяет переменные a и b, обратный ход определяет переменные x. Таким образом, блочная структура элементов MathBlock даёт нам возможность показать логику вычислений, о чём говорилось ранее





Тег MainElement содержит внутри номер главного элемента


В заключение, приведём код на языке SimulNumML, описывающий метод Гаусса.


Пример xml-кода, описывающего метод Гаусса:








A



matrix







b



vector











l



int










3.2.1.2Итерационные методы



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


IterativeAEMethod (Datatype, MathBlock, InCondition, MethodParam)>



%NumMethod;

stopper IDREF #REQUIRED

type (LinearMethod| UnlinearMethod) #IMPLIED

>










Атрибут stopper в элементе IterativeAEMethod является маркированным и имеет тип IDREF. Атрибуты такого типа указывают на другие элементы в xml-документе и их значения должны совпадать со значениями атрибутов типа ID этих элементов. Атрибут stopper указывает на элемент, определяющий стоппер данного численного метода.


Атрибут type определяет, какой тип итерационного метода будет использоваться: для линейных или нелинейных уравнений. Этот атрибут нужен, поскольку имеет место разная математическая реализация численного метода в случае линейной и нелинейной системы уравнений.


Элемент IterativeAEMethod включает в себя также элемент InCondition, описывающий начальное условие применимости метода простых итераций (|F’(x)|<1).


В элементе MethodParam задаются значения переменных метода, которыми в данном случае являются максимальное число итераций и необходимая точность вычислений, использующиеся в стопперах.


Пример xml-кода, описывающего метод простых итераций:






Method of simple iterations for system of unlinear equations-->



x

vector





F

fn

vector





x0

vector























x





f

x







1

















N

int














N











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

3.2.1.3 Стопперы итерационных методов



MENT IterationsStopper (IterationsCountStopper | ToleranceIterationsStopper | ComplexIterationsStopper)>


Стопперы бывают трёх различных видов: по максимальному числу итераций (IterationsCountStopper), по заданной точности (ToleranceIterationsStopper) и комплексный стоппер, учитывающий в совокупности оба этих фактора (ComplexIterationsStopper).








id ID #REQUIRED

description CDATA #IMPLIED

>

MaxIterationCount (Datatype)>


IterationsCountStopper включает в себя элемент MaxIterationCount, определяющий максимальное число итераций. Пример xml-кода данного стоппера был приведен в предыдущем пункте.




LIST ToleranceIterationsStopper

id ID #REQUIRED

description CDATA #IMPLIED

>




В элементе Tolerance задаётся точность, по достижению которой итерации прекращаются


ComplexIterationsStopper (Math, MaxIterationCount, Tolerance)>



id ID #REQUIRED

description CDATA #IMPLIED

>


Комплексный стоппер определяет как максимальное число итераций, так и точность вычислений. MaxIterationCount и Tolerance объявлены именно элементами, а не атрибутами, поскольку это продиктовано способом передачи значения этих параметров от тега к численному методу.


3.2.2Методы решения обыкновенных дифференциальных уравнений




3.2.2.1Методы, не имеющие параметров





T DefaultODEMethod

%NumMethod;

>


Методы, не имеющие собственных параметров, просто наследуют атрибуты параметрической сущности %NumMethod

3.2.2.2Методы типа Рунге-Кутты



RungeKuttaMethod (MathBlock, ButcherTable)>



%NumMethod;

type (Explicit | Halfplicit | Implicit) "Explicit"

>




Методы типа Рунге-Кутты имеют ряд числовых параметров, записываемых в таблицу Бутчера. Для этих параметров мы ввели специальный элемент ButcherTable


Элемент RungeKuttaMethod наследует атрибуты параметрической сущности %NumMethod и имеет атрибут type, определяющий является ли этот метод явным, неявным или полуявным


Пример xml-кода, описывающего метод Рунге-Кутты:









v



vector







r



vector







f



fn



vector











a



vector







c



vector







B



matrix











Вначале заданы типы данных, применяемых в методе переменных: входной параметр вектор-функция f, промежуточный параметр вектор r и выходной параметр вектор v. Затем с тега MathBlock стоит ссылка на xml-документ, непосредственно описывающий математические формулы метода. В элементе ButcherTable определены типы данных переменных, используемых в таблице Бутчера. Таким образом, элемент ButcherTable является аналогом элемента MethodParam в итерационных методах.