c - 如何在 Matlab Coder 中为具有不同输入数量的函数定义输入类型?

标签 c matlab compilation mex matlab-coder

我有一个函数 sq_dist()。可以像这样调用此函数 sq_dist(a,b)sq_dist(a)。此功能包括缓慢的操作,因此我正在尝试制作它的 Mex 版本,希望它运行得更快。我正在使用 Matlab Coder GUI 来这样做。为了定义输入类型(在定义输入屏幕中),我使用调用 sq_dist(a,b) 和 sq_dist(a) 的函数来自动确定输入。这给了我一个错误:Error determining type for input sq_dist:b。索引超出矩阵维度。这是我的功能:

n = 50; 
dim = 50; 
a = rand(n, dim);  
b = rand(n, dim); 

u = sq_dist(a, b); 
v = sq_dist(a); 

因此,由于可以用不同的方式调用 sq_dist,我不确定如何在 Coder 中定义它的输入。

如果我为 ab 手动将输入设置为 double :inf x :inf,则编译 mex 文件但我得到一个运行时错误:使用错误数量的参数调用函数“sq_dist”:预期 2,收到 1。

最佳答案

简而言之,您不能为顶级功能做您想做的事情(当前版本 2016a)——这必须有定义数量的输入和输出。即使您在函数定义中使用“varargin”参数,MATLAB Coder 也会根据您提供的示例参数生成具有固定数量输入的函数。

如果您有一个具有可变数量输入参数的特定函数,您可以在外部放置一个包装函数(具有固定数量的输入参数),并使包装函数成为顶级函数。

这里的规则: http://uk.mathworks.com/help/simulink/ug/rules-for-using-variable-length-argument-lists-for-code-generation.html

关于c - 如何在 Matlab Coder 中为具有不同输入数量的函数定义输入类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36918144/

相关文章:

c - 提高 Matlab 中卡尔曼滤波器的计算速度

javascript - 为什么 JavaScript 会被编译成机器码?

即使语法错误也会生成 Python 编译文件

c - 如何解决 "unknown conversion type character ` z' in format”编译器特定警告?

matlab - Colorbar - Matlab 中的轴刻度

c - 退出时释放 LLVM 分配的所有内存

windows - Mac 和 Windows MATLAB Gui 之间的兼容性

c - 使用信号量编译但未运行的生产者-消费者代码

c - 数组声明,并且不使用中间索引

c - malloc() 函数的返回