Скачиваний:
7
Добавлен:
01.05.2014
Размер:
476.16 Кб
Скачать

Санкт-Петербургский Государственный Электротехнический

Университет «ЛЭТИ»

Кафедра МОЭВМ

Лабораторная работа по программированию

«Аналитическое дифференцирование»

О Т Ч Е Т

Факультет КТИ

группа 3341

студент Марьяскин Е.

Санкт-Петербург

2005 г.

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

Содержательная постановка задачи.

Вывести производную функции, записанной во входном текстовом файле.

Пример решения задачи.

Если во входном файле строка X^2-a*X, то на выходе должно быть 2*X-a

Входные данные.

Файл, имя которого задается с клавиатуры, содержащий строку с дифференцируемой функцией. Также входными данными является переменная дифференцирования, задаваемая пользователем.

Выходные данные.

Файл Fout.txt, отображающий этапы выполнения дифференцирования и окончательный результат.

Сценарий диалога с пользователем.

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

Описание алгоритма.

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

Х+У Вычисление суммы Х и У

Х-У Вычисление разности Х и У

Х*У Вычисление произведения Х и У

Х/У Вычисление отношения Х к У

^ Вычисление Х в степени У(У – численная константа)

√(Х) Вычисления квадратного корня из Х

Sin(X) Вычисление синуса Х

Cos(X) Вычисление косинуса Х

log(X) Вычисление натурального логарифма Х

exp(X) Вычислениеeв степени Х

asi(X) Вычисление арксинуса Х

atg(X) Вычисление арктангенса Х

Остальные из основных функций легко выражаются через вышеозначенные.

Затем из этого массива формируется дерево по принципу приоритета операций и с учетов вычисления слева-направо. Т.е. в корне окажется самая правая из операций самого низкого приоритета. Каждый элемент дерева содержит три параметра: знак операции этого узла(или сведения о константе), часть функции, представляемую поддеревьями этого элемента и производную этой части функции. После введения пользователем переменной дифференцирования в дереве заполняются значения функций и их производных для листьев дерева: там и только там оказываются операнды. Далее находится первый в обходе элемент, у которого есть сыновья, но нет внуков, и в нем вычисляются функция и производная. Их всегда можно выразить через функции и производные сыновей. Затем сыновья удаляются. Этот процесс продолжается, пока в дереве не останется 1 элемент. Производная «дошедшей» до него части функции и есть искомая строка.

Константы представляются как строки и не подлежат приведению подобных, т.е. программа не представит, например, 5+2 как 7, но во всех вычислениях константы «0», «1» и «-1» обрабатываются отдельно, что позволяет значительно упростить конечный вид формулы.

Соседние файлы в папке Аналитическое дифференцирование