代数_ loop_Solut ion_SIMULI NK

Algebraic_​loop_Solut​ion_SIMULI​NK

我想在 SIMULINK 中实现以下伪代码:

q^0 = q_init, i = 0
IF q^i ! = q_final
    q^(i+1) = q^i + alpha * F(q^i)
    i = i + 1
ELSE return <q^0,q^1 ... q^i>

主要问题是,F(q^i) 是当前 q 的函数,并且在每次迭代中计算。当试图在 SIMULINK 中实现这一点时,我 运行 陷入无法解决的代数环。

解决问题的正确方法是什么(在 SIMULINK 中)?

谢谢!

米克洛斯

了解在 Simulink 仿真中划分什么以及输出应该是什么。

您通常会将输出 q^0 到 q^i 作为模型的输出进行缓存,而不是试图让整个模型输出它。

这意味着 Simulink 模型将只处理从 q^(i)(您使用单位延迟块存储)计算 q^(i+1)。

关于if条件:最好不要永远运行一个模拟,除非你知道它肯定会趋向于q_final。如果您不使用整数,那么 == 可能很难准确计算。在那种情况下,您应该使用 (abs(q^i - final) > threshold) 然后检查它是否会结束。

可以使用断点在该点准确结束模拟,但更简单的选择是允许模拟 运行 通过它然后 trim 你的输出(q^0 到q^i,然后是更多值)在 Matlab 中。