c中函数的导数

时间:2011-04-28 08:52:59

标签: c function

有没有办法计算c中函数的部分导数的值,到目前为止还不知道?我在这里阅读:Compute a derivative using discrete methods关于如何实现派生,这只有在我确切知道函数f(x)x =(x0,x1,...,xn)时才有可能。但是,如果我想将函数f(x)作为参数传递,这在某种程度上是可能的吗?我想这不是因为我需要以某种方式解析字符串(显然必须作为字符串传递,如'x0 * exp(x1)* ln(x2 * x1)')!? 谢谢到目前为止!

编辑:我的问题不是关于如何将函数作为指针传递给c,而是关于如何评估数学函数,例如由用户输入为字符串。

3 个答案:

答案 0 :(得分:4)

您可以传递某种代表表达式的parse-tree而不是字符串。对于非隐式函数,符号微分是一个简单而完全机械的任务,因此一旦你决定如何表示它就区分表达式会相对容易。

答案 1 :(得分:2)

对C中的函数指针执行搜索,这对您有帮助。

编辑:添加一个例子,这样就更明显了......

#include <stdio.h>

typedef float (*real_univariate_function)(float x);

float calculate_derivative(real_univariate_function f, float x, float h) {
    return (f(x+h)-f(x))/h;
}

float square(float x) {
    return x*x;
}

int main() {
    printf("derivative for x^2 in 2 with h 0.001 is: %f\n",
            calculate_derivative(&square, 2, 0.001));
}

可能存在一些语法错误,我的C生锈了......

答案 2 :(得分:1)

我知道我迟到了,但也许这可以帮助别人。 我写了一个完全符合这个目的的库: https://github.com/B3rn475/MathParseKit

您可以将字符串解析为函数树并计算导数。