我在SimMechanics中有一个程序,它使用6个导数块(du/dt)。进行10秒的模拟大约需要24小时。有没有办法减少Simulink导数块的计算时间?
发布于 2009-10-03 22:06:21
你没有说你的积分时间步长是多少。如果它是毫秒量级的,而你正在模拟10秒的总瞬变时间,那就意味着10000个时间步长。
时间步长的稳定性限制由您要模拟的动态系统的特性决定。
它还受您使用的集成方案的影响。众所周知,显式积分对于较大的时间步长具有稳定性问题,因此如果您使用Euler积分方法,您将被迫使用小时间步长。
也许您可以将您的积分方案转换为隐式方法,具有纠错功能的5阶Runge Kutta或Burlich-Storer。有关详细信息,请参阅文档。
您没有提供有关感兴趣的系统的物理、模型大小或您的模拟选择的有用信息,因此所有这些都是我的一个有根据的猜测。
发布于 2009-10-03 22:13:23
龙格-库塔方法(在Matlab方言中称为ODE45或ODE23 )对于机械问题并不总是有用的,这是由于可变时间片设置的最佳性能。移动到固定时间设置,并通过评估您可以接受的错误顺序来选择求解器。有关更深入的详细信息,请参阅Matlab文档(以及一些数值分析文本,:-)。
还要考虑你的问题是否需要一些“硬性”的解决方法。如果处理不当,巨大的常量项可能会导致求解器不稳定。
https://stackoverflow.com/questions/1514920
复制相似问题