我在Simulink模型的Matlab功能块中有三个输入。输入由一维数组thetaArray
和两个变量currentIndex
和trackingError
组成。 Matlab功能块将输出两个名为newIndex
和theta
的变量。
使用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
谢谢。
答案 0 :(得分:2)
如果theta将作为模型的输出和输入,则您将拥有一个包含 algebraic loop。
从您的问题中不清楚您是否
第二种情况:
这是较容易的情况。 (研究模型时更有可能)。在这里您将打破循环,例如通过引入延迟块。延迟块的初始条件将是您现在在示例中定义的(块theta_1)。
第一种情况:
遵循How to Handle Algebraic Loops in a Model中的描述。我建议您首先学习一个使用标量而不是数组的示例。您需要定义索引的初始条件,例如通过将IC块(就像您为trackingerror所做的那样)引入循环。如果simulink仍然无法解决代数循环,可以考虑在Matlab功能块内选择一种替代实现,改变输入的状态。 from direct feedthrough to non-direct feedthrough