断言无限长度的一维双数组(matlab编码器)

Posted

技术标签:

【中文标题】断言无限长度的一维双数组(matlab编码器)【英文标题】:assert one dimensional double array of unlimited length (matlab coder) 【发布时间】:2013-02-18 12:59:10 【问题描述】:

我目前正在使用此代码:

assert(isa(values,'double'));
assert(size(values, 1) <= 1000);

说服 matlab 编码器将值设为一维数组。最终目标是能够通过 C# 和 PInvoke 与其交互。这将创建一个包含以下内容的 C 签名:

const real_T values[1000], const int32_T values_size[1]

即使对于长度小于 1000 的一维数组,我似乎也可以使用它。是否有更巧妙的方法来实现上述目标(即断言值是无限长度的一维数组)?

PS:

我也用过:

assert(all(size(values) == [1 Inf]));

但现在搁置了这个,因为创建的结构似乎非常复杂(另见here),我不知道如何从 C# 填充它。

【问题讨论】:

对不起,我删除了另一个。 一个原因:MEX 函数调用 MATLAB 运行时库,因此您确实需要 MATLAB ... 要做到这一点:您的应用程序是 C#。您有要翻译 Matlab -> C 的 Matlab 源代码。生成的 C 应该可以由 C# 调用。 是的 - 如果我不清楚,对不起。我更喜欢“我的”断言方法... 顺便说一句,我现在知道如何填写struct_emxArray_real_T。这里有解释:mathworks.co.uk/help/fixedpoint/ug/…如果你取消删除你的其他问题,我想我现在可以回答了。一直让我感到困惑的是你在谈论 matlab 编码器。我以为那是一个人,你的同事! 【参考方案1】:

Matlab 编码器现在似乎支持动态内存分配(我上次在 2008 年左右使用它时不是这种情况)。

完整示例:http://www.mathworks.de/products/matlab-coder/examples.html?file=/products/demos/shipping/coder/coderdemo_atoms.html

更新:对于动态大小的数组,Matlab 使用 EMX 数据结构:http://www.mathworks.de/de/help/fixedpoint/ug/c-code-interface-for-unbounded-arrays-and-structure-fields.html

【讨论】:

谢谢。不确定这是否有帮助。我可能在这里遗漏了一些东西,但我看不到他们在哪里断言(就像我的情况一样!)要传入的变量是一个非固定大小的一维数组。谢谢 断言不是唯一的方法。另一种方法是在命令行上告诉codegen 对它翻译的函数的参数假设什么。在我链接到命令行的示例中是:codegen run_atoms -args coder.typeof(atom, [1 Inf]),int32(0),int32(0) -config cfg

以上是关于断言无限长度的一维双数组(matlab编码器)的主要内容,如果未能解决你的问题,请参考以下文章

图像加密基于matlab双相位编码单通道彩色图像加密含Matlab源码 1241期

Matlab 编码器:Matlab 数组到 C 数组

matlab 定义数组问题?

图像加密基于matlab GUI双随机相位编码光学图像加密解密含Matlab源码 1633期

数组和 matlab 编码器的问题

将 C 字符数组转换为 Matlab 字符串 [Matlab 编码器]