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

Информационные технологии в создании обучающих программ. Принципы построения тестирующих программ. Программы по высшей математике: ODE; Формула; "Математика". Методы решения дифференциальных уравнений в символьном виде. Модульность программного средства.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 08.06.2011
Размер файла 488,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Прохождение данных этапов позволило разработать лексико-грамматический анализатор, обрабатывающий такие характерные ошибки ввода, как использование недопустимых лексем и неправильный синтаксис математического выражения или равенства; этапы разработки LL(1)-анализатора, используемого в программном средстве приведены в приложении В «Построение LL(1)-анализатора».

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

Рисунок 3 - Пример бинарного дерева

Сохранение такой структуры в памяти компьютера осуществляется за счет создания пользовательского типа TTree с использованием перечисленных ниже полей.

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

double data - данное поле предназначено для хранения констант, встречающихся в выражении, что значительно упрощает вычисление значения функции и анализ ДУ.

AnsiString symbol - данное строковое поле предназначено для сохранения информации о функции, операции или переменной, используемой в математическом выражении.

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

Таблица 1 - Приоритеты операций

Знак, операция, функция

Степень приоритета*

= (знак равества)

1

+ (сложение)

2

- (вычитание)

2

* (умножение)

4

/ (деление)

3

^ (возведение в степень)

5

cos (косинус)

6

sin (синус)

6

ln (натуральный логарифм)

6

tg (такнгенс)

6

atan

6

acos

6

asin

6

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

AnsiString handle - строковое поле для хранения лексемы;

short int priority - текущий приоритет лексемы для разбора;

bool useLec - признак того что данная лексема занесена в дерево;

TTree *rootLT- в случаях, когда лексема уже занесена в дерево, необходимо сохранить указатель на данную вершину, чтобы в дальнейшем производить связывание более приоритетных операций с менее приоритетным; в противном случае лексема не была занесена в дерево, данное поле принимает значение NULL.

Множество лексем хранится в массиве. Данный массив представляет собой 255 элементов (лексем). Процедура построения бинарного дерева работает таким образом, что в выражении не может присутствовать более 255 лексем.

В целом алгоритм работы программного модуля лексико-грамматического анализатора выражения или равенства представлен в виде блок схемы изображенной на рисунке 4.

Размещено на http://www.allbest.ru/

Рисунок 4 - Блок-схема алгоритма работы модуля лексико-грамматического анализатора

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

3.3.2 Модуль определения типа ДУ, канонической формы и метода решения

Как говорилось выше (пункт 2.1), для решения задачи, связанной с распознаванием типа ДУ, будем использовать метод рекурсивного синтаксического анализа частей бинарного дерева. Для проведения анализа необходимо определить основные признаки, используемые для анализа.

В ходе изучения темы «Обыкновенные ДУ» студенты знакомятся с типами дифференциальных уравнений, приведенными в Приложении A. В этой приложении, выделяются 6 основных типов (4 первого порядка и 2 второго), 5 различных подтипов (с разделяющимися переменными, не содержащие явно переменную «x», не содержащие явно переменную «y», ЛОДУ, ЛНДУ), 2 характеристики линейных ДУ второго порядка (с постоянными и непостоянными коэффициентами) и два специальных вида правой части ЛНДУ с постоянными коэффициентами.

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

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

а) нулевой уровень соответствует основным теоретическим аспектам;

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

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

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

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

