How do I force a zero value in Simscape language
    2 ビュー (過去 30 日間)
  
       古いコメントを表示
    
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))
0 件のコメント
採用された回答
  Sebastian Castro
    
 2016 年 3 月 25 日
        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
その他の回答 (0 件)
参考
カテゴリ
				Help Center および File Exchange で Brakes and Detents についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

