将输出用作Simulink中Matlab功能块的新输入

时间:2018-11-20 07:35:01

标签: matlab simulink

我在Simulink模型的Matlab功能块中有三个输入。输入由一维数组thetaArray和两个变量currentIndextrackingError组成。 Matlab功能块将输出两个名为newIndextheta的变量。

使用newIndex变量作为Matlab Function模块的新输入的理想方式是什么?

Here is the image of my Simulink Model

这是模型中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

谢谢。

1 个答案:

答案 0 :(得分:2)

如果theta将作为模型的输出和输入,则您将拥有一个包含 algebraic loop

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

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

第二种情况:

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

第一种情况:

遵循How to Handle Algebraic Loops in a Model中的描述。我建议您首先学习一个使用标量而不是数组的示例。您需要定义索引的初始条件,例如通过将IC块(就像您为trackingerror所做的那样)引入循环。如果simulink仍然无法解决代数循环,可以考虑在Matlab功能块内选择一种替代实现,改变输入的状态。 from direct feedthrough to non-direct feedthrough