C语言中的函数导数

3
有没有办法在C语言中计算一个未知的函数的偏导数值?我在这里读到了如何实现求导数:Compute a derivative using discrete methods,但这只有当我知道函数f(x)的确切形式时才能实现。但是,如果我想将函数f(x)作为参数传递,这是否有可能呢?我觉得不行,因为我需要解析字符串(必须像'x0*exp(x1)*ln(x2*x1)'这样通过字符串传递)!谢谢!编辑:我的问题不是关于如何将函数作为指针传递给C语言,而是关于如何评估以字符串形式输入的数学函数。
3个回答

4
你可以传入一些解析树来代替字符串表示表达式。对于非隐式函数,符号微分是一项简单且完全机械化的任务,因此在决定如何表示表达式后对其进行微分相对容易。

好的,谢谢你到目前为止所做的工作。那么没有更简单的方法了,对吗?没有内置库之类的东西吗? - tim

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语言已经生疏了...


函数指针只会给出指向内存中代码的指针。理论上,在运行时查看内存中的机器代码是可能的,但我认为那不是帖子作者想要询问的。 - Joe
也看不出这怎么能真正帮到我。 - tim
我认为OP是在询问如何将函数作为参数传递,以便在某些点上对其进行评估,这就是函数指针的用途。 - fortran
哦,抱歉,我的意思是“数学函数”,它可以来自用户输入,比如用户输入“x^2y^2z^2”作为要在某个点(x,y,z)上求值的函数。我不是指编码的C函数。 - tim
如果问题更清晰明确,那么你的问题实际上是关于解析而不是函数传递。 - fortran
好的,谢谢你!这也是这类问题的一个很棒的例子!我会编辑我的问题。 - tim

1
我知道我来晚了,但也许这可以帮助到某些人。 我写了一个库,正好可以做到这一点: https://github.com/B3rn475/MathParseKit 你可以将字符串解析为函数树并计算导数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接