gpt4 book ai didi

modelica - 在 Modelica 中生成三角波函数的问题

转载 作者:行者123 更新时间:2023-12-02 19:46:31 25 4
gpt4 key购买 nike

我正在尝试创建一个模型,其中一个 Modelica 变量是另一个变量的三角波。首先我尝试了 Floor() 函数,如下所示:

model test1
final constant Real pi=2*Modelica.Math.asin(1.0);
parameter Real b = 1;
parameter Real a = 1;
Real x,p,u;
equation
if sign(sin(x*pi/b))>=0 then
p=a*(x-b*floor(x/b));
else
p=a*(b-(x-b*floor(x/b)));
end if;
x=time;
u = floor(x/b);
end test1

(x=时间;是任意的,因此模型可以编译)

但结果很奇怪,如下所示 enter image description here

放大:

enter image description here

不知何故,在下一步之前 0.005 秒,下限函数表现出意外,并成为以下一个值结尾的线性函数。

enter image description here

然后我尝试了 ceil() 函数。一切似乎都是正确的,直到我意识到 ceil() 函数在其他值(例如 x=13)时也会发生同样的问题

如果您可以的话,我将不胜感激:

  1. 帮助我了解为什么会出现此“故障”以及这是故意设计的还是错误?
  2. 我该如何解决这个问题?
  3. 是否有其他方法可以创建三角波函数?

附注我正在使用这个“波函数”来模拟两个锯齿状物体之间的相互作用”

最佳答案

如果您被允许使用 Modelica 标准库,您可以使用具有线性插值和周期性外推的 CombiTimeTable 模块构建参数化、基于时间的锯齿形信号。例如,

model Test4
parameter Real a=2 "Amplitude";
parameter Real b=3 "Period";
Real y=zigzag.y[1] "Zigzag";
Modelica.Blocks.Sources.CombiTimeTable zigzag(
table=[0,0;b/4,a;b/4,a;b/2,0;b/2,0;3*b/4,-a;3*b/4,-a;b,0],
extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic)
annotation(Placement(transformation(extent={{-80,60},{-60,80}})));
Modelica.Blocks.Sources.Trapezoid trapezoid(
amplitude=2*a,
rising=b/2,
width=0,
falling=b/2,
period=b,
offset=-a)
annotation(Placement(transformation(extent={{-80,25},{-60,45}})));
annotation(uses(Modelica(version="3.2.2")));
end Test4;

关于modelica - 在 Modelica 中生成三角波函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42138669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com