Modelica 注释导数:noDerivative 与 zeroDerivative

Modelica annotation derivative: noDerivative versus zeroDerivative

我在 Modelica 函数中成功使用了 annotation(derivative)。现在我已经到了我认为我需要使用 zeroDerivativenoDerivative 的地步,但从规范来看我只是不明白有什么区别,以及何时使用什么。
https://specification.modelica.org/v3.4/Ch12.html#declaring-derivatives-of-functions
似乎 zeroDerivative 是用于时间常数参数??
有人有一个简单的例子吗?

使用 zeroDerivative 来指代不变的输入,即参数或常数值。

对没有微分值的信号使用 noDerivative。例如,如果输入信号来自外部函数。

noDerivative 的重要情况是输入“冗余”时。

例如考虑在 MSL 中计算某些媒体的密度:

密度计算见Modelica.Media.R134a.R134a_ph.density_ph(注意这本身不包含任何导数):

algorithm
   d := rho_props_ph(
        p,
        h,
        derivsOf_ph(
          p,
          h,
          getPhase_ph(p, h)));

调用的顶级函数是:

function rho_props_ph
  "Density as function of pressure and specific enthalpy"
  extends Modelica.Icons.Function;

  input SI.Pressure p "Pressure";
  input SI.SpecificEnthalpy h "Specific enthalpy";
  input Common.InverseDerivatives_rhoT derivs
    "Record for the calculation of rho_ph_der";
  output SI.Density d "Density";
algorithm 
  d := derivs.rho;
  annotation (
    derivative(noDerivative=derivs) = rho_ph_der ...);
end rho_props_ph;

所以 derivs 参数有点多余,由 ph 给出;我们不需要再次区分它。如果您发送未以这种方式给出的 derivs-argument 可能会产生不可预测的结果,但详细描述它会太复杂。 (有一些 noDerivative=something 的想法 - 但即使只是指定它也太复杂了。)

对于zeroDerivative对应的要求是参数导数为零;这很容易验证,如果不为零,我们就不能使用特定的导数(可以指定多个导数并在这种情况下使用另一个导数)。