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

问题描述 投票:13回答:5

是否有可能使用c程序找到函数的导数。我正在使用matlab,因为它具有内置函数diff(),可用于查找函数的派生类。

f(x)=x^2

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

c derivative
5个回答
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

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

但是,如果您需要通过分析来找到给定函数的导数的公式],则必须:

  1. 将输入公式解析为某种抽象数据类型,例如AST;
  2. 使用派生的身份和规则派生(只有少数,这部分应该是最简单的,]
  3. 将派生过程中获得的抽象数据类型序列化为字符串,并将其作为结果输出。
  4. 但是,您不需要做所有这一切;有很多提供这种功能的C数学库。

编辑:经过谷歌搜索后,我找不到一个。我能想到的最接近入门的解决方案是GeoGebra's source code-尽管它是用Java编写的,但是对于任何精通C语言的人来说,它都是很容易阅读的。如果没有,那就继续自己实现该算法:)


3
投票

对于简单函数,以下数值微分效果很好:


2
投票

C语言中没有内置实现此功能的工具。尽管您可以在线搜索,但也许可以找到一个数值库来执行此操作,尽管我会怀疑是否有任何可用的方法可以提供符号导数。您可以考虑自己使用正向,反向和/或中心差来编码近似数值导数。


0
投票

在C语言中,您可以相对容易地进行粗略的数值微分,但是任何类型的符号微分都需要第三方框架或使用自己的框架。


0
投票

对于想要在f'(x)后进行数学运算的好奇的偷窥者,我们使用从限制中得出的导数的标准定义,请参见:Formula for derivative.


-1
投票

我知道我来晚了,但是我已经写了一个库来做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.