В целом для определения типа ДУ первого порядка используются как методы синтаксического анализа, так и численный метод определения принадлежности правой части канонической формы ДУ к однородной функции нулевой степени однородности. Необходимость использования численного метода несколько снижает надежность распознавания однородных ДУ. Однако заменить его методом синтаксического анализа дерева не удалось, так как при определении однородного ДУ необходимо произвести такое преобразование, которое выделит признак однородности: функция правой части канонической формы является зависимостью от отношения . Используемое решение строится на том признаке, что исходная функция может быть записана в виде отношения только в том случае, если при замене «x» на «», а «y» на «», где «t» - произвольная постоянная, не равная нулю значение функции не меняется, т.е. при любых . Однако при таком решении возникает проблема сравнения, которая заключается в том, что сравнение результатов вычисления двух функций от двух переменных на одинаковых наборах данных может привести к различным значениям, так как компьютер не умеет производить сокращение дробей в привычном для человека виде. Таким образом, основным недостатком этого метода является то, что при сравнении вычисленных значений двух функций используется не точное сравнение двух чисел, а приближенное, характеризуемое малым отклонением полученных значений. В качестве критерия достаточно хорошо показал себя критерий сравнения чисел с точностью до 4-го знака дробной части.

Признаки, используемые при определении типов дифференциальных уравнений второго порядка, приведены в приложении Е. Для функций определения типов второго порядка характерны только методы рекурсивного синтаксического анализа дерева.

Рассмотрим идею алгоритма, заложенного в методы рекурсивного синтаксического анализа бинарного дерева для определения типа ДУ.

Общая идея алгоритма состоит в том, что перед распознаванием выражения используется одна их двух процедур:

- представление исходного выражения на в виде произведения нескольких скобок;

- раскрытие скобок для получения развернутой формы выражения.

Так, например, для анализа на принадлежность к типу «ДУ с разделяющимися переменными» необходимо представить правую часть в виде произведения двух функций: функции с зависимостью только от переменной «x» и функции зависящей только от переменной «y». Такое представление возможно только за счет преобразования исходного выражения правой части, а, следовательно, и построенного по нему бинарного дерева, к виду произведения. Полного автоматического решения этой задачи добиться не удалось; по этой причине предполагается, что пользователь будет либо самостоятельно преобразовывать выражение к произведению, либо при попытке определения типов, в качестве решения будет предложено отнесение ДУ к «прочим типам», распознавание которых не предусмотрено программным средством. Однако на практике при выполнении задач в рамках обучения пользователю редко предлагаются задачи, тип которых не вписывается в изучаемый список типов. Поэтому при получении ответа о принадлежности ДУ к «прочим типам» пользователь должен задуматься о том, что для корректного определения типа можно осуществить ручное преобразование его правой части к произведению, которое приведет к выявлению «ДУ с разделяющимися переменными».

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Размещено на http://www.allbest.ru/

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

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

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

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

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

Порядок ДУ

Тип ДУ

Каноническая форма

I

С разделяющимися переменными

Линейное

Бернулли

где

Однородное

, -однородная функция нулевой степени однородности

II

Простейшее

Не содержит явно «y»

Не содержит явно «x»

Линейное однородное с постоянными коэффициентами

Линейное однородное с переменными коэффициентами

Линейное неоднородное с постоянными коэффициентами

Линейное неоднородное с переменными коэффициентами

Таблица 3 - Соответствие типов ДУ методам решения

Порядок ДУ

Тип ДУ

Метод решения

I

С разделяющимися переменными

Разделить переменные

Линейное

Выполнить замену

Бернулли

Однородное

Выполнить замену

II

Простейшее

Двукратное интегрирование

Не содержит явно «y»

Выполнить замену

Не содержит явно «x»

Выполнить замену

Линейное однородное с постоянными коэффициентами

Решить характеристическое уравнение

Линейное однородное с переменными коэффициентами

, -ФСЧР

Линейное неоднородное с постоянными коэффициентами

Линейное неоднородное с переменными коэффициентами

3.3.3 Модуль определения параметров канонической формы

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

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

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

- если дерево параметра канонической формы пусто, то производится копирование найденной части;

- если дерево параметра канонической формы не пусто, производится объединение старой и новой частей характерным знаком.

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

- анализ текущей вершины и поддеревьев левого и правого на соответствие признаку;

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

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

- объединяем новое найденное дерево с деревом, найденным на предыдущих шагах рекурсии, операцией, найденной на предыдущем шаге;

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

