我正在尝试模拟两个物体相互滑动的一维模型,两者之间存在库仑摩擦。
正如我在这里解释的那样,我将摩擦建模为:
- 保持两个物体粘附所需的力
- 动摩擦力
- 最大静摩擦力
考虑值为,,,,,,我实现了模型在模型语言中为:
model friction
//constants
parameter Real muk = 0.2;
parameter Real mus = 0.3;
parameter Real m1 = 1.0;
parameter Real m2 = 2.0;
parameter Real Fn12 = 3.0;
parameter Real absTol = 0.1;
//variables
Real X1, X2, V1, V2, A1, A2, F1, F2, Ff12, Fs12;
initial equation
X1 = 0;
X2 = 0;
V1 = 0;
V2 = 0;
equation
F1 = 2*sin(5 * time);
F2 = 2*sin(7 * time);
V1 = der(X1);
V2 = der(X2);
A1 = der(V1);
A2 = der(V2);
m1 * A1 = F1 - Ff12;
m2 * A2 = F2 + Ff12;
Fs12=(m2*F1-m1*F2)/(m1+m2);
if abs(V1 - V2) < absTol and abs(Fs12) < mus * Fn12 then
Ff12=Fs12;
else
Ff12 = muk * Fn12 * sign(V1 - V2);
end if;
end friction;
这是和的结果:
我在 SIMULINK 中建模了完全相同的东西(在此处下载 .slx 模型),结果完全不同:

为什么我得到两个完全不同的结果?!我在实现中是否犯了错误,或者差异是由于这两个程序使用不同的求解器?在那种情况下我应该相信哪一个?!
PS 我刚刚意识到 Wolfram SystemModeler 求解器有问题。当我在 OponModelica 中进行模拟时,结果更相似。



