How do I force a zero value in Simscape language

2 views (last 30 days)
I have the following equation inside my custom Simscape block.
Mloc == sqrt( (Pratio^(gm1/-A.gam) * (1+(gm1/2)*Minf^2) - 1) * (2/gm1) );
I am encountering an issue where Pratio is near 1.0 and Minf is near zero, however rounding errors are causing the value inside the sqrt to become negative. How do I force the value inside the sqrt to remain non-negative? Here are some example numbers showing this situation.
sqrt(((14.715780533017/14.715780064774)^(0.4/-1.4) * (1+(0.4/2)*0.0001079^2) - 1) * (2/0.4))

Accepted Answer

Sebastian Castro
Sebastian Castro on 25 Mar 2016
I would start off by changing the equations to something like
let
X = (Pratio^(gm1/-A.gam) * (1+(gm1/2)*Minf^2) - 1) * (2/gm1);
in
if X >= 0
Mloc == sqrt(X);
else
Mloc == {0,'appropriate_unit'};
end
end
In reality, most Simscape language blocks will have some sort of "smoothing" to prevent the sharp discontinuity -- usually a linear ramp down to zero over some threshold range (see, e.g., the Translational/Rotational friction blocks). You can try that further step if you run into problems, though.
- Sebastian

More Answers (0)

Categories

Find more on Brakes and Detents in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!