Как найти производную функции с помощью c
можно ли найти производную функции с помощью программы на Си. Я использую matlab в том, что он имеет встроенную функцию diff (), которая может быть использована для поиска производной функции.
f(x)=x^2
можно ли найти производную от вышеуказанной функции с помощью c. Каков алгоритм для этого?
5 ответов
Да, это вполне возможно. Однако решение зависит от ваших потребностей. Если вам нужно простое численное решение, сделаем следующее (в определенной степени, с некоторыми ограничениями-наивная реализация):
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.
однако, если вам нужно analitically найти формула производной данной функции, то вы кому:
- проанализируйте входную формулу для некоторого абстрактного типа данных, например AST;
- выведите его, используя идентификаторы и правила деривации (их всего несколько, эта часть должна быть самой простой),
- Сериализуйте абстрактный тип данных, полученный в результате процесса деривации, в строку и выведите его в результате.
однако вам не нужно будет делать все это; есть большие математические библиотеки C, которые обеспечить такую функциональность.
Edit: после некоторого гугления я не смог найти его. Самое близкое решение для начала работы, которое я могу придумать, - это взглянуть на исходный код GeoGebra - хотя он написан на Java, его довольно легко прочитать для любого, кто достаточно свободно владеет языком C-like. Если нет, просто продолжайте и реализуйте этот алгоритм самостоятельно:)
нет ничего встроенного в язык C, чтобы включить это. Вы могли бы найти числовую библиотеку, чтобы сделать это, хотя, если вы ищете в интернете, хотя я сомневаюсь, что есть что-нибудь доступное, что обеспечит символические производные. Вы можете сами кодировать приближенные числовые производные, используя прямые, обратные и/или центральные различия.
для простых функций хорошо работает следующее численное дифференцирование:
typedef double (*TFunc)(double);
// general approximation of derivative using central difference
double diff(TFunc f, double x, double dx=1e-10)
{
double dy = f(x+dx)-f(x-dx);
return dy/(2.*dx);
}
// more or less arbitrary function from double to double:
double f(double x)
{
return x*x;
}
// and here is how you get the derivative of f at specified location
double fp = diff(f, 5.);
Я знаю, что опоздала, но я написал библиотеку, которая делает именно это.
Он позволяет анализировать функцию, генерируя дерево функций. Тогда вы даже можете решить его или вывести его.
вы можете найти его на. https://github.com/B3rn475/MathParseKit
В C вы можете сделать грубое численное дифференцирование относительно легко, но любой вид символического дифференцирования требует сторонней структуры или прокатки собственной.
C-это язык программирования общего назначения и низкого уровня, в отличие от Matlab, который специализируется на математических вычислениях и имеет передовые инструменты для символьных вычислений.