0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 30
|
|
1 | |
Нахождение производной (символьное дифференцирование)14.04.2018, 10:44. Показов 4537. Ответов 11
Метки 2, c++ lessons, visual studio, visual studio 2012, алгебра, дифференциальное уравнение, дифференциальные уравнение, дифференцирование, производная, с, c++ (Все метки)
Нужно написать программу для нахождения производной с двумя переменными.
Например: (2x+1)' = 2; (cosx)' = -sinx; (tgx)' = 1/cos^2x и т. д. (т. е. по таблице производной). Каким способом это можно сделать и с чего начать?
0
|
14.04.2018, 10:44 | |
Ответы с готовыми решениями:
11
Символьное дифференцирование Символьное дифференцирование cos и sin Класс "Символьное дифференцирование" Нахождение производной |
Модератор
13683 / 10890 / 6468
Регистрация: 18.12.2011
Сообщений: 29,066
|
||||||
14.04.2018, 10:49 | 2 | |||||
0
|
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 30
|
|
14.04.2018, 10:55 [ТС] | 3 |
Это ведь не вся таблица, да и комбинации выражений из двух переменных могут быть разными.
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
14.04.2018, 11:00 | 4 |
Скажем, нужно начать с лексического анализа введенного выражения и построения синтаксического дерева. А пробежавшись по дереву, уже можно вычислить производную.
0
|
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 30
|
|
14.04.2018, 11:05 [ТС] | 5 |
Окей, но как именно? Есть ли какой-нибудь пример или нечто похожее, работающее по такому принципу?
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
14.04.2018, 11:31 | 6 |
FeelsRainMan, попробуй вбить в поиск "парсер математических выражений" или "метод рекурсивного спуска".
Сложность будет зависеть от смысла, который ты вкладываешь во фразу:
0
|
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 30
|
|
14.04.2018, 19:05 [ТС] | 7 |
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
15.04.2018, 01:13 | 8 |
А конкретнее? Тебе надо в строке определить что есть где: где числа, где переменные, где функции и где операции.
Для этого нужен парсер. Его задача пробежаться по строке и вернуть поток лексем. Этот поток лексем передается лексическому анализатору, который проверяет корректность выражения и строит синтаксическое дерево. Такое дерево может быть построено методом рекурсивного спуска. По-хорошему это все так делается. А по плохому... не знаю, никогда не пробовал. Если еще не поздно, то уточни у своего преподавателя то, что он надеется увидеть в твоей программе.
1
|
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 30
|
|
15.04.2018, 16:33 [ТС] | 9 |
Просто впервые слышу о парсере и не понимаю как его применить к моей задаче.
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
15.04.2018, 22:38 | 10 |
Достаточно открыть любой пример на любом языке по теме.
Самый банальный вариант: создаешь перечисление с элементами типа: константа, переменная, операция, откр/закр скобка, функция и т.п. И тебе нужно создать обработчик, который, получив на вход строку, предоставляет следующую информацию: а вот сейчас идет константа со значением 3, а после операция умножения, потом открывающая скобка, а потом переменная с именем x и т.д. Короче, размечаешь что есть что в строке. А потом исходная строка уже не нужна, ты работаешь только с потоком лексем.
1
|
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 30
|
|
17.04.2018, 16:52 [ТС] | 11 |
Собственно, так и сделал. Погуглил, посмотрел коды (например: http://coliru.stacked-crooked.... c0f0a8558e ) и немного разобрался (хотя бы появилось общее представление).
Я так понял это и есть этот обработчик. И что теперь? Как этот поток преобразовать в производную?
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
17.04.2018, 21:30 | 12 |
Что-то типа того. Пример, который ты нашел, сразу строит синтаксическое дерево.
Довольно просто. Твое выражение представлено в виде дерева. В корне у тебя узел какого-то типа (операция, функция и т.п.), дети представляют из себя аргументы этих операций (Скажем, в узле лежит плюс, а в двух его детях - его аргумент слева и справа). Ну и по тому же примеру, производная по операции сложения - это сумма производных правой и левой частей. Т.е. для каждой типа узла тебе нужно его производную выразить через его детей. Советую порисовать синтаксические деревья, сразу понятно станет. Добавлено через 1 минуту FeelsRainMan, должен получиться аналог eval из примера.
0
|
17.04.2018, 21:30 | |
17.04.2018, 21:30 | |
Помогаю со студенческими работами здесь
12
Нахождение производной Нахождение первой производной Нахождение производной функции Нахождение минимального корня 2й производной Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |