Modelica 和 SIMULINK 产生完全不同的结果

计算科学 matlab 开放模型
2021-12-20 08:30:43

我正在尝试模拟两个物体相互滑动的一维模型,两者之间存在库仑摩擦。

在此处输入图像描述

正如我在这里解释的那样,我将摩擦建模为:

  1. 保持两个物体粘附所需的力Fa12=m2F1m1F2m1+m2
  2. 动摩擦力Ffk12=Sign(v1v2)μkFn12
  3. 最大静摩擦力Ffs12=μsFn12
  4. Ff12={ifv1=v2and|Fa12|<Ffs12thenFa12elseFfk12

考虑值为我实现了模型在模型语言中为:μs=0.3μk=0.2Fn12=3m1=1m2=2F1=2sin(5t)F2=2sin(7t)

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;

这是的结果:x1x2

在此处输入图像描述

我在 SIMULINK 中建模了完全相同的东西(在此处下载 .slx 模型),结果完全不同: 在此处输入图像描述

为什么我得到两个完全不同的结果?!我在实现中是否犯了错误,或者差异是由于这两个程序使用不同的求解器?在那种情况下我应该相信哪一个?!

PS 我刚刚意识到 Wolfram SystemModeler 求解器有问题。当我在 OponModelica 中进行模拟时,结果更相似。

1个回答

将求解器切换到CVODES或将容差收紧到 1e^-8。 在此处输入图像描述

执行其中一项更改会导致: 在此处输入图像描述