Да, это вполне возможно. Однако решение зависит от ваших потребностей. Если вам нужно простое численное решение, подойдет следующее (до определенной степени, с некоторыми ограничениями - наивная реализация):
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, которые предоставляют такую функциональность.
Изменить: после некоторого поиска в Google я не смог его найти. Самое близкое решение для начала, которое я могу придумать, это взглянуть на исходный код GeoGebra, хотя он написан в Java его довольно легко читать любому, кто достаточно свободно говорит на C-подобном языке. Если нет, просто продолжайте и реализуйте этот алгоритм самостоятельно :)
person
Community
schedule
16.10.2012