我正在尝试弄清楚如何通过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解析表达式,而不仅仅是调用函数……有没有更好的方法?
发布于 2010-09-25 16:21:26
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);https://stackoverflow.com/questions/3792773
复制相似问题