-
Notifications
You must be signed in to change notification settings - Fork 162
Function Derivatives
Michael Wetter edited this page Feb 17, 2014
·
4 revisions
For some functions, a Modelica translator may not be able to differentiate the function symbolically. In this situation, a user can implement the derivative of the function to avoid the need for numerical differentiation. How to implement the derivative of a function is described in the Modelica Language Specification. An example implementation can be found in Buildings.Utilities.Math.Functions.polynomial.
When providing a function derivative, a unit test must be provided that ensures that the implementation of the derivative is correct. A unit test need to fail if the provided derivative is incorrect. An example of such a unit test is Buildings.Utilities.Math.Functions.Examples.PolynomialDerivativeCheck, which is as follows
model PolynomialDerivativeCheck
Real x;
Real y;
initial equation
y=x;
equation
x=Buildings.Utilities.Math.Functions.polynomial(x=time-2, a={2, 4, -4, 5});
der(y)=der(x);
// Trigger an error if the derivative implementation is incorrect.
assert(abs(x-y) < 1E-2, "Model has an error.");
annotation(Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100
-100},{100,100}}), graphics),
Commands(ile="PolynomialDerivativeCheck.mos" "run"),
Documentation(info="<html>
<p>
This example checks whether the function derivative
is implemented correctly. If the derivative implementation
is incorrect, the model will stop with an assert statement.
</p>
</html>", revisions="<html>
<ul>
<li>
October 29, 2008, by Michael Wetter:<br>
First implementation.
</li>
</ul>
</html>"));
end PolynomialDerivativeCheck;