1

私は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に要求しているためです...もっと良い方法はありますか?

4

1 に答える 1

2

f'[x]Mathematicaの完全な形はです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);
于 2010-09-25T08:21:26.260 に答える