gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:01:24 27 4
gpt4 key购买 nike

我一直在开发一个 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} ]返回List[List[1,3,5]]在事情的c端。

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

所以,我的问题是:我可以使用 MLGetReal64Array获得两个列表?我该怎么办呢?而且,如果我不能使用 MLGetReal64Array ,我有什么选择?

我在想如果MLGetReal64Array关于结构是正确的,我可以弹出外部 List使用 MLGetFunction 关闭链接这将允许我使用 MLGetReal64Array对于每个参数。到目前为止,我还没有尝试过。但与此同时,我将不胜感激任何建议。

最佳答案

我会为您的不同情况创建单独的函数。在 Mathematica 端处理这个逻辑比弄清楚通过 C 中的链接得到的内容要容易得多。

关于c - 传递具有不同结构的 MathLink 函数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6673884/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com