有什么办法可以做,即
Surface = scatteredInterpolant(measurement_xz(:,1)*1E-3,measurement_xz(:,2)*1E-3,measurement_xz(:,3));
其中measurement_xz
是我的simulink模型的启动脚本中的一些数据,然后在simulink模型的嵌入式matlab函数中使用Surface
,即
///嵌入式matlab函数
function V = fcn(x,z)
V = Surface(x,z);
?
当我尝试使用Surface
作为V
的参数时使用
function V = fcn(x,z,Surface)
V = Surface(x,z);
在端口和数据管理器中将Surface
设置为参数我收到错误
Expression' Surface'对于数据的初始值' Surface'必须 评估为数字或逻辑。
答案 0 :(得分:1)
Matlab功能块不支持您尝试做的事情,MATLAB无法为其生成代码。问题是:
Surface
代码生成完全不支持scatteredInterpolant
(至少在我的MATLAB版本中,可能会在最近的版本中得到改进)。要在代码级别修复此问题,您可以切换到已解释的MATLAB代码。这可以通过切换到解释的MATLAB块或使用coder.extrinsic
来完成。这是一个快速而简单的修复,但我建议不要这样做,因为它可能会导致模型速度变慢。相反,我建议切换到lookup table,它也能够进行插值。