|
Математическая программа "Производная"
Математическая программа "Производная"
1 2 Кафедра электронно-вычислительной аппаратуры Математическая программа "Производная" Москва 2009 АннотацияРабота представляет собой программу (реализованную на языке Microsoft Visual Basic 6), основной функцией которой является нахождение формулы производной на основании введенной пользователем исходной формулы, представляющей собой суперпозицию (произвольное сочетание) элементарных функций (предусмотрены программой sin, cos, tg, ctg, arcsin, arccos, arctg, arcctg, ln, exp, +, -, *, /, ^, константы).Для удобства программа обладает дополнительными функциями: нахождение значения формулы при данных аргументах, приближенное нахождение интеграла, работа с переменными (изменение аргументов), вызов справки.Программа использует стандартные библиотеки Microsoft Windows (98, XP, 2000), поэтому для корректной работы программы необходимо использовать эту операционную систему.Техническое заданиеОсновное окно программы в рабочем режиме показано на рис 1.Рис. 1Компоненты изображения:o меню команд в верхней части экрана;o поле для ввода формулы, включающееo список переменных,o поле для ввода строки;o список задач, включающий:o три кнопки «Производная», «Интеграл», «Значение»;o два текстовых поля для ввода границ интегрирования;o текстовое поле для вывода формулы;o список допустимых функций (объект класса ListBox);o таблица переменных, включающая:o таблицу класса MSHFlexGrid библиотеки «MSHFLXGD.OCX»,o три кнопки управления таблицей «Значение», «Новая переменная», «Сброс».Выбор командыДля выбора команды используется одноуровневое горизонтальное меню. Для перемещения по меню используются клавиши навигации и / или мышь. Для выбора пункта используется клавиша Enter и / или левая клавиши мыши. Команды меню Файл -> Выход При выходе программа заканчивает свою работу. Действия -> Производная Программа анализирует введенную формулу и в соответствующем поле выводит формулу производной. (При введении неверной формулы выводится ошибка). Действия -> Интеграл Программа анализирует введенную формулу и в соответствующем поле выводит значение частичных сумм под графиком функции. (При введении неверной формулы выводится ошибка). Действия -> Значение Программа анализирует введенную формулу и в соответствующем поле выводит значение функции при аргументах, указанных пользователем. (При введении неверной формулы выводится ошибка). Справка -> Мне нужна помощь На экране появляется окно, содержащее руководство пользователя. Справка -> Об авторе На экране появляется окно, содержащее информацию о создателе. Поле для ввода формулы Текст из этого поля используется в качестве исходной функции пользователя. Список задач Команды аналогичны командам меню. Поле для вывода функции Это поле служит для выведения конечного результата. Список допустимых функций Служит подсказкой пользователю как правильно написать функцию. Двойной щелчок на элементе добавляет его в поле для ввода формулы. Таблица переменных Служит подсказкой пользователю, какие переменные можно использовать; Двойной щелчок на элементе позволяет изменить значение переменной. Таблица связана с тремя кнопками. Значение переменной Изменить значение выбранной переменной на указанной пользователем. Новая переменная Добавляет в таблицу новую переменную, имя которой указал пользователь. Сброс переменных Очищает таблицу переменных и создает переменные по умолчанию (x=0, y=0, z=0, t=0). ВведениеАлгоритм программы основан на теории математического анализа. В частности, в основу положены два утверждения:- Все элементарные функции дифференцируемы на области определения. (Sin, cos, tg, ctg, arcsin, arccos, arctg, arcctg, ln, exp, +, -, *, /, ^, константы и т.д.)- Суперпозиция дифференцируемых функций дифференцируема: (f (g(x)))'=g' (x) f' (g(x)).Из этих утверждений следует, что любая суперпозиция элементарных функций дифференцируема.В основу вычисления производной решено положить таблицу элементарных функций, т. к. любой суперпозиции элементарных функций соответствует список последовательных элементарных функций. Работа программы (т.е. выполнение необходимых процедур) сводится к составлению и анализу этой таблицы, а также проверки входных данных.Например, при вводе функции y(x)=2^2+2sinx и нажатии кнопки «Производная» программа:- вставляет символ «*» между 2 и sin x;- берет x после sin в скобки;- проверяет формулу на наличие синтаксических ошибок;- составляет таблицу функции, которая выглядит следующим образом:&F1=sin(x);&F2=2^2;&F3=2*&F1;&F0=&F2+&F3.(&F0 аналогична функции main в С, т.е. с нее начинается вычисление)- упрощает таблицу функции:&F1=sin(x);&F3=2*&F1;&F0=4+&F3.- по таблице рекурсивно (сводя к случаям x'=1 и const'=0) вычисляет производную по правилам дифференцирования:y' (x)=(4+2*sin(x))'=(4)'+(2*sin(x))'=0+(2'*sin(x)+2*(sin(x))')= 0+(0*sin(x)+2*(x'*cos(x)))= 0+(0*sin(x)+2*(1*cos(x)))Данная функция является производной, но имеет трудно читаемый вид. Поэтому в алгоритм включен следующий пункт:- Упрощение функции:y' (x)= 0+0*sin(x)+2*(1*cos(x))= 0+0+2*cos(x)= 2*cos(x).1. Функциональная структура программыНа основе технического задания составлена функциональная структура программы, которая отображает иерархию основных функций и отвечает на вопрос «Что должна делать программа?». Порядок выполнения функций, способы их оформления в виде подпрограмм и модулей, способы реализации функциональная структура не отображает.2. Принципы построения программыПри построении программы решены следующие проблемы.2.1 Управление обработкой входных событийВходными событиями могут быть события нажатия клавиш и кнопок ручного манипулятора типа «мышь».В объектах программы реализован цикл ввода и обработки событий.2.2 Вывод объектов на экранПредусмотрена работа программы в среде Windows на графическом адаптере VGA и в режиме монитора 800х600 точек (и выше). В программе явным образом указаны координаты видимых объектов относительно левого верхнего угла окна приложения.На рисунке показаны координаты основных видимых объектов.3. Основные структуры данных и алгоритмы3.1 Основной алгоритмНачалоИнициализировать объектыЦиклОбработать событияКЦиклКонецИнициализировать объектыИнициализировать Командное меню и добавить его элементы.Инициализировать Кнопки «Производная», «Интеграл», «Значение функции», «Значение переменной», «Новая переменная», «Сброс переменных».Инициализировать Список Допустимых Функций и добавить его элементыИнициализировать Таблицу ПеременныхУстановить Таблицу Переменных по умолчаниюИнициализировать Таблицу Элементарных ФункцийИнициализировать Поле Ввода Функции, Поле Вывода РезультатаИнициализировать Список переменныхОбновить Список переменныхКонецАлгоритм Обработать событияЕсли Развернут Список переменныхОбновить Список переменныхКЕслиЕсли Нажата кнопка «Производная»Найти производнуюКЕслиЕсли Нажата кнопка «Интеграл»Найти ИнтегралКЕслиЕсли Нажата кнопка «Значение функции»Найти Значение функцииКЕслиЕсли Нажата кнопка «Значение переменной»Изменить Значение текущей переменнойКЕслиЕсли Нажата кнопка «Новая переменная»Создать новую переменную пользователяКЕслиЕсли Нажата кнопка «Сброс переменных»Сбросить переменныеКЕслиЕсли Команда меню «Производная»Найти производнуюКЕслиЕсли Команда меню «Интеграл»Найти ИнтегралКЕслиЕсли Команда меню «Значение функции»Найти Значение функцииКЕслиЕсли Команда меню «Выход»Завершить программуКЕслиЕсли Команда меню «Справка»Показать справкуКЕслиЕсли Команда меню «Об авторе»Показать Окно Об автореКЕслиКонецАлгоритм Установить Таблицу Переменных по умолчаниюСтереть таблицу переменныхОбъявить новую переменную пользователя («x»)Объявить новую переменную пользователя («y»)Объявить новую переменную пользователя («z»)Объявить новую переменную пользователя («t»)КонецАлгоритм Создать новую переменную пользователяСтрока = Ввести строкуЕсли Хорошее Имя переменной (строка)Объявить новую переменную пользователя (строка)КЕслиКонец3.2 Реализация алгоритма распознавания функцииРеализация алгоритма распознавания функции нахождения производной, интеграла и значения функции описана ниже:Распознавание функции· Создание таблицы связанных элементарных (содержащих одно действие) функций, последовательное вычисление которых приводит к вычислению сложной функции.o Создание размеченной строки: выделение чисел в служебные символы []; переменных в {}; функций в <>. (Контекстно, т.е. в строке «exp» не будет выделена переменная «x»).o Создание на основании размеченной строки карты функции, т.е. выделение из неё только символов () [] {} <> и определение их позиций в размеченной строке.o Анализ карты функции и вставка в размеченную строку соответствующих замен (например, знака умножения между числом и переменной), а также поиск синтаксических ошибок (например, если строка начинается со знака «/»)o Обработанная таким образом строка, в которой не были найдены синтаксические ошибки, подлежит разложению на элементарные функции, которое заключается в следующем:§ поиск самой внутренней скобки§ нахождение первого оператора и его операндов в порядке важности (^,*, /, +,-)§ Если в скобке больше нет операторов, заменить всю скобку, иначе заменить только данный оператор с операндами на новую переменную (вида &F#) и записать это в таблицу.§ Если во всей строке еще есть операторы, повторить иначе создать последнюю переменную &F0o Дополнить таблицу переменными пользователя.Нахождение значения функции в точке (x, y, z, t,…)o Найти переменную (элементарную функцию) в таблице.o Считать оператор и операнды; если операнды - переменные, тоo Если операнд переменная не дифференцируемая, то найти рекурсивно (этой же функцией).o Если операнд переменная дифференцируемая, то вернуть текущее значение дифференцируемой переменной.o Выполнить действие над операндами в зависимости от оператора и вернуть значение.Нахождение частичных сумм площадей под графиком функции (~ интеграла)· Установить текущую переменную интегрирования / дифференцирования (на основании сведений полученных от пользователя).· Просуммировать произведения значений функции на изменения аргумента (на основании сведений полученных от пользователя и пользуясь определением частичных сумм).· Вернуть результатНахождение формулы производнойo Найти переменную (элементарную функцию) в таблице.o Считать оператор и операнды; если операнды - переменные, тоo Если операнд переменная не дифференцируемая, то найти рекурсивно (этой же функцией).o Если операнд переменная дифференцируемая, то вернуть «1».o Найти производную по правилам дифференцирования и вернуть значение.ЗаключениеВ результате проектирования создана полностью работоспособная программа в соответствии с техническим заданием. Программа оформлена в виде структурных записей. Написание программы «Производная» на Visual Basic 6.0 является примером использования объектно-ориентированных средств языка Visual Basic.Программа может иметь практическое применение при математических вычислениях.Список литературы1. Microsoft Visual Basic для профессионалов. Шаг за шагом: Практ. пособ. / Пер. с англ. - М: Издательство ЭКОМ, 1999. - 720 с.
|
|