Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

как в с++ сделать, что пользователь вводил функцию f(x), а потом х, и оно считалось

серега лавров Ученик (8), закрыт 4 года назад
и можно ли как-то находить производную?
Лучший ответ
Victor Surozhtsev Просветленный (34291) 4 года назад
Можно сделать синтаксический разбор строки, то есть, например, при вводе

f = sin⁴X - ln|cosX| + expX программа бы автоматически распознавала функцию f как pow(sin(X),4)-log(fabs(cos(X)))+exp(X).

Но это ещё умéть надо! А производную в простейшем случае можно брать численно как (f(x+h)-f(x-h))/(2*h), где h, скажем, 1е-8 (ошибка будет ~h²).

Кстати, что это ещё там за дурь и бред пьяного крокодила про "символьные вычисления"? Считать же вроде, как я понял, надо на плюсах вовсе не "символьно", а вполне конкретно - численно!..
серега лавровУченик (8) 4 года назад
можете объяснить как это сделать? на примере какой-нибудь функции и желательно с кодом
Дано функцию f(x,y). Вывести на екран функцію g(x)=
Victor Surozhtsev Просветленный (34291) В такой общей постановке это сделать трудно, если надо конкретно выдать на экран функцию как аналитическую формулу. Но если f(x,y) - полином от х и у, то это как раз довольно нетрудно, хотя формула может получиться громоздкой. Можно выдать на экран таблицу при хє[Хнач; Хкон] с шагом h. Для этого просто нужно проинтегрировать f по dy на (a;b), например, по Симпсону, что весьма точно. А если функция уже протабулирована, то можно представить её графически в виде графика или номограммы - для этого лучше воспользоваться готовыми пакетами прикладного софта.
Остальные ответы
Андрей Высший разум (425838) 4 года назад
Это называется "символьные вычисления" (в том числе и взятие прозводной). И, обычно, для этого используют более подходящие языки (как, например, Lisp или Prolog). Но и на C++ тоже можно: набери в Google: "C++ символьные вычисления" - получишь множество материалов.

Но тема эта большая и сложная - совсем не для "Ответов".
Дед МазайГений (58109) 4 года назад
Для "Ответов" (и вообще) подошёл бы вариант: порекомендовать библиотеку, которая решает эти задачи. Уверен, такие библиотеки есть.
Андрей Высший разум (425838) Уверен, что есть. Но т. к. не использую С++ в работе, то и экспертом не являюсь. P.S. Когда мне понадобился пакетный вычислитель выражений с ветвлениями, я написал его на Go. :)
Raiden Мастер (1650) 4 года назад
Функцию можно записать, в помощь алгоритм сортировочной станции и обратная польская нотация.
Производные - гугли библиотеки или методы, тут я бессилен.
---------------------------------------------------------------------------------------------------------------------------
Если есть возможность - ИМХО, для подобного предпочтительнее пайтон — там намного проще со всей этой ересью..
Jurijus Zaksas Искусственный Интеллект (424920) 4 года назад
Если производную надо найти в числовом, а не символьном виде, это можно сделать по определению производной:

f'(x)=(f(x+dx)-f(x))/dx при некотором малом dx

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