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

Posted

技术标签:

【中文标题】如何在 Matlab Coder 中为具有不同输入数量的函数定义输入类型?【英文标题】:How to define input types in Matlab Coder for a function that has a varying number of input? 【发布时间】:2016-04-28 14:47:38 【问题描述】:

我有一个函数,比如说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 可以以不同的方式调用,我不确定如何在编码器中定义它的输入。

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于如何在 Matlab Coder 中为具有不同输入数量的函数定义输入类型?的主要内容,如果未能解决你的问题,请参考以下文章

具有外部 C++ 函数的 Matlab:coder.ceval 将结构传递给函数

确定输入“conscalc: calc”的类型时出错。无法将 coder.StructTypes 与不同的字段集联合

如何给matlab coder装license

在 MATLAB coder 中使用自定义 C 结构体

为啥 strel 在 MATLAB Coder 中失败

如何在 MATLAB 中为图像使用自定义神经网络函数 [关闭]