Modelica 注释导数:noDerivative 与 zeroDerivative
Modelica annotation derivative: noDerivative versus zeroDerivative
我在 Modelica 函数中成功使用了 annotation(derivative)
。现在我已经到了我认为我需要使用 zeroDerivative
或 noDerivative
的地步,但从规范来看我只是不明白有什么区别,以及何时使用什么。
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
参数有点多余,由 p
和 h
给出;我们不需要再次区分它。如果您发送未以这种方式给出的 derivs
-argument 可能会产生不可预测的结果,但详细描述它会太复杂。 (有一些 noDerivative=something
的想法 - 但即使只是指定它也太复杂了。)
对于zeroDerivative
对应的要求是参数导数为零;这很容易验证,如果不为零,我们就不能使用特定的导数(可以指定多个导数并在这种情况下使用另一个导数)。
我在 Modelica 函数中成功使用了 annotation(derivative)
。现在我已经到了我认为我需要使用 zeroDerivative
或 noDerivative
的地步,但从规范来看我只是不明白有什么区别,以及何时使用什么。
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
参数有点多余,由 p
和 h
给出;我们不需要再次区分它。如果您发送未以这种方式给出的 derivs
-argument 可能会产生不可预测的结果,但详细描述它会太复杂。 (有一些 noDerivative=something
的想法 - 但即使只是指定它也太复杂了。)
对于zeroDerivative
对应的要求是参数导数为零;这很容易验证,如果不为零,我们就不能使用特定的导数(可以指定多个导数并在这种情况下使用另一个导数)。