我想使用Yampa进行一些基本的系统模拟,就像我在Simulink中所做的那样。在这种情况下,我想模拟一个弹簧和阻尼器系统,由这个Simulink教程介绍。我编写了以下信号函数来表示该系统:
system = time >>> force >>> displacement
force = constant (m * g)
displacement = feedback (-) (velocity >>> integral) (gain $ k / m) 0
velocity = feedback (-) integral (gain $ c / m) 0
feedback
函数创建一个基本反馈循环,实现方法如下:
feedback op a b b0 = loopPre b0 inner
where inner = arr (uncurry op) >>> a >>> (identity &&& b)
哦,还有:
gain x = arr (*x)
使用合理的正常数,我得到了一个极度不稳定的系统:
在构建反馈环路或应用积分方面是否存在明显的错误?
integral
进行了一些简单的测试,所以我认为这不是问题。你所说的“比例有误”,是指水平轴吗?我的代码没有绘制时间,只是每个数据点的数量。 - Daniel Buckmastertime >>> integral >>> integral
的系统。前几个样本为0,因为积分器需要预热。我从未想过这么小的延迟足以破坏系统的稳定性。 - Daniel Buckmaster