You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:17:08