function
LieGroups.SE23.Quat.mixed_increment_coefficients
Rotation coefficients C1, C2, C3 of the mixed exponential increment block
C1 = (1-cos t)/t^2, C2 = (t-sin t)/t^3, C3 = (t^2/2 + cos t - 1)/t^4,
with t^2 the input. These are the coefficients that appear in the increment
block N of the closed-form mixed exponential; branch radius and retained
series match exp_mixed term for term, so the two agree exactly.
Public declarations
Explicit source declarations; dimensions, modifications and defaults are shown as written, without evaluation.
| Role | Name | Type | Dimensions / attributes / default | Description |
|---|---|---|---|---|
| input | theta_sq | Real | | Squared magnitude of the algebra element's rotation part |
| output | C | Real | [3] | {C1, C2, C3} |
Modelica declarations and implementation
Show parameters, interfaces and source
Parameters, inputs, outputs, defaults and equations from the source file.
function mixed_increment_coefficients
"Rotation coefficients C1, C2, C3 of the mixed exponential increment block"
input Real theta_sq "Squared magnitude of the algebra element's rotation part";
output Real C[3] "{C1, C2, C3}";
protected
Real theta;
// Below 0.1 rad the retained series error is negligible, while the closed
// coefficients lose their numerators to cancellation in single-precision
// generated code. This is the same branch radius exp_mixed uses.
constant Real eps = 1e-2;
algorithm
if theta_sq < eps then
C := {0.5 - theta_sq / 24.0,
1.0/6.0 - theta_sq / 120.0, 1.0/24.0 - theta_sq / 720.0};
else
theta := sqrt(theta_sq);
C := {(1.0 - cos(theta)) / theta_sq,
(theta - sin(theta)) / (theta_sq * theta),
(theta_sq/2.0 + cos(theta) - 1.0) / (theta_sq * theta_sq)};
end if;
annotation(Documentation(info="<html>
<p>C1 = (1-cos t)/t^2, C2 = (t-sin t)/t^3, C3 = (t^2/2 + cos t - 1)/t^4,
with t^2 the input. These are the coefficients that appear in the increment
block N of the closed-form mixed exponential; branch radius and retained
series match <code>exp_mixed</code> term for term, so the two agree exactly.</p>
</html>"));
end mixed_increment_coefficients;