Разработка обучающей программы по теме "Обыкновенные дифференциальные уравнения"

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



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

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

а)выявление признака возможности раскрытия скобок; в данном случае возможны два варианта:

а.1.после вершины умножения в правом и левом поддереве стоит операция сложения или вычитания;

а.2.после вершины со знаком умножения в левом или правом поддереве стоит операция сложения или вычитания, а в другом поддереве хранится окончательная вершина со значением константы или некоторой переменной;

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

Рассмотрим пример выполнения описанной процедуры для ДУ .

Рисунок 5 - Пример разложения скобок

На рисунке 5.а серым цветом обозначена вершина, в которой выполняются признаки, указывающие на возможность разложения скобок: текущая вершина содержит знак умножения, а в левом поддереве первая встречающаяся вершина является сложением. На рисунке 5.б черным цветом обозначены вершины с изменённым знаком и созданные заново, а в штриховой прямоугольник обведена скопированная часть правого поддерева исходного состояния. Также для вершин, обозначенных черным цветом, показан алгоритм соединения частей поддерева.

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

Каждая отдельно взятая функция распознавания типа реализует общий алгоритм синтаксического анализа бинарного дерева с помощью использования рекурсии. Алгоритм работы одного этапа рекурсии данных процедур состоит в следующем:

-анализ вершины и поддеревьев на выявление признаков, характерных для определяемого типа ДУ;

-если результат выявления признаков выполнился для правого и левого поддерева, то процедура возвращает значение истина на предыдущий уровень рекурсии, либо в функцию, её вызвавшую;

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

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

Общая для всех процедур распознавания типа блок-схема одного этапа рекурсии представлена на рисунке 6.

Рисунок 6 - Общая блок-схема одного этапа рекурсии

Использование данной процедуры синтаксического анализа применяется не только к ДУ первого порядка, но и для определения типов ДУ второго порядка.

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

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

Таблица 2 - Соответствие типов ДУ каноническим формам

Порядок ДУТип ДУКаноническая формаIС разделяющимися переменнымиЛинейноеБернулли гдеОднородное, -однородная функция нулевой степени однородностиIIПростейшееНе содержит явно yНе содержит явно xЛинейное однородное с постоянными коэффициентамиЛинейное однородное с переменными коэффициентамиЛинейное