在simulink中使用嵌入式matlab函数中的scatteredInterpolant变量

时间:2016-05-10 09:56:42

标签: matlab simulink

有什么办法可以做,即

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'必须 评估为数字或逻辑

1 个答案:

答案 0 :(得分:1)

Matlab功能块不支持您尝试做的事情,MATLAB无法为其生成代码。问题是:

  • 您正尝试访问范围
  • 中不可见的变量Surface 代码生成完全不支持
  • scatteredInterpolant(至少在我的MATLAB版本中,可能会在最近的版本中得到改进)。

要在代码级别修复此问题,您可以切换到已解释的MATLAB代码。这可以通过切换到解释的MATLAB块或使用coder.extrinsic来完成。这是一个快速而简单的修复,但我建议不要这样做,因为它可能会导致模型速度变慢。相反,我建议切换到lookup table,它也能够进行插值。