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

时间:2016-04-28 14:47:38

标签: 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. Index exceeds matrix dimensions。这是我的功能:

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

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

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

如果我手动将输入设置为double :inf x :inf ab,则会编译mex文件,但我收到运行时错误:Function 'sq_dist' called with wrong number of arguments: expected 2, received 1.

1 个答案:

答案 0 :(得分:1)

简而言之,您无法为顶级功能执行您想要执行的操作(使用当前版本2016a) - 这必须具有已定义数量的输入和输出。即使你使用' varargin'在函数定义中的参数,MATLAB Coder将根据您提供的示例参数生成具有固定数量输入的函数。

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

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