首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递具有不同结构的MathLink函数列表

传递具有不同结构的MathLink函数列表
EN

Stack Overflow用户
提问于 2011-07-13 11:54:59
回答 1查看 399关注 0票数 0

我一直在开发一个MathLink应用程序,它有一个可以接受两个列表的函数,例如

代码语言:javascript
复制
: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,这将允许我对每个参数使用MLGetReal64Array。到目前为止,我还没有试过。但是,在此期间,我将非常感谢您的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-13 12:01:59

我会为你的不同情况创建不同的函数。在Mathematica端处理这个逻辑比在C语言中计算出链接上的结果要容易得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6673884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档