在Modelica中实现连续可导min函数是否存在性能优势?
Modelica中带连续导数的min函数实现优势及辅助函数的性能影响
我想搞清楚在Modelica里,实现带连续导数的min(.)函数,对比仅C0连续的版本有没有实际优势?
针对x⩾0的场景,我尝试了两种min函数的实现方式:
1/ f1(x,s) := Smooth(0, noEvent(min(x,s))) 2/ f2(x,s) := Smooth(10, x*(1+(x/s)^60)^(-1/60) )
对应的具体函数实现如下:
function Limiter "Function Limiter" input Real x; input Real xc(final min=0); output Real y; protected Real mx; parameter Real k=3; parameter Integer o( final min=1, max=30) = 30; final parameter Integer twoO=2*o; algorithm mx := noEvent(min(x, k*xc)); if noEvent(abs(xc)) >= 1 then y := mx*(1 + (mx/xc)^twoO)^(-1/twoO); else y := mx*xc*(xc^twoO + mx^twoO)^(-1/twoO); end if; annotation (derivative=DerLimiter, inverse(x=InverseLimiter(x=y, xc=xc), xc=InverseLimiter(x=y, xc=x))); end Limiter;
和f1不同,我可以给f2这类实现提供导数函数和逆函数,之前看到资料说这能提升求解器速度。现在想确认:在Modelica里实现这类辅助函数到底能不能真的加快求解速度,还是说属于费力不讨好的无用功?希望有经验的人能分享反馈。
内容的提问来源于stack exchange,提问作者AngeliqueR
相关产品推荐
相关产品推荐

