我在 Modelica 中制作了包角代码,如下所示。
thetta_eq=mod(thetta, 720);
Run Code Online (Sandbox Code Playgroud)
thetta 不断增加 0 到无限角,thetta_eq 是包裹角 0 到 720deg。
但是,当我区分包裹角时会出现问题。
此外,我无法在 Modelica 标准库 3.2.3 中使用 wrapangle 块,因为我必须使用 3.2.2 版本。
有没有人有解决这个问题的方法?代码、逻辑还是选项?
我已经知道当角度从 720 度下降到 0 度时无法区分,因为它是不连续的。
所以,我想问的是使它即使在下降区域也是连续的。
实际上,上图是 sigmoid 函数,我想当包角下降 720 到 0 度时我可以使用这个函数。
如果我使 sigmoid 函数的倾斜度非常高,我认为这可以像原始包角一样起作用。并且导数不是无限的或无限的,因此可以微分。
你怎么想?以及我如何为这个想法制定逻辑?
ps) 非常感谢您的回复!
就像 matth 评论的那样,您无法区分具有不连续性的变量。当 theta 从 720 跳到 0 时,您对导数有什么期望?
您可以使用原始角度的导数,而不是使用包裹角。
model Demo
Modelica.SIunits.Angle theta = 100*sin(time);
Modelica.SIunits.Angle theta_wrap;
Modelica.SIunits.AngularVelocity w;
equation
w = der(theta);
theta_wrap=mod(theta, 2*Modelica.Constants.pi);
end Demo;
Run Code Online (Sandbox Code Playgroud)
注意:我为 theta 使用了正确的 SIunit 类型,所以我必须包裹到 2*pi 弧度,而不是 720 度。
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |