我想将数字四舍五入到小数点后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
答案 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);