使用不同结构传递MathLink函数列表

时间:2011-07-13 03:54:59

标签: c wolfram-mathematica mathlink

我一直在开发一个MathLink应用程序,其功能可以接受两个列表,例如

:Pattern: g[zi_List, fi_List]

我打算手动拉入该功能。两个列表都可以是实数或复数,如果任一参数很复杂,结果都很复杂。此外,fi可以是方形矩阵列表,但zi仍然是一维列表。

MathLink C API中,最直接的看似函数是MLGetReal64Array,它可以处理实数和复杂数据类型,因为Complex显示为最内层Head数组。并且,一旦确定了复杂性,如果合适,阵列可以转换为std::complex<double>或C99复合类型。现在,MLGetReal64Array不处理非矩形Lists,因此每个List元素必须具有其他元素的维度并且属于同一类型:复杂的真实。但奇怪的是,如果函数接受单个List参数,MLGetReal64Array将返回一个数据结构,该结构具有一个元素List作为其最外层元素,即输入h[ {1, 3, 5} ]返回事物的c方List[List[1,3,5]]

事实证明,对于双列表功能,例如g,对MLGetReal64Array的单个调用将同时返回两个参数,即g接收List[ zi, fi ]。由于我计划对每个列表进行预处理以确保结构和元素类型的一致性,因此确保两者具有相同的元素类型不会成为问题。但是,我希望fi成为矩阵列表,而MLGetReal64Array会导致MLEGSQ: MLGet() called out of sequence错误。

所以,我的问题是:我可以使用MLGetReal64Array来获取这两个列表吗?我该怎么办呢?而且,如果我不能使用MLGetReal64Array,我的替代方案是什么?

我想如果MLGetReal64Array对于结构是正确的,我可以使用MLGetFunction从链接中弹出外部List,这样我就可以使用{{1}每个参数。到目前为止,我还没有尝试过。但是,与此同时,我会感激任何建议。

1 个答案:

答案 0 :(得分:1)

我会为您拥有的不同案例创建单独的函数。在Mathematica方面处理这个逻辑要比在C中找到你通过链接得到的内容要容易得多。