我正在尝试使用 ida 和 assimulo 来解决敏感性问题。在没有敏感性的情况下解决问题可以正常工作,但现在我想用最终时间、初始值和控件(我的方程中使用的参数)的敏感性来解决。
我在 assimulo 页面上只找到了一个示例(这仅具有初始敏感性),我没有正确理解。
有人可以帮助我并解释需要如何实施不同的敏感性吗?
多谢
我正在尝试使用 ida 和 assimulo 来解决敏感性问题。在没有敏感性的情况下解决问题可以正常工作,但现在我想用最终时间、初始值和控件(我的方程中使用的参数)的敏感性来解决。
我在 assimulo 页面上只找到了一个示例(这仅具有初始敏感性),我没有正确理解。
有人可以帮助我并解释需要如何实施不同的敏感性吗?
多谢
我使用 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。希望在下一个版本中看到这一点:-)