Collection of models that illustrate model use and test models
Information
This package contains examples for the use of models that can be found in
Annex60.Utilities.Math.Functions.
Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).
Package Content
Name |
Description |
CubicHermite
|
Test problem for cubic hermite splines |
InverseXDerivativeCheck
|
Model that checks the correct implementation of the 1st order derivative of InverseXRegularized |
InverseXDerivative_2_Check
|
Model that checks the correct implementation of the 2nd order derivative of InverseXRegularized |
InverseXRegularized
|
Test problem for function that replaces 1/x around the origin by a twice continuously differentiable function |
IsMonotonic
|
Tests the correct implementation of the function isMonotonic |
Polynomial
|
|
PowerLinearized
|
Test problem for function that linearizes y=x^n below some threshold |
RegNonZeroPower
|
|
RegNonZeroPowerDerivativeCheck
|
|
RegNonZeroPowerDerivative_2_Check
|
|
RegStep
|
Example for inlined regStep function |
SmoothExponentialDerivativeCheck
|
|
SpliceFunction
|
|
SpliceFunctionDerivativeCheck
|
|
TrapezoidalIntegration
|
Tests the correct implementation of the function trapezoidalIntegration |
Test problem for cubic hermite splines
Information
This example demonstrates the use of the function for cubic hermite interpolation
and linear extrapolation.
The example use interpolation with two different settings: One settings
produces a monotone cubic hermite, whereas the other setting
does not enforce monotonicity.
The resulting plot should look as shown below, where for better visibility, the support points have been marked with black dots.
Notice that the red curve is monotone increasing.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
Real | xd[:] | {-1,1,5,6} | Support points |
Real | yd[size(xd, 1)] | {-1,1,2,10} | Support points |
Real | d[size(xd, 1)] | | Derivatives at the support points |
Real | dMonotone[size(xd, 1)] | | Derivatives at the support points |
Boolean | ensureMonotonicity | true | |
Modelica definition
model CubicHermite
extends Modelica.Icons.Example;
parameter Real[:] xd={-1,1,5,6} ;
parameter Real[
size(xd, 1)] yd={-1,1,2,10} ;
parameter Real[
size(xd, 1)] d(
each fixed=false)
;
parameter Real[
size(xd, 1)] dMonotone(
each fixed=false)
;
parameter Boolean ensureMonotonicity=true;
Real x ;
Real y ;
Real yMonotone ;
Integer i ;
initial algorithm
d :=
Annex60.Utilities.Math.Functions.splineDerivatives(
x=xd,
y=yd,
ensureMonotonicity=false);
dMonotone :=
Annex60.Utilities.Math.Functions.splineDerivatives(x=xd, y=yd,
ensureMonotonicity=true);
algorithm
x := xd[1] + time*1.2*(xd[
size(xd, 1)] - xd[1]) - 0.5;
i := 1;
for j
in 1:
size(xd, 1) - 1
loop
if x > xd[j]
then
i := j;
end if;
end for;
y :=
Annex60.Utilities.Math.Functions.cubicHermiteLinearExtrapolation(
x=x,
x1=xd[i],
x2=xd[i + 1],
y1=yd[i],
y2=yd[i + 1],
y1d=d[i],
y2d=d[i + 1]);
yMonotone :=
Annex60.Utilities.Math.Functions.cubicHermiteLinearExtrapolation(
x=x,
x1=xd[i],
x2=xd[i + 1],
y1=yd[i],
y2=yd[i + 1],
y1d=dMonotone[i],
y2d=dMonotone[i + 1]);
end CubicHermite;
Model that checks the correct implementation of the 1st order derivative of InverseXRegularized
Information
This model validates the implementation of
Annex60.Utilities.Math.Functions.inverseXRegularized
and its first order derivative
Annex60.Utilities.Math.Functions.BaseClasses.der_smoothTransition.
If the derivative implementation is wrong, the simulation will stop with an error.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
Real | delta | 0.7 | Smoothing coefficient |
Modelica definition
model InverseXDerivativeCheck
extends Modelica.Icons.Example;
constant Real gain = 4 ;
parameter Real delta = 0.7 ;
Real x ;
Real y_comp ;
Real y ;
Real err ;
initial equation
y = y_comp;
equation
x = time^3*gain;
y =
Annex60.Utilities.Math.Functions.inverseXRegularized(
x = x,
delta = delta);
der(y_comp) =
Annex60.Utilities.Math.Functions.BaseClasses.der_inverseXRegularized(x=x,delta=delta,x_der=
der(x));
err = y-y_comp;
assert(
abs(err) < 1E-3, "Error in implementation.");
end InverseXDerivativeCheck;
Model that checks the correct implementation of the 2nd order derivative of InverseXRegularized
Information
This model validates the implementation of
Annex60.Utilities.Math.Functions.inverseXRegularized
and its second order derivative
Annex60.Utilities.Math.Functions.BaseClasses.der_2_smoothTransition.
If the derivative implementation is wrong, the simulation will stop with an error.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
Real | delta | 0.7 | Smoothing coefficient |
Modelica definition
model InverseXDerivative_2_Check
extends Modelica.Icons.Example;
constant Real gain = 4 ;
parameter Real delta = 0.7 ;
Real x ;
Real y_comp ;
Real y ;
Real der_y_comp ;
Real der_y ;
Real err ;
Real der_err ;
initial equation
y = y_comp;
der_y = der_y_comp;
equation
x = time^3*gain;
y =
Annex60.Utilities.Math.Functions.inverseXRegularized(
x = x,
delta = delta);
der_y =
der(y);
der_y_comp =
der(y_comp);
der(der_y) =
der(der_y_comp);
err = y-y_comp;
der_err = der_y-der_y_comp;
assert(
abs(err) < 1E-3, "Error in implementation.");
assert(
abs(der_err) < 1E-3, "Error in implementation.");
end InverseXDerivative_2_Check;
Test problem for function that replaces 1/x around the origin by a twice continuously differentiable function
Information
This example tests the implementation of
Annex60.Utilities.Math.Functions.inverseXRegularized.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
Real | delta | 0.5 | Small value for approximation |
Modelica definition
model InverseXRegularized
extends Modelica.Icons.Example;
Real x ;
parameter Real delta = 0.5 ;
final parameter Real deltaInv = 1/delta ;
final parameter Real a = -15*deltaInv ;
final parameter Real b = 119*deltaInv^2 ;
final parameter Real c = -361*deltaInv^3 ;
final parameter Real d = 534*deltaInv^4 ;
final parameter Real e = -380*deltaInv^5 ;
final parameter Real f = 104*deltaInv^6 ;
Real y ;
Real xInv ;
Real dy_dt ;
Real d2y_dt2 ;
equation
x=2*time-1;
xInv =
if (
abs(x) > 0.1)
then 1 / x
else 0;
y =
Annex60.Utilities.Math.Functions.inverseXRegularized(
x=x,
delta=delta, deltaInv=deltaInv,
a=a, b=b, c=c, d=d, e=e, f=f);
dy_dt=
der(y);
d2y_dt2=
der(dy_dt);
end InverseXRegularized;
Tests the correct implementation of the function isMonotonic
Information
This example tests the correct implementation of the function
Annex60.Utilities.Math.Functions.isMonotonic.
If the function is implemented incorrect, the example will stop
with an error.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model IsMonotonic
extends Modelica.Icons.Example;
Real x_incStrict[3] = {0, 1, 2} ;
Real x_notMon[3] = {0, 3, 2} ;
Real x_incWeak[4] = {0, 1, 1, 2} ;
Real x_notWeak[4] = {0, 3, 3, 2} ;
Real x_decStrict[3] = {2.5, 2, 0.1} ;
Real x_decWeak[4] = {3, 1, 1, 0.5} ;
equation
assert(
Annex60.Utilities.Math.Functions.isMonotonic(x_incStrict, strict=false),
"Error. Function should have returned true.");
assert(false ==
Annex60.Utilities.Math.Functions.isMonotonic(x_notMon, strict=false),
"Error. Function should have returned true.");
assert(
Annex60.Utilities.Math.Functions.isMonotonic(x_incWeak, strict=false),
"Error. Function should have returned true.");
assert(false ==
Annex60.Utilities.Math.Functions.isMonotonic(x_notWeak, strict=false),
"Error. Function should have returned true.");
assert(
Annex60.Utilities.Math.Functions.isMonotonic({2.5, 2, 0.1}, strict=false),
"Error. Function should have returned true.");
assert(
Annex60.Utilities.Math.Functions.isMonotonic({3, 1, 1, 0.5}, strict=false),
"Error. Function should have returned true.");
assert(
Annex60.Utilities.Math.Functions.isMonotonic(x_incStrict, strict=true),
"Error. Function should have returned true.");
assert(false ==
Annex60.Utilities.Math.Functions.isMonotonic(x_notMon, strict=true),
"Error. Function should have returned true.");
assert(false ==
Annex60.Utilities.Math.Functions.isMonotonic(x_incWeak, strict=true),
"Error. Function should have returned true.");
assert(false ==
Annex60.Utilities.Math.Functions.isMonotonic(x_notWeak, strict=true),
"Error. Function should have returned true.");
assert(
Annex60.Utilities.Math.Functions.isMonotonic(x_decStrict, strict=true),
"Error. Function should have returned true.");
assert(false ==
Annex60.Utilities.Math.Functions.isMonotonic(x_decWeak, strict=true),
"Error. Function should have returned true.");
end IsMonotonic;
Information
This example verifies the correct implementation of
Annex60.Utilities.Math.Functions.polynomial.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model Polynomial
extends Modelica.Icons.Example;
Real x ;
equation
x=
Annex60.Utilities.Math.Functions.polynomial(x=time^3-2, a={2, 4, -4, 5});
end Polynomial;
Test problem for function that linearizes y=x^n below some threshold
Information
This example tests the implementation of
Annex60.Utilities.Math.Functions.powerLinearized.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model PowerLinearized
extends Modelica.Icons.Example;
Real T4(start=300^4) ;
Real T ;
Real TExact ;
equation
T = (1+500*time);
T =
Annex60.Utilities.Math.Functions.powerLinearized(x=T4, x0=243.15^4, n=0.25);
TExact =
abs(T4)^(1/4);
end PowerLinearized;
Information
This example tests the implementation of
Annex60.Utilities.Math.Functions.regNonZeroPower.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model RegNonZeroPower
extends Modelica.Icons.Example;
Real y ;
equation
y=
Annex60.Utilities.Math.Functions.regNonZeroPower(
time, 0.3, 0.5);
end RegNonZeroPower;
Information
This example checks whether the function derivative
is implemented correctly. If the derivative implementation
is not correct, the model will stop with an assert statement.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
Real | n | 0.33 | Exponent |
Real | delta | 0.1 | Abscissa value where transition occurs |
Modelica definition
model RegNonZeroPowerDerivativeCheck
extends Modelica.Icons.Example;
parameter Real n=0.33 ;
parameter Real delta = 0.1 ;
Real x;
Real y;
initial equation
y=x;
equation
x=
Annex60.Utilities.Math.Functions.regNonZeroPower(
time^3,n, delta);
der(y)=
der(x);
assert(
abs(x-y) < 1E-2, "Model has an error");
end RegNonZeroPowerDerivativeCheck;
Information
This example checks whether the function derivative
is implemented correctly. If the derivative implementation
is not correct, the model will stop with an assert statement.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
Real | n | 0.33 | Exponent |
Real | delta | 0.7 | Smoothing coefficient |
Modelica definition
model RegNonZeroPowerDerivative_2_Check
extends Modelica.Icons.Example;
parameter Real n=0.33 ;
constant Real gain = 4 ;
parameter Real delta = 0.7 ;
Real x ;
Real y_comp ;
Real y ;
Real der_y_comp ;
Real der_y ;
Real err ;
Real der_err ;
initial equation
y = y_comp;
der_y = der_y_comp;
equation
x = time^3*gain;
y =
Annex60.Utilities.Math.Functions.regNonZeroPower(
x = x,
n = n,
delta = delta);
der_y =
der(y);
der_y_comp =
der(y_comp);
der(der_y) =
der(der_y_comp);
err = y-y_comp;
der_err = der_y-der_y_comp;
assert(
abs(err) < 1E-3, "Error in implementation.");
assert(
abs(der_err) < 1E-3, "Error in implementation.");
end RegNonZeroPowerDerivative_2_Check;
Example for inlined regStep function
Information
This example tests the implementation of
Annex60.Utilities.Math.Functions.regStep.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model RegStep
extends Modelica.Icons.Example;
Real y ;
equation
y=
Annex60.Utilities.Math.Functions.regStep(time, 1, -1, 1e-5);
end RegStep;
Information
This example checks whether the function derivative
is implemented correctly. If the derivative implementation
is not correct, the model will stop with an assert statement.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
Real | delta | 0.5 | Smoothing area |
Modelica definition
model SmoothExponentialDerivativeCheck
extends Modelica.Icons.Example;
parameter Real delta = 0.5 ;
Real x ;
Real y ;
Real y_comp ;
Real ex ;
Real err ;
initial equation
y=y_comp;
equation
x = time^3;
y_comp=
Annex60.Utilities.Math.Functions.smoothExponential(
x=x, delta=delta);
der(y)=
der(y_comp);
err = y_comp-y;
assert(
abs(err) < 1E-2, "Model has an error");
ex=
exp(-
abs(x));
end SmoothExponentialDerivativeCheck;
Information
This example checks whether the function derivative
is implemented correctly. If the derivative implementation
is not correct, the model will stop with an assert statement.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model SpliceFunction
extends Modelica.Icons.Example;
Real y ;
equation
y=
Annex60.Utilities.Math.Functions.spliceFunction(
pos=10, neg=-10, x=time-0.4, deltax=0.2);
end SpliceFunction;
Information
This example checks whether the function derivative
is implemented correctly. If the derivative implementation
is not correct, the model will stop with an assert statement.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
Real | delta | 0.2 | Smoothing area |
Modelica definition
model SpliceFunctionDerivativeCheck
extends Modelica.Icons.Example;
parameter Real delta = 0.2 ;
Real deltax ;
Real x ;
Real y ;
Real y_comp ;
Real err ;
initial equation
y=y_comp;
equation
x = time^3;
deltax=delta*10*time^8+0.1;
y=
Annex60.Utilities.Math.Functions.spliceFunction(
pos=10*x^3,
neg=-10*x^2,
x=x,
deltax=deltax);
der(y)=
der(y_comp);
err = y-y_comp;
assert(
abs(err) < 1E-2, "Model has an error");
end SpliceFunctionDerivativeCheck;
Tests the correct implementation of the function trapezoidalIntegration
Information
Tests the correct implementation of function
Annex60.Utilities.Math.Functions.trapezoidalIntegration.
Integrands y1[7]={72, 70, 64, 54, 40, 22, 0} are the function values of y = -2*x^2-72 for x = {0,1,2,3,4,5,6}. The trapezoidal integration over the 7 integrand points should give a result of 286.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model TrapezoidalIntegration
extends Modelica.Icons.Example;
Real y1[7] = {72, 70, 64, 54, 40, 22, 0};
Real y ;
algorithm
y :=
Annex60.Utilities.Math.Functions.trapezoidalIntegration(N=7, f=y1, deltaX=1);
assert(y - 286.0 < 1E-4,
"Error. Function should have returned 286.");
end TrapezoidalIntegration;
http://iea-annex60.org