我有一个稳态代数模型(没有der()表达式)和一个非线性方程。当在Dymola中进行翻译时,这组方程导致数字雅可比矩阵。我想删除数字雅可比行列式(如果可能的话)以提高模型的性能。
设置参数Hidden.PrintFailureToDifferentiate = true后(感谢this tip from Claytex),我看到Dymola发出警告:
Cannot find derivative of function:
InitializationParameterLoop.InitFunctions.interpolate(xVector, yVector, x, 1)
请注意,InitializationParameterLoop.InitFunctions.interpolate函数是Modelica.Math.Vectors.interpolate函数的副本,已复制,以便我可以在我自己的包中进行必要的修改。
我尝试通过对插值函数进行以下更改来为派生dy / dx添加显式定义:
将衍生注释添加到函数定义中:
function interpolate“在向量中插值”扩展了Modelica.Icons.Function注释(衍生词= dydx);
添加受保护的Real变量dydx:
Real dydx;
在算法部分计算dydx:
if abs(x2-x1)>0 then
dydx :=(y2 - y1)/(x2 - x1);
else
dydx := sign(y2 - y1)*Modelica.Constants.inf;
end if;
我希望这个简单的方法可以用来明确定义dydx并删除数字雅可比计算,但它似乎没有做任何改变,Dymola仍然发出关于
的警告我是否误解了衍生注释的使用?如果是这样,有人可以帮助我理解如何定义插值函数的导数吗?
谢谢!
答案 0 :(得分:2)
这与https://github.com/modelica/Modelica/issues/2078的问题相同,将在Modelica标准库的下一个向后兼容维护版本中修复。