1

这与我之前的问题有点相关,但有所不同。如果不使用 Evaluate() 等,我无法弄清楚如何提供 MathLink 函数选项。例如,我有以下 C# 代码:

ml.PutFunction("Abs",1);
ml.PutFunction("Fourier",2);
ml.Put(data); //data = double[]
ml.Put("FourierParameters->{-1,1}");

它不起作用。它将 FourierParameters 部分作为文字字符串,而不是选项。我尝试使用该字符串创建一个 Expr 并将其放入,但这也失败了。这甚至可以在 .NETLink 中完成吗?

4

2 回答 2

2

此示例页面之后,似乎必须使用 PutSymbol 输入选项,并且您需要添加“规则”PutFunction。

导致类似(未测试):

ml.PutFunction("EvaluatePacket", 1);
ml.PutFunction("Abs",1);
ml.PutFunction("Fourier",2);
ml.Put(data); //data = double[]

ml.PutFunction("Rule", 2);
ml.PutSymbol("FourierParameters");
ml.PutFunction("List", 2);
ml.Put(-1); 
ml.Put(1); 
ml.EndPacket();
于 2011-05-04T15:23:18.610 回答
1

我会使用高级包装器来做到这一点。例如,可以使用 Mathematica 的所有便利功能编写一个名为 MyFunction 的 Mathematica 函数,该函数调用几个低级别的 mathlink 函数之一,例如 myFunction1、myFunction2 等。调用哪个 mathlink 函数将基于标准选项处理技术数学。

于 2011-05-04T15:20:57.443 回答