代码之家  ›  专栏  ›  技术社区  ›  Eugene Smith

Mathematica/Mathlink中导数的计算

  •  1
  • Eugene Smith  · 技术社区  · 14 年前

    我想知道如何通过Mathlink使用C语言中的Mathematica。

    如果我只想计算一个内置函数的值,我可以

            MLPutFunction( lp, "RiemannSiegelZ", 1L);
            MLPutDouble(lp, val);
    

    现在,如果我想要导数的值,情况会变得更糟:

    MLPutFunction( lp, "RiemannSiegelZ'", 1L);
    MLPutDouble(lp, val);
    

    char query[128];
    sprintf(query, "N[RiemannSiegelZ'[%.20lf]]", val);
    MLPutFunction(lp, "ToExpression", 1);
    MLPutString(lp, query);
    

    它确实可以工作,但是速度非常慢,可能是因为我让Mathematica解析表达式,而不是仅仅调用函数。。。有更好的办法吗?

    1 回复  |  直到 13 年前
        1
  •  2
  •   kennytm    14 年前

    完整形式的 f'[x] 在数学中是 Derivative[1][f][x] . 为此,您需要使用较低级别的MLPutNext,例如。

    MLPutNext(lp, MLTKFUNC);       // Derivative[1][Sin][_]
    MLPutArgCount(lp, 1);          //                    1.23456
    MLPutNext(lp, MLTKFUNC);       // Derivative[1][_]
    MLPutArgCount(lp, 1);          //               Sin
    MLPutNext(lp, MLTKFUNC);       // Derivative[_]
    MLPutArgCount(lp, 1);          //            1
    MLPutSymbol(lp, "Derivative");
    MLPutInteger(lp, 1);
    MLPutSymbol(lp, "Sin");
    MLPutDouble(lp, 1.23456);