![]() |
|
Модераторы: Poseidon |
![]()
|
|
| Гость_Сергей |
|
|||
|
Unregistered |
Помогите пожалуйста!!!!!!!!!!!!!!!!
Я ввожу функцию(триганометрическую,простую или сложную), а на выходе должен получить её производную. |
|||
|
||||
| Void |
|
||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 6 Всего: 173 |
Производную нужно найти символьно, т.е. на входе что-то вроде
а на выходе
или численно, т.е. вводится функция, задается значение аргумента, и с заданной точностью вычисляется производная? В обоих случаях нужно будет делать разбор выражения. Для первого варианта обязательно в древовидное (AST) представление, и по нему создавать AST производной. Это несложно и вполне формализованно. Гораздо сложнее с упрощением полученного выражения. Язык для реализации какой? Трудоемкость задачи от этого зависит очень сильно -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||
|
|||||
| Гость_Сергей |
|
||||
|
Unregistered |
Delphi !! Но что делать с более сложными (если надо найти производную 2 степени)
На выходе будет
|
||||
|
|||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 6 Всего: 173 |
Два раза продифференцировать, как ни странно Повторяю: самое сложное - не взять производную, как таковую, а упростить полученное выражение. Я бы примеров написал... Но на Delphi, к сожалению, не могу. C++/C# пойдет? (Про OCaml даже не говорю). -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Гость_Сергей |
|
|||
|
Unregistered |
Давай на С++ |
|||
|
||||
| sergejzr |
|
||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 11 Всего: 360 |
Можешь пока сюда глянуть http://forum.vingrad.ru/index.php?showtopi...st&p=431141
Там правда упрощение, но принцип тот же. Создаёшь абстрактную функцию возвращающую производную варажения. Пишешь такие классы для каждого мат - выражения
Потом легко:
|
||||
|
|||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 6 Всего: 173 |
Ну вот, за меня уже практически все написали
sergej.z, одно замечание: такая реализация Pow.diff подойдет только если показатель степени - константа. В этом легко убедиться, потому что (x^x)' != (x * x ^ (x - 1)) Общая формула есть: (u ^ v)' = u ^ v * v' * ln u + v * u ^ (v - 1) * u' но частный случай с константным показателем лучше наверное рассматривать отдельно, потому что замаемся упрощать такие выражения. Естественно, идеального упрощения добиться практически нереально, CAS чрезвычайно сложны для реализации. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |