具有多个输入的舍入功能在Simulink中的MATLAB功能块中不起作用

时间:2015-07-07 22:33:22

标签: matlab simulink

我想将数字四舍五入到小数点后3位。在MATLAB中,我可以通过这种方式轻松完成:

>> number=25.0001;
>> round(25.0001,3)

ans =

25

如果我尝试以这种方式在MATLAB功能块中在Simulink中执行此操作:

function D_avg1 = fcn(m)
%#codegen

D_avg1 = round(m,3);

它给出错误:

Error calling 'round'. This call-site passes more inputs to this function than it can accept.
Function 'BSD_System /Averaging/MATLAB Function' (#278.45.55), line 4, column 10:
"round(m,3)"
Component: MATLAB Function | Category: Coder error

3 个答案:

答案 0 :(得分:1)

MATLAB功能块仅支持round函数的一个输入语法。请参阅http://www.mathworks.com/help/coder/ug/functions-supported-for-code-generation--alphabetical-list.html处的函数列表文档,其中针对round函数,您将看到“仅支持Y = round(X)语法。”

正如smyslov提到的,如果你需要这种语法,你需要把它变成外在的。但是外在只适用于模拟。对于嵌入式代码生成,外部函数不会生成任何代码。

答案 1 :(得分:0)

您应该在嵌入式matlab函数中包含eml.extrinsic('round')。我有类似的问题,无论我使用的是什么MATLAB函数,我都将它们包含在eml.extrinsic('')中以解决问题,如下所示:

function D_avg1 = fcn(m)
%#codegen

eml.extrinsic('round');

D_avg1 = round(m,3);

现在它应该尽我所知。

答案 2 :(得分:0)

有答案。就这样做:

function D_avg1 = fcn(m)
%#codegen

D_avg1 = round((m*1000)/1000);