0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 30

Нахождение производной (символьное дифференцирование)

14.04.2018, 10:44. Показов 4858. Ответов 11

Студворк — интернет-сервис помощи студентам
Нужно написать программу для нахождения производной с двумя переменными.
Например: (2x+1)' = 2; (cosx)' = -sinx; (tgx)' = 1/cos^2x и т. д. (т. е. по таблице производной).

Каким способом это можно сделать и с чего начать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.04.2018, 10:44
Ответы с готовыми решениями:

Символьное дифференцирование
Требуется реализовать класс Expression с чисто виртуальными методами Expression *diff(); и void print(); и отнаследовать классы Number,...

Символьное дифференцирование cos и sin
Здравствуйте. Хочу написать символьное дифференцирование cos и sin. Производную sin определяю через cos, cos через sin. Ошибка понятна:...

Класс "Символьное дифференцирование"
Помогите пожалуйста с созданием такого класса. НОВЫЕ ПОНЯТИЯ: наследование, виртуальные методы. Реализовать абстрактный класс...

11
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
14.04.2018, 10:49
C++
1
2
3
4
5
6
7
8
9
10
11
12
const string fs[3]={"2x+1","cosx","tgx"};
const string der[3]={"2","-sinx","1/cos^2(x)"};
string inp;
cin>>inp;
for(int i=0;i<3;i++)
{
   if(inp==fs[i])
   {
      cout<<der[i];
      break;
   }
}
0
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 30
14.04.2018, 10:55  [ТС]
Это ведь не вся таблица, да и комбинации выражений из двух переменных могут быть разными.
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
14.04.2018, 11:00
Цитата Сообщение от FeelsRainMan Посмотреть сообщение
с чего начать?
Скажем, нужно начать с лексического анализа введенного выражения и построения синтаксического дерева. А пробежавшись по дереву, уже можно вычислить производную.
0
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 30
14.04.2018, 11:05  [ТС]
Окей, но как именно? Есть ли какой-нибудь пример или нечто похожее, работающее по такому принципу?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
14.04.2018, 11:31
FeelsRainMan, попробуй вбить в поиск "парсер математических выражений" или "метод рекурсивного спуска".
Сложность будет зависеть от смысла, который ты вкладываешь во фразу:
Цитата Сообщение от FeelsRainMan Посмотреть сообщение
производной с двумя переменными
0
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 30
14.04.2018, 19:05  [ТС]
Цитата Сообщение от nonedark2008 Посмотреть сообщение
попробуй вбить в поиск "парсер математических выражений" или "метод рекурсивного спуска"
Чего-то совсем не понятно что и как.
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
15.04.2018, 01:13
Цитата Сообщение от FeelsRainMan Посмотреть сообщение
Чего-то совсем не понятно что и как.
А конкретнее? Тебе надо в строке определить что есть где: где числа, где переменные, где функции и где операции.
Для этого нужен парсер. Его задача пробежаться по строке и вернуть поток лексем. Этот поток лексем передается лексическому анализатору, который проверяет корректность выражения и строит синтаксическое дерево. Такое дерево может быть построено методом рекурсивного спуска.

По-хорошему это все так делается. А по плохому... не знаю, никогда не пробовал. Если еще не поздно, то уточни у своего преподавателя то, что он надеется увидеть в твоей программе.
1
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 30
15.04.2018, 16:33  [ТС]
Просто впервые слышу о парсере и не понимаю как его применить к моей задаче.
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
15.04.2018, 22:38
Цитата Сообщение от FeelsRainMan Посмотреть сообщение
Просто впервые слышу о парсере и не понимаю как его применить к моей задаче.
Достаточно открыть любой пример на любом языке по теме.
Самый банальный вариант: создаешь перечисление с элементами типа: константа, переменная, операция, откр/закр скобка, функция и т.п.
И тебе нужно создать обработчик, который, получив на вход строку, предоставляет следующую информацию:
а вот сейчас идет константа со значением 3, а после операция умножения, потом открывающая скобка, а потом переменная с именем x и т.д. Короче, размечаешь что есть что в строке.
А потом исходная строка уже не нужна, ты работаешь только с потоком лексем.
1
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 30
17.04.2018, 16:52  [ТС]
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Достаточно открыть любой пример на любом языке по теме.
Собственно, так и сделал. Погуглил, посмотрел коды (например: http://coliru.stacked-crooked.... c0f0a8558e ) и немного разобрался (хотя бы появилось общее представление).
Цитата Сообщение от nonedark2008 Посмотреть сообщение
И тебе нужно создать обработчик, который, получив на вход строку, предоставляет следующую информацию:
а вот сейчас идет константа со значением 3, а после операция умножения, потом открывающая скобка, а потом переменная с именем x и т.д.
Я так понял это и есть этот обработчик.
И что теперь?
Цитата Сообщение от nonedark2008 Посмотреть сообщение
А потом исходная строка уже не нужна, ты работаешь только с потоком лексем.
Как этот поток преобразовать в производную?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
17.04.2018, 21:30
Цитата Сообщение от FeelsRainMan Посмотреть сообщение
Я так понял это и есть этот обработчик.
Что-то типа того. Пример, который ты нашел, сразу строит синтаксическое дерево.
Цитата Сообщение от FeelsRainMan Посмотреть сообщение
Как этот поток преобразовать в производную?
Довольно просто. Твое выражение представлено в виде дерева. В корне у тебя узел какого-то типа (операция, функция и т.п.), дети представляют из себя аргументы этих операций (Скажем, в узле лежит плюс, а в двух его детях - его аргумент слева и справа). Ну и по тому же примеру, производная по операции сложения - это сумма производных правой и левой частей. Т.е. для каждой типа узла тебе нужно его производную выразить через его детей.
Советую порисовать синтаксические деревья, сразу понятно станет.

Добавлено через 1 минуту
FeelsRainMan, должен получиться аналог eval из примера.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.04.2018, 21:30
Помогаю со студенческими работами здесь

Нахождение производной
Задача: по заданному дереву построить дерево производную. Не могу придумать алгоритм. Не могли бы вы подсказать? Например у меня есть...

Нахождение производной
Здравствуйте, ищу помощи в написании кода для нахождения производной Напишите пожалуйста пример кода для нахождения производной.

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

Нахождение производной функции
Народ как найти производные функцый ? В программе

Нахождение минимального корня 2й производной
Нужно найти минимальный корень 2й производной на отрезке, допустим от -10 до 10. deltaX = 0.0000001. может кто сможет доделать ф-ии )0....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru