1

小さなmathlinkモジュールを介してMathematicaで使用しているFortranで書かれたスカラー関数があります。この関数は、記号定数の処理を含めて、ネイティブの Mathematica 関数にできるだけ近い動作をしたいと考えています。

多くの場合、後で置換規則のリストに置き換えられるシンボリック定数/変数を使用して、Mathematica で何らかの式を記述したいと考えています。しかし、Mathematica はシンボリック引数を指定して mathematica 関数をすぐに評価しようとしますが、明らかに失敗します。たとえば、次の単純な式でも失敗します

extf[a]/.a->5

すべてのシンボリック引数が数値に置き換えられるまで、関数の評価を遅らせる方法はありますか?

私が使用して成功したあまり洗練されていない方法の 1 つ (ただし、この関数を汎用の mathematica パッケージに含めて同僚と共有したい場合は受け入れられません) は、外部関数への「ダミー」参照を使用してすべてを評価し、次に使用することです。他のすべての数値定数を評価すると同時に、すべてのダミー参照を実際の参照と交換する置換規則。例えば

dummyf[a]/.{a->5,dummyf->extf}
4

1 に答える 1

4

Mathematicaパターンマッチャーを使った何かが役に立ちますか?holddummyf入力が数値以外の場合は、定義を省略する必要があることに注意してください。

dummyf[a_?NumericQ] := extf[a]
holddummyf[a_?NumericQ] := extf[a]
dummyf[a_] := holddummyf[a]

[In]  dummyf[0.3]
[Out] extf[0.3]

[In]  dummyf[b]
[Out] holddummyf[b]

[In]  % /. b -> 5
[Out] extf[5]

もう1つの質問はextf、Fortranでの使用が厳密に必要かどうかということだと思います。

于 2011-08-01T20:56:39.857 に答える