使用 Matlab codegen 在 Matlab 2013 中创建 mex 文件时出错

Posted

技术标签:

【中文标题】使用 Matlab codegen 在 Matlab 2013 中创建 mex 文件时出错【英文标题】:Error Creating a mex file in Matlab 2013 using Matlab codegen 【发布时间】:2014-04-11 11:27:37 【问题描述】:

我有一个名为 test (test.m) 的函数,我想使用 Matlab 2013b 中的 codegen 将其转换为 mex 文件。 这里 B 是一个包含零矩阵 p_z (大小 128 * 128 )的结构,而 plastset 是一个空矩阵( 0*0 )。 转换以下代码时出现错误: 除非指定了“行”,否则输入必须是向量。对于可变大小输入,第一维或第二维必须具有恒定长度 1 ,用于行 'actset = setxor (actset, plastset);'在下面提到的代码中

请帮我更正代码,以便成功将以下函数创建到 mex 文件中。

function [] = test(B)

p_z = B.p_z;

plastset = B.plastset;

if isempty(B.plastset)
     plastset = zeros(1,0);
end


if isempty(find( p_z > 0, 1 ))
     actset = zeros(1,0);
else
     actset = find( p_z > 0 );
     actset = setxor ( actset , plastset );
end

【问题讨论】:

我缺少 codegen,但文档提示您必须通过 -args 开关指定参数的类型。 [mathworks.de/matlabcentral/answers/… 支持线程)。 【参考方案1】:

从错误消息看来,setxor 不支持您调用它的方式的矩阵。如果你想用 plastset 对 actset 中的所有元素进行 setxor,请尝试使用冒号操作将它们作为向量。

actset = setxor(actset(:), plastset(:));

【讨论】:

谢谢你,我会试试这个让你知道

以上是关于使用 Matlab codegen 在 Matlab 2013 中创建 mex 文件时出错的主要内容,如果未能解决你的问题,请参考以下文章

Matlab Codegen:不支持匿名函数

Matlab Codegen Eig 函数 - 这是一个错误吗?

matlab基本语法

智能优化算法——模拟退火法(Python&Matla实现)

将 MATLAB 代码转换为库

定点 MATLAB DSP 算法