在Mathematica / Mathlink中计算衍生物

时间:2010-09-25 06:30:53

标签: c wolfram-mathematica mathlink

我正试图弄清楚如何通过Mathlink使用C中的Mathematica。

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

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

一切都很好。

现在,如果我想要衍生品的价值,事情会变得更糟:

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

不起作用。我试图插入“D”功能,但我似乎无法让它工作。我能找到的最好的方法就是这个

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

它确实有效,但它非常慢,可能是因为我要求Mathematica解析表达式,而不仅仅是调用函数......有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

Mathematica中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);