- рекурсивный спуск в левое поддерево, начиная от текущей вершины;

- рекурсивный спуск в правое поддерево, начиная от текущей вершины;

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

На рисунке 7 приведена блок-схема работы данного алгоритма для нахождения параметра канонической формы в виде функции зависящей только от переменой «y», ДУ с разделяющимися переменными.

Размещено на http://www.allbest.ru/

Рисунок 7 - Блок-схема выделение части g(y) ДУ с разделяющимися переменными

Таким образом, в начале процедуры проверяется, не является ли текущая вершина пустой. Если вершина Root исходного дерева не пуста, то производим проверку (вызовом функции onlyYF) наличия в дереве только зависимости только от одной переменной «y». В случае, когда такая зависимость присутствует, производится копирование части с зависимостью только от «y» и возврат на более высокий уровень рекурсии. На практике данное условие позволяет выявить параметр g(y) в том случае, если правая часть ДУ является только зависимостью от «y». В противном случае производится проверка вершины на соответствие операциям умножения или деления. Если данная операция отсутствует, то анализ прекращается, иначе производится анализ вызовом функций onlyYF(Rootleft) и onlyYF(Rootright) левого и правого соответственно поддерева на наличие зависимости только от переменной «у». Если одна из функций onlyYF(Rootleft) или onlyYF(Rootright) находит такую зависимость, то производится копирование левого или правого поддерева соответственно, начиная от текущей вершины вызовом функции copyTree. При этом после выполнения копирования устанавливаются признаки, указывающие на остановку дальнейшего рекурсивного спуска в данные поддеревья.

При проверке факта, является ли созданное на предыдущих этапах рекурсии дерево параметра канонической формы пустым, происходит разделение процесса анализа по двум ветвям:

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

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

Процессы, обозначенные RootGY =addRoot+”/”+ RootGY и RootGY = addRoot + ”*” + RootGY, характеризуют второй случай и позволяют создать новое дерево с вершиной «*» или «/», присоединяя к ней левое поддерево addRoot (новое найденное) и правое поддерево RootGY (выявленное ранее).

Следующим этапом является выявление части, которая еще не была подвергнута анализу, что характеризуется логическими переменными lpart и rpart. В случае, когда данные переменные принимают значение «истина», анализ будет прерван, а функция вернет значение текущего найденного корня параметра канонической формы. В противном случае будет рекурсивно вызвана рассматриваемая процедура OnlyYDiff. Рекурсия состоит в использовании в качестве первого параметра указателя на левое или правое поддерево.

3.3.4 Модуль для решения ДУ I порядка в символьном виде

Для решения ДУ в символьном виде требуется выполнить автоматическое определение типа введенного ДУ. Если тип решения определен и соответствует типу ДУ, выбранного пользователем, то на основании данного выбора можно производить решение заданного ДУ способом, характерным для типа. В противном случае решение ДУ не может быть произведено из-за несовпадения типа ДУ, назначенного пользователем, с типом ДУ, указанным программой. Описанное согласование необходимо, так как программа может указывать несколько типов, к которым относится введенное ДУ.

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

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

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

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

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

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

Стандарт позволяет использовать и смешанные формы записи выражения, что позволяет достаточно гибко изобразить такие элементы как степень, деление и скобки, разделяя выражение на подвыражения, что значительно повышает скорость и эффективность разработки шаблонов заполнения.

Таким образом, для формирования корректного выбора выражения (частей канонической формы) бил применен смешанный формат представления тегов MathML.

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

- определение текущего параметра шаблона;

- построение дерева по вставляемому параметру канонической формы;

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

- вставка полученной строки вместо указанного параметра.

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

Рассмотрим основные теги, использованные для генерации вставок MathML:

а) <m:math>выражение</m:math> - данная пара тегов указывает браузеру, что далее следует объект MathML;

б) <m:mrow>выражение</m:mrow> - данная пара тегов указывает компилятору MathML, что между ними заключено некоторое математическое выражение;

в) m:mi>переменная</m:mi> - данная пара тегов предназначена для вывода переменных; сформированная переменная выводится наклонным шрифтом, что позволяет произвести её выделение среди констант и операций;

г) <m:mo>операция</m:mo> - данный тег используется для вывода знаков, не требующих специального оформления: сложения, вычитания, умножения, интегралов, тригонометрических функций и логарифма;

д) <m:mn>константа</m:mn> - данный тег предназначен для обозначения символьных и числовых констант; константа выводится прямым шрифтом, без наклона;

е) <m:mfrac>выражение1 выражение2</m:mfrac> - указывает компилятору и специализированным шаблонам оформления, что далее идет два выражения для формирования дроби следующего вида ;

ж) <m:mfenced>выражение</m:mfenced> - данная пара указывает компилятору и специализированным шаблонам оформления о необходимости взятия выражения в круглые скобки;

з) <m:msub>выражение1 выражение2</m:msub> - данная пара тегов позволяет вывести выражение1 в степени выражениие2 в следующем общем виде ;<m:msup></m:msup> - данная пара тегов позволяет формировать нижние индексы.

Блок-схема алгоритма заполнения шаблона представлена на рисунке 8.

Размещено на http://www.allbest.ru/

Рисунок 8 - Блок-схема алгоритма заполнения шаблона решения ДУ

3.3.5 Модуль генерации тестовых заданий

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

- контрольное тестирование может осуществляться с использованием неограниченного числа заданий;

- позволяет обеспечить гибкость тестирования, невозможность списывания за счет невозможности точного повторения заданий;

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

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

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

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

- подмодуль генерации ДУ;

- подмодуль генерации неверных параметров канонических форм.

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

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

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

Таблица 4 - Исходные правила генерации тестовых зданий

№ правила

Форма правила

1

<ДУ> <первого порядка> | <второго порядка>

2

<первого порядка> y' = <выражение>

3

<второго порядка> y'' = <выражение>

4

<выражение> <выражение> <бинарная операция> <выражение>

5

<выражение> (<выражение>)

6

<выражение> <унарная операция> (<выражение>)

7

<выражение> <константа>

8

<выражение><переменные первого порядка>

9

<выражение> <переменные второго порядка>

10

<переменные первого порядка> x | y

11

<переменные второго порядка> x | y | y'

12

<бинарная операция> + | - | * | / | ^

13

<унарная операция> sin | cos | tg | asin| acos | atan | ln

14

<константа> CONST

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

Это преобразование исходной автоматной грамматики позволяет прийти к системе правил приведенной в таблице5, удовлетворяющей описанным ограничениям.

Таблица 5 - Результирующие правила генерации тестовых заданий

Форма правила

Назначение

1

<ДУ> <I порядка> | <II порядка>

начальный нетерминал

2

<I порядка> y' = <EXP1>

ДУ первого порядка

3

<II порядка> y'' = <EXP2>

ДУ второго порядка

4

<EXP1> (<EXPX>)<OP2>(<EXPY>)

ДУ I порядка с раздел. переменными

5

<EXP1> (< EXPX >)*y<OP1><EXPX>

ДУ I порядка линейное

6

<EXP1> (<EXPX>)*y<OP1>(<EXPX>)*y^<CONST>

ДУ I порядка Бернулли

7

<EXP1> (<CONST>*x< OP1>< CONST >*y)/

/(< CONST> *x <OP1> <CONST >*y)

однородное ДУ I порядка

8

<EXP2> < EXPX>

ДУ II порядка простейшее

9

<EXP2> <CONST>*x<OP1><CONST><OP1><CONST>* *y'<OP1> <CONST >

ДУ II порядка не сод. явно «y»

10

<EXP2> < CONST >*y'< OP1>C<OP1>< CONST >* *y<OP1>< CONST >

ДУ II порядка не сод. явно «x»

11

<EXP2> < CONST >*y'<OP1><CONST>*y

ЛОДУ II порядка с постоянными коэффициентами

12

<EXP2> < CONST>*y'<OP1>< CONST >*y<OP1>< CONST >*x<OP1>< CONST >

ЛНДУ II порядка с постоянными коэффициентами

13

<EXP2> (<CONST>*x<OP1><CONST>)*y'<OP1>(< CONST>*x<OP1>< CONST>) *y

ЛОДУ II порядка с переменными коэффициентами

14

<EXP2> (<CONST>*x<OP1><CONST>)*y'<OP1>( <CONST> * x <OP1> <CONST>)*y<OP1><CONST>* *x<OP1><CONST>

ЛНДУ II порядка с переменными коэффициентами

15

<EXPX> <CONST>*x<OP1><CONST>

выражение от «x»

16

<EXPX> x<OP><CONST>

17

<EXPX> <UO>(<EXPX>)

18

<EXPY> <CONST>*y<OP1><CONST>

выражение от «y»

19

<EXPY> y<OP><CONST>

20

<EXPY> <UO>(<EXPY>)

21

<UO> sin | cos | tg | asin| acos | atan | ln

тригонометрическая/логарифмическая функция

22

<OP> <OP1>| <OP2> | <OP3>

бинарная операция

23

<OP1> + | -

«+» или «-»

24

<OP2> * | /

«*» или «/»

25

<OP3> ^

возведение в степень

26

<CONST> CONST

генерация константы

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

Таблица 6 - Расшифровка обозначений нетерминалов

Нетерминале

Расшифровка

ДУ

дифференциальное уравнение

EXP1

правая часть ДУ первого порядка;

EXP2

правая часть ДУ второго порядка;

EXPX

функция от переменной «х»;

EXPY

функция от переменной «y»;

UO

унарная операция;

OP

бинарная операция (любая);

OP1

бинарная операция «+» или «-»;

OP2

бинарная операция «*» или «/»;

OP3

бинарная операция «^».

CONST

константа

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

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

Алгоритм работы модуля для выбора правил осуществляется следующими этапами:

- генерация порядка ДУ; так как порядков всего два, то вероятность генерации ДУ первого порядка составляет 50 процентов, оставшиеся 50 процентов сгенерированных выражений относятся к дифференциальным уравнениям второго порядка;

- в соответствии с порядком ДУ выбирается тип канонической формы для генерации; вероятность генерации каждого из типов ДУ второго порядка составляет 1/8 из общего числа генерируемых дифференциальных уравнений, а вероятность генерации ДУ каждого из типов второго порядка 1/14 из общего числа генерируемых дифференциальных уравнений;

- выполнение процедуры заполнения правил EXPX и EXPY если таковые имеются;

- последовательно заполняются правила OP, OP1, OP2, OP3, UO, для генерации используемых операций, при выборе правил с несколькими операциями используется генерация числового значения указывающего на подставляемую операцию; например, при замене нетерминала OP1 возможен вариант выбора либо операции «сложение», обозначаемой генерируемым числом 1, или операции «вычитание» - 2;

- генерируются константы для замены нетерминалов CONST.

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

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

а) выбор того или иного параметра канонической формы;

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

в) преобразование самого левого знака на противоположенный;

г) сокращение выражения отбрасыванием одной из его частей.

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

3.3.6 Модуль проверки тестовых заданий

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

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

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

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

Для решения задачи, связанной с выбором параметров канонической формы, необходимо воспользоваться модулем определения параметров канонической формы и информацией о типе ДУ. Также при генерации тестового задания данного вида используется процедура генерации неверных ответов. Сложность прямого введения параметров канонической формы заключается в том, что ответ пользователя может быть неоднозначным, и добиться решения данной задачи прямыми способами сравнения строк невозможно, так как пользователь может ввести выражение, например, переставив слагаемые. Эта особенность значительно усложняет создание программного решения. Поэтому использовался метод, при котором варианты ответов предоставляются пользователю заранее. Такой метод в совокупности с использованием ниспадающих списков, хранящих обозначения параметров канонической формы, позволяет добиться снижения вероятности угадывания верного ответа. Так как в общем случае количество вариантов обозначений равно 10, количество ответов, доступных для выбора равно 4, а количество верных ответов равно 1, то вероятность угадывания верного ответа в данном случае составит порядка 2,5 процентов. Для сравнения выбранной формы используется массив соответствия используемой для вывода параметра метке и индекса выбранного в ниспадающем списке обозначения данного параметра. При верном указании количество баллов пользователя увеличивается на единицу, верный ответ фиксируется в протоколе, и пользователю предоставляется возможность выбора метода решения ДУ.

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

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

4. Экономическое обоснование

Программный продукт предназначен для внедрения в учебный процесс МГТУ для студентов первого, второго курса технических специальностей различных форм обучения. Приложение рекомендуется при изучении студентами темы «Обыкновенные ДУ» в рамках дисциплины «Высшая математика» или «Математический анализ».

Разработка приложения была инициирована заказчиком в лице кафедры высшей математики и программного обеспечения ЭВМ МГТУ. Руководитель (аналитик) стоит во главе проекта. Он осуществляет постановку задачи и распределяет время. Программист выполняет поставленные задачи, используя наиболее эффективные алгоритмы и вычислительные модели, вносит дополнения и корректировки в поставленные задачи.

Календарный план разработки программного продукта.

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

Жизненный цикл программы - это весь цикл от принятия решения о проведении разработок до полного отказа конечного пользователя от применения данного программного продукта; этот цикл включает в себя:

- этап работы над программным продуктом (составил 6 месяцев);

- этап введения программного продукта;

- этап зрелости: полный переход к автоматизированной системе;

- этап упадка: появление новых технологий и моральное устаревание программного продукта.

Размещено на http://www.allbest.ru/

Рисунок 9 - Календарный план разработки

информационный технология программа математика

На рисунке 9 представлен календарный план разработки дипломного ПП в днях, где:

- предпроектное исследование (1),

- техническое задание (2)

- разработка и отладка программного продукта (3),

- тестирование (4),

- техническая отчетность (5),

- сдача темы (6).

Оценка стоимости программного продукта.

Основными источниками затрат при разработке данного программного комплекса являются капитальные предпроизводственные затраты (таблица 7), которые в некоторых рамках могут быть учтены и минимизированы. Расчет осуществляется по статьям расходов. Данные по окладам работающего персонала и процентные составляющие (таблица 8), используемые в этой части, были взяты исходя из рыночной конъюнктуры.

Таблица 7 - Затраты на расходные материалы

Наименование материала

расход, шт.

цена, руб./шт.

сумма, руб.

1

Аппаратное обеспечение

1

20 500

20 500

2

операционная система Windows XP SP2

1

4239,31

4239,31

3

среда разработки Builder C++ v.6.0.

1

10653,8

10653,8

4

Office 2003 Box For teacher and Student

1

3010

3010

5

Internet, ADSL

3

320

960

6

Прочее (бумага, диски, картриджи)

--

--

790

Итого

40153,11

Таблица 8 - Основная заработная плата разработчиков программного обеспечения

наименование этапа

исполнитель

Трудо-емкость, чел.дней

Трудомкость, чел.мес.

оклад, руб.

затраты

1

подготовительный

программист

14

0,67

4275

6633,98

2

техническое задание

руководитель

8

0,39

5200

4611,08

3

основной

программист

48

2,31

4275

22745,06

4

тестирование

программист

14

0,67

4275

6633,98

5

технический отчет

программист

22

1,06

4275

10424,82

6

сдача темы

руководитель

8

0,39

5200

4611,08

программист

8

0,39

4275

3790,84

Итого

59450,84

Дополнительная заработная плата разработчиков программного продукта составляет 20 % от основной заработной платы:

0,2 59450,84 = 11890,17 руб.

Фонд заработной платы представляет собой сумму основной и дополнительной заработной платы:

59450,84+ 11890,17 = 71341,01 руб.

Отчисления на единый социальный налог составляет 26 % от фонда оплаты труда. Тут же учтем еще и страхование жизни 1%:

0,27 71341,01 = 19262,07325 руб.

Организации, занимающиеся разработкой и внедрением программного обеспечения, имеют коэффициент накладных расходов, как правило, равным 1,2. Поэтому накладные расходы составляют 150 % от величины основной заработной платы:

1,5 59450,84 = 89176,27 руб.

Прочие расходы включают расходы на машинное время (порядка 4-ёх месяцев на разработку, отладку и тестирование программного продукта: 480 часов стоимостью 10 руб./час):

480 10 = 4800 руб.

Таблица 9 - Итоговые затраты

наименование статей расхода

затраты, руб.

1

расходные материалы

40153,11

2

основная заработная плата разработчиков

59450,84

3

дополнительная заработная плата разработчиков

11890,17

4

отчисления на единый соц. Налог, 26%

19262,07

5

накладные расходы

89176,27

6

прочие расходы

4800

Итого

224732,46

Рассчитаем предполагаемую прибыль.

Заработная плата преподавателя составляет 6 000 рублей в месяц. Соответственно, за два месяца преподавания темы три преподавателя заработают:

6 000 23 2,3 = 82 800 рублей.

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

E = (1)

Таким образом, разработанный программный продукт позволит:

- Студенту сэкономить время на изучение темы «Дифференциальные уравнения»

- Сэкономить время преподавателя на подготовку, проверку и исправление ошибок тестовых заданий, сократить время консультирования студентов.

5. Охрана труда

Анализ опасных и вредных производственных факторов.

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

Безопасность труда при эксплуатации видеодисплейных терминалов и персональных электронно-вычислительных машин.

Эксплуатация видеодисплейных терминалов (ВДТ) и персональных электронно-вычислительных машин (ПЭВМ) определяются СанПиН 2.2.2.542-96 "Гигиенические требования к видеодисплейным терминалам, персональным электронно-вычислительным машинам и организации работы». Основными требованиями являются: площадь на одно рабочее место с ВДТ и ПЭВМ должна составлять не менее 6 м2, а объем - не менее 20 м3. Оптимальные параметры микроклимата для помещений составляют: температура 21-25°С, относительная влажность воздуха 40-60%, скорость движения воздуха 0,1-0,2 м/с. Уровень шума в компьютерных классах учебных учреждений не должны превышать 50 дБА. Освещенность на поверхности стола в зоне размещения рабочего документа должна быть 300-500 лк. При использовании местного освещения оно не должно создавать бликов на поверхности экрана и увеличивать освещенность экрана более 300 лк. Естественное освещение должно обеспечить коэффициент естественной освещенности (КЕО) не ниже 1,2 %. Экран видеомонитора должен находиться от глаз пользователя на расстоянии 600-700 мм, но не ближе 500 мм. Уровень глаз при вертикально расположенном экране ВДТ должен приходиться на центр или 2/3 высоты экрана. Линия взора должна быть перпендикулярна к центру экрана.

Эргономические требования к рабочему месту пользователя программного продукта. Рабочий стол: его высота должна составлять 720 мм, оптимальные размеры рабочей поверхности столешницы - 1600х900 мм. Под столешницей рабочего стола должно быть свободное пространство для ног. Размеры: по высоте - не менее 600 мм, по ширине - 500 мм.

Рабочий стул: высота должна составлять 400-500 мм, ширина - не менее 400 мм, глубина - не менее 380 мм. Поверхность сидения и спинки должна быть полумягкой, с нескользящим, неэлектризующим и воздухонепроницаемым покрытием.

На рабочем месте необходимо предусматривать подставку для ног. Ее размеры: длина - 400 мм, ширина - 350 мм, высота - 150 мм. Угол наклона подставки - в пределах 0-20 градусов. Она должна иметь рифленое покрытие и бортик высотой 10 мм по нижнему краю.

Режимы труда и отдыха. Для программного продукта «Обучающая программа «Дифференциальные уравнения»» применимы требования группы «В» (творческая работа в режиме диалога с ЭВМ). В зависимости от длительности работы подразделяются на три категории: первая группа ( длительность работы до 2-х часов) при 8-ой рабочей смене суммарное время регламентированных перерывов не менее 30 минут и не менее 70 минут при 12-часовой; вторая группа (продолжительность работы до 4-х часов) при 8-ой рабочей смене время регламентированных перерывов не менее 50 минут и не менее 90 минут при 12-часовой; третья группа - длительность работы до 6-х часов, при 8-ой рабочей смене суммарное время регламентированных перерывов не менее 70 минут и не менее 120 минут при 12-часовой смене.


Подобные документы

  • Разработка программы на языке Turbo Pascal 7.0 для преобразования кинетической схемы протекания химических реакций при изотермических условиях в систему дифференциальных уравнений. Ее решение в численном виде методом Рунге-Кутта четвертого порядка.

    курсовая работа [929,7 K], добавлен 06.01.2013

  • Появление дифференциальных уравнений при описании систем управления. Элементы теории дифференциальных уравнений. Определитель Вронского. Формула Лиувилля. Дифференциальные уравнения при описании непрерывных систем. Понятие пространства состояний.

    реферат [1,0 M], добавлен 29.09.2008

  • Система программирования Delphi, ее характеристика. Основные требования к обучающей программе. Составление блок-схемы алгоритма программы "Математика. 1 класс". Виды задач для решения в обучающей программе. Описание работы системы, инструкция к ней.

    курсовая работа [2,0 M], добавлен 17.06.2015

  • Использование и создание компьютерных средств обучения. Содержание и реализация электронной обучающей программы. Методы защиты программ от несанкционированного доступа. Разработка эскизного, технического и рабочего проектов программы, ее интерфейса.

    курсовая работа [462,8 K], добавлен 05.04.2014

  • Решение дифференциальных уравнений первого порядка. Варианты методов Рунге-Кутта различных порядков. Основные методы численного решения задачи Коши. Повышение точности вычислений и итерационный метод уточнения. Дискретная числовая последовательность.

    лабораторная работа [33,3 K], добавлен 14.05.2012

  • Использование обучающих программ для формирования знаний и умений по информатике. Главное окно среды программирования Delphi, окна дерева объектов и кода программы. Требования к оборудованию и описание обучающей программы "Информатика в играх и загадках".

    курсовая работа [1,3 M], добавлен 03.05.2012

  • Исследование арифметических выражений и разработка простых программ. Таблица переменных для алгоритма и программы. Алгоритм решения, текст программы на языке С. Разработка программы вычисления значений выражений, сравнение результатов с ручным подсчетом.

    лабораторная работа [282,7 K], добавлен 30.01.2015

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

    контрольная работа [2,5 M], добавлен 08.01.2010

  • Реализация решения нелинейного уравнения с заданными параметрами в виде процедуры-подпрограммы. Графический метод отделения корней уравнения. Основные методы уточнения корней уравнения. Описание процедур и функций, общий алгоритм и текст программы.

    курсовая работа [1,7 M], добавлен 27.03.2011

  • Общие сведения о миномётах, их конструкция, боевые качества и классификация. Структурное построение обучающих программ, их алгоритмы. Жизненные циклы программного продукта. Реализация функционирования программы и разработка пользовательского интерфейса.

    курсовая работа [1,2 M], добавлен 06.11.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.