2.7.6 导函数
2025年09月20日
2.7.6 导函数
当der作用于函数时,就要对函数求导,对于内置函数(如sin(x)),能够推导出导函数,但是自定义的函数不能推导出导函数,例如:
其中,sin和cos内置函数的导函数能自动推导出来,因此y就可以计算出来,但y2无法进行计算,因为自定义函数sin_cos的导函数不能自动推导出来。自定义函数的导函数要求在函数定义时显式声明。
自定义函数的导函数通过导数(derivative)注解在函数中显式声明。
注解中“derivative=sin_cos_d”声明函数sin_cos的导函数是sin_cos_d。导数注解中通过属性order、noDerivative和zeroDerivative限定起作用的导函数,只有声明的所有属性条件都成立时,相应的导函数才是有效的。其中,order表示求导的阶数,默认情况取1,annotation(derivative=sin_cos_d)等价于annotation(derivative(order=1)=sin_cos_d)。关于noDerivative和zeroDerivative的详细说明,参见Modelica语言规范。
导函数的输入形参根据原函数构造,首先是原函数的所有输入形参,然后是原函数所有实型(Real)输入形参的导数(noDerivative和zeroDerivative声明忽略的形参除外)。导函数的输出形参是原函数所有实型输出形参的导数。例如,sin_cos的导函数定义是:
使用修改后的sin_cos函数替换der_func_test中的函数定义,并加入sin_cos_d函数的定义,模型der_func_test就可以正常求解。