Да, това е напълно възможно. Решението обаче зависи от вашите нужди. Ако имате нужда от просто числено решение, следното ще свърши работа (до известна степен, с някои ограничения - наивно изпълнение):
double derive(double (*f)(double), double x0)
{
const double delta = 1.0e-6; // or similar
double x1 = x0 - delta;
double x2 = x0 + delta;
double y1 = f(x1);
double y2 = f(x2);
return (y2 - y1) / (x2 - x1);
}
// call it as follows:
#include <math.h>
double der = derive(sin, 0.0);
printf("%lf\n", der); // should be around 1.0
За по-усъвършенствани числови изчисления можете да използвате Научната библиотека на GNU.
Ако обаче трябва да намерите аналитично формулата на производната на дадена функция, тогава трябва да:
- Анализирайте входната формула до някакъв абстрактен тип данни, например AST;
- Извлечете го, като използвате идентичностите и правилата за извличане (има само няколко от тях, тази част трябва да е най-лесната),
- Сериализирайте абстрактния тип данни, който сте получили като резултат от процеса на извличане, в низ и го изведете като резултат.
Въпреки това, няма да е необходимо да правите всичко това; има страхотни C математически библиотеки, които предоставят такава функционалност.
Редактиране: след известно търсене в Гугъл не можах да намеря такъв. Най-близкото решение, за което мога да се сетя, за да започнете, е да погледнете изходния код на GeoGebra - въпреки че е написан в Java е сравнително лесно за четене от всеки, който владее достатъчно свободно C-подобен език. Ако не, просто продължете и приложете този алгоритъм сами :)
person
Community
schedule
16.10.2012