首页 > 解决方案 > 在 Simulink 中将输出用作 Matlab Function 模块的新输入

问题描述

我的 Simulink 模型中有三个输入到 Matlab 功能块。输入由一维数组thetaArray和两个变量currentIndex和组成trackingError。Matlab 函数块将输出两个变量,称为newIndextheta

newIndex变量用作 Matlab 函数块的新输入的理想方法是什么?

这是我的 Simulink 模型的图像

这是模型中 Matlab 功能块的代码

function [newIndex,theta] = arraySelector(thetaArray,currentIndex,trackingError)

if currentIndex < length(thetaArray) && trackingError <= 0.00002
   newIndex = currentIndex + 1;
else
   newIndex = currentIndex;
end

theta = thetaArray(newIndex);
end

先感谢您。

标签: matlabsimulink

解决方案


如果 theta 将是模型的输出和输入,您将拥有一个包含 代数循环的模型。

从你的问题中不清楚你是否

  1. 需要在单个时间步内求解代数环或
  2. 您希望您的模型在循环的每次迭代中及时推进。

对于第二种情况:

这是更容易的情况。(在研究您的模型时更有可能)。在这里,您将打破循环,例如通过引入延迟块。延迟块的初始条件将是您现在在示例中定义的(块 theta_1)。

对于第一种情况:

按照如何处理模型中的代数环中的描述进行操作。我建议您首先研究一个使用标量而不是数组的示例。您需要定义索引的初始条件,例如通过在循环中引入一个 IC 块(就像您为 trackingerror 所做的那样)。如果 simulink 仍然无法解决代数循环,请考虑在您的 Matlab 功能块中使用替代实现,它会改变您的输入状态。 从直接馈通到非直接馈通


推荐阅读