matlab - 在 Simulink 中将输出用作 Matlab Function 模块的新输入
问题描述
我的 Simulink 模型中有三个输入到 Matlab 功能块。输入由一维数组thetaArray
和两个变量currentIndex
和组成trackingError
。Matlab 函数块将输出两个变量,称为newIndex
和theta
。
将newIndex
变量用作 Matlab 函数块的新输入的理想方法是什么?
这是模型中 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
先感谢您。
解决方案
如果 theta 将是模型的输出和输入,您将拥有一个包含 代数循环的模型。
从你的问题中不清楚你是否
- 需要在单个时间步内求解代数环或
- 您希望您的模型在循环的每次迭代中及时推进。
对于第二种情况:
这是更容易的情况。(在研究您的模型时更有可能)。在这里,您将打破循环,例如通过引入延迟块。延迟块的初始条件将是您现在在示例中定义的(块 theta_1)。
对于第一种情况:
按照如何处理模型中的代数环中的描述进行操作。我建议您首先研究一个使用标量而不是数组的示例。您需要定义索引的初始条件,例如通过在循环中引入一个 IC 块(就像您为 trackingerror 所做的那样)。如果 simulink 仍然无法解决代数循环,请考虑在您的 Matlab 功能块中使用替代实现,它会改变您的输入状态。 从直接馈通到非直接馈通
推荐阅读
- java - 为什么当消息正文不是时 JAX-RS 参数为空?
- javascript - 在匿名函数中获取函数的函数名
- c# - 在 ASP.NET MVC 中按数字搜索
- react-native - Expo 的 OTA 更新是否会在从商店全新下载后首次开放时启动?
- dart - 没有小部件时如何伪造上下文?
- java - Spring Batch 中的复制作业
- android - 启动时调试 apk 的 Gradle 任务
- drools - 如何更改事实参数的类型(字符串为双精度)以在 Drools 中进行正确比较?
- angular - 如何通过 PIPE 中的正则表达式以 4 角分割字符串?
- graphql - 在 GraphQLError 上重试获取