迭代地修改C中的函数

时间:2014-10-21 23:34:17

标签: c numerical-methods

我正在尝试在C中创建一个数值根查找器,以找到贝塞尔函数的零点。通过将函数除以(x-x0),数学函数F(x)可以放气,其中x0是已知的根。得到的函数G(x)= F(x)/(x-x0),具有F(x)除了x0之外的所有根。这很有用,因为它可以防止解算器找到两次相同的根。

当我使用我的求解器找到根时,会将其写入数组Roots[]。 贝塞尔函数在math.h中定义为double j0(double x)

我想迭代修改double j0(double x),以便我可以:

double my_j0(double x) = j0(x)/(x-Roots[n]);

然后我可以在我的求解器中调用这个新的,缩小的函数。

上面的语法没有意义,但我不知道如何表示它。

我试图使用函数指针并定义

double (*my_j0)(double); my_j0 = &j0;

但现在我不知道如何迭代修改函数,每次除以我用求解算法找到的根。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

你可以在带有起始案例的递归函数中将它作为参数传递。如果你试图解决iterativley,这样的事情可能有用。

double my_j0(double x, double my_root){
    if(//some base case){
        //final calculation
        return calculation
    }
    if(my_root == some_initialization){
    //do initial calculation work
        my_root = calculated_root;
    }
    else{
    //do calculations using your root
        my_root = calculated_root;
    }
    return my_j0(x, my_root)

答案 1 :(得分:0)

经验丰富之后,我意识到我真正想要的是一个匿名函数或lambda函数。关于lambda函数的一个很好的介绍可以在SO question找到。

不幸的是,C不支持lambda函数,但是,GCC(使用宏)和Clang编译器都支持语言扩展来实现可以在Wikipedia上找到的lambda函数。