Есть строка в Билдере. Эта строка содержит формулул функции. Нужно по этой формуле найти производную функции в виде строки.
Кто знает, помогите плиз! Заранее спасибо.
Здравствуйте, Inter3, Вы писали:
I>Есть строка в Билдере.
В билдере много сток. Какая именно тебя интересует?
I>Эта строка содержит формулул функции.
В каком виде формула?
I>Нужно по этой формуле найти производную функции в виде строки.
В виде строки чего? Строка, как результат вычисления производной в конкретной точке или формулу производной?
Здравствуйте, ArtDenis, Вы писали:
AD>Здравствуйте, Inter3, Вы писали:
AD>В билдере много сток. Какая именно тебя интересует?
AnsiString
AD>В каком виде формула?
Например, 7*x^7 + 3*x^2 — 4*x — 1. Или sin(x^2+5*x+2).
AD>В виде строки чего? Строка, как результат вычисления производной в конкретной точке или формулу производной?
Нужно найти формулу производной.
Здравствуйте, Inter3, Вы писали:
I>Нужно найти формулу производной.
По-моему, даже современные аналитические пакеты такого не умеют. Может, maple все же справится? Но как автономно — не знаю, надо искать готовое решение в инете.
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>По-моему, даже современные аналитические пакеты такого не умеют. Может, maple все же справится? Но как автономно — не знаю, надо искать готовое решение в инете.
Ну, как сказать, что не умеет. Advanced Grapher (http://www.alentum.com/agrapher/index.htm), например, умеет. К тому же, эта прога достаточно простая. Вообще, найти формулу производной не так-то сложно. Нужно просто разложить все на множители и по правилам найти производную. Но это писать очень муторно. Я бы хотел как-нибудь попроще, или хотя бы модуль найти для вычисления производных для Билдера.
Здравствуйте, Slicer [Mirkwood], Вы писали:
I>>Нужно найти формулу производной. SM>По-моему, даже современные аналитические пакеты такого не умеют. Может, maple все же справится? Но как автономно — не знаю, надо искать готовое решение в инете.
Насколько я знаю, аналитически можно найти производную от любой функции. Вот с интегралами дело обстоит посложнее.
Здравствуйте, ArtDenis, Вы писали:
AD>Насколько я знаю, аналитически можно найти производную от любой функции. Вот с интегралами дело обстоит посложнее.
f(x)=|x|
Прошу... И это еще самый простой из таких случаев. Производная получается кусочно заданной и разрывной.
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>Здравствуйте, ArtDenis, Вы писали:
AD>>Насколько я знаю, аналитически можно найти производную от любой функции. Вот с интегралами дело обстоит посложнее. SM>f(x)=|x| SM>Прошу... И это еще самый простой из таких случаев. Производная получается кусочно заданной и разрывной.
Но по крайней мере, её можно выразить в виде формулы.
Здравствуйте, Inter3, Вы писали:
I>Есть строка в Билдере. Эта строка содержит формулул функции. Нужно по этой формуле найти производную функции в виде строки. I>Кто знает, помогите плиз! Заранее спасибо.
Все очень просто:
1. парсим строку и преобразуем в выражение в дерево.
2. рекурсивно применяем знакомые со средней школы правила дифференцирования:
const -> 0
G(x) * F(x) -> G'(x)* F(x) + G(x)* F'(x)
x^a -> a*(x^(a-1))
F(G(x)) -> F'(G(x)) * G'(x)
Этих правил вполне достаточно. Все остальное выводится.
Если хочется работать не только со сложениями/вычитаниями/умножениями/возведениями в степень, то добиваем остальные правила, типа
ln(x) -> 1/x
e^x -> e^x
sin(x) -> cos(x)
cos(x) -> -sin(x)
3. Преобразуем дерево обратно в текст.
... << RSDN@Home 1.1.2 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
М-да. А еще для всех функций с кусочно заданной производной (abs(x) и т.п.) парсим их аргументы, определяем ОДЗ, определяем вид производной на каждом из ее [ОДЗ] интервалов, для этого, вероятно, придется решать неравенства, и таки не всегда линейные, а очень даже общего вида. И получаем в результате конечное множество пар (функция, интервал). Это если сможем все эти шаги реализовать.
Не, ну, можно, конечно, ограничиться функциями с простыми производными. Но ведь в вопросе такая возможность не оговаривается...
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Здравствуйте, Inter3, Вы писали:
I>Есть строка в Билдере. Эта строка содержит формулул функции. Нужно по этой формуле найти производную функции в виде строки. I>Кто знает, помогите плиз! Заранее спасибо.
Кнут. Том 1. Все написано.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Кнут. Том 1. Все написано.
Угу, в соавторстве с Н.Пряником.
А вкратце, для тех, кому до Кнута ползти далеко и сессия в разгаре? Как, все-таки?
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>М-да. А еще для всех функций с кусочно заданной производной (abs(x) и т.п.) парсим их аргументы, определяем ОДЗ, определяем вид производной на каждом из ее [ОДЗ] интервалов, для этого, вероятно, придется решать неравенства, и таки не всегда линейные, а очень даже общего вида. И получаем в результате конечное множество пар (функция, интервал). Это если сможем все эти шаги реализовать.
Не, ну я просто прикинул, что парень не MatLab собрался изборетать... А так, потренироваться на кошечках...
З.Ы. Для abs(x) делаем механику кусочно-непрерывных функций, т.е. x<0?-x:x, которые преобразуются по правилу
C(x)?F(x):G(x) -> C(x)?F'(x):G'(x)
по этому критерию abs перейдет в такую:
x<0?-1:1
никаких неравенств решать не придется.
Если мы дифференцируем что-то типа abs(x^2-2), то ее производной будет
x^2-2<0?-2x:2x
никто ж не требует красивостей особых
... << RSDN@Home 1.1.2 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.