Ass*_*ero 6 solver numerical-integration ode modelica openmodelica
我想从数字的角度理解混合建模(特别是状态事件)背后的一般思路(虽然我不是数学家:)).鉴于以下Modelica模型:
model BouncingBall
constant Real g=9.81
Real h(start=1);
Real v(start=0);
equation
der(h)=v;
der(v)=-g;
algorithm
when h < 0 then
reinit(v,-pre(v));
end when;
end BouncingBall;
Run Code Online (Sandbox Code Playgroud)
我理解的概念when和reinit.
when声明中的等式仅在条件成立时才有效吗?2sec.由于我使用多步求解器,这意味着求解器"超过2秒",识别出h<0(假设在模拟time = 2.5sec中h = -0.7).这是什么意思"使用交叉函数搜索事件的时间?是否有简单的解释(示例)?pre()在这种情况下,操作意味着什么?noEvent():"表达式是字面意义而不是生成交叉函数.由于没有交叉函数,因此没有要求表达式可以在事件限制之外进行评估":这是什么意思?给出与弹跳球相同的例子:求解器在时间2.5检测到h = 0.7.有没有区别noEvent()?pre(x) 在事件之前设置为x的值.noEvent(h<0)基本上意味着将表达式评估为没有交叉函数的所有钟声和口哨.你不能使用when noEvent(h<0) then还有许多附加要点:如果您熟悉Sturm序列或控制理论,您可能会发现没有必要插入公式来确定它是否在一个区间内交叉为零(有些工具使用它).功能不一定平滑的事实使其更复杂,并且还意味着不能使用衍生测试.求解器重置的程度取决于求解器的类型.一步求解器(Runge-Kutta)可以直接重新启动,就像几乎没有发生任何事情一样,而多步求解器(BDF/Adams - 例如dassl/lsodar/cvode)需要从较低阶和较小步长开始.