我正在尝试使用带有assimulo的ida解决问题。 在没有敏感性的情况下解决问题工作正常,但现在我想在最后时刻,初始值和控件(在我的方程式中使用的参数)中使用敏感性。
我只在assimulo页面上找到了一个例子(这只是初始敏感度),我不能理解它。
有人可以帮助我并解释如何实施不同的敏感度吗?
非常感谢
答案 0 :(得分:0)
我使用CVode求解器遵循关于不连续性(https://jmodelica.org/assimulo/_modules/assimulo/examples/cvode_with_disc.html#run_example)的示例,这意味着我将'Explicit_Problem'类子类化。
为了集成我的ode系统(具有不连续性),我确实重写了方法“ rhs”,该方法对我的ode系统进行编码。更具体地说,我使用了以下签名:def rhs(self, t, y, sw)
。
然后,为了获得参数敏感性,我像这样def rhs(self, t, y, sw, p)
修改了签名,请注意附加参数p
!我还需要为p0
分配参数值,如示例中的初始值分配y0
所示。就这么简单。
请注意,同样要计算参数灵敏度可能需要更多的计算时间(我发现要多5到10倍,但是我的ode系统通常并不大)。
不幸的是,灵敏度是使用有限的差异(正向或中心)来计算的。据我了解,SUNDIALS求解器能够进行最先进的算法微分,以获取用于求解它们的灵敏度方程式以及原始ode。很想在下一个版本中看到它:-)