如何使用c找到函数的导数

Eka*_*Eka 13 c derivative

是否有可能使用c程序找到函数的导数.我正在使用matlab,它有一个内置函数diff(),可用于查找函数的导数.

f(x)=x^2
Run Code Online (Sandbox Code Playgroud)

是否有可能使用c找到上述函数的导数.算法是什么?

小智 18

是的,很有可能.但是,解决方案取决于您的需求.如果您需要一个简单的数值解法,以下将做(在某种程度上,有一些约束 - 天真的实现):

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
Run Code Online (Sandbox Code Playgroud)

对于更高级的数值计算,您可以使用GNU Scientific Library.

但是,如果您需要在分析中找到给定函数的导数的公式,那么您必须:

  1. 将输入公式解析为某种抽象数据类型,例如AST;
  2. 使用派生的身份和规则来导出它(只有少数几个,这个部分应该是最简单的),
  3. 将作为派生过程结果获得的抽象数据类型序列化为字符串,并将其作为结果输出.

但是,你不需要做所有这些; 有很棒的C数学库提供这样的功能.

编辑:经过一些谷歌搜索,我找不到一个.我能想到的最接近的解决方案是看看GeoGebra的源代码 - 尽管它是用Java编写的,但对于任何一个能够使用类C语言的人来说,它都相当容易阅读.如果没有,请继续自己实施该算法:)