2

OpenModelica と Dymola のイベント処理について質問があります。次のモデルは、入力信号を特定のしきい値に制限します。これは、log() の負の引数を避けるために必要です。そのため、イベントが作成され、イベントが true になると、引数 'l' の変数が変更されます。

私が理解している限り、DASSL ソルバーはイベントを認識し、そのステップ サイズを自動的に調整して、イベントを正しく解決する必要があります。指定された間隔の数は、出力に保存されるポイントの数を定義するためにのみ使用されます。

モデル 'CompleteModel' を Dymola で DASSL を使用して 10 秒間、100 間隔で解くと問題なく動作し、変数 'l' は 0.05 に制限されます。10 間隔のみでモデルを解くと失敗します。奇妙なことに、OpenModelica の DASSL は、与えられた間隔の数に関係なく、モデルを正しく解決します。

この動作は期待できますか? Dymola と OpenModelica の DASSL ソルバーに大きな違いはありますか? 私の意見では、DASSL を使用したモデルの正しいソリューションは、(保存された) 間隔の数とは無関係である必要があります (OpenModelica の場合と同様)。

package EventHandling

 model LimitSignal
  Real l;
  Real lmin(start = 1, fixed = true);
  Real x;
  Boolean Event(start = false, fixed = true);
  input Real InputSignal;
 algorithm 
  when InputSignal <= 0.05 then
   Event := true;
   lmin := pre(InputSignal);
  end when;
 equation 
  l = if Event then lmin else InputSignal;
  x = log(l);
 end LimitSignal;

 model RampSignal
  parameter Real start = 1;
  parameter Real height = 2;
  parameter Real Time = 10;
  output Real y;
 equation 
  y = 1 - (height/Time)*time;
 end RampSignal;

 model CompleteModel
  LimitSignal EventHandling(InputSignal = Signal.y);
  RampSignal Signal;
 end CompleteModel;

end EventHandling;
4

1 に答える 1

3

DASSL ソルバーは異なります。OpenModelica にはさまざまな DASSL ソルバーがあるため、OpenModelica 自体も異なります。OpenModelica dassl コードは、daskr (以前は ddasl) に基づいています。オプションには次のようなものがあります。

dasslJacobian=[coloredNumerical (default)|numerical|internalNumerical|coloredSymbolical|symbolical]
dasslnoRootFinding
dasslnoRestart
maxStepSize
maxIntegrationOrder

イベント処理は数値積分器とは別に行われるため、ツールごとに異なる方法で行われます。出力間隔を変更すると、OpenModelica の動作も異なります。これは、公称ステップ サイズ/イプシロン値などを決定するヒューリスティックとして使用されるためです。

しかし、はい、可変ステップ ソルバーを使用して正しい解を得ることができるはずです。

注: OpenModelica で試してみましたが、stopTime=10, numberOfIntervals=10 は dassl でも失敗します。アサーションの時点まで値をプロットするだけです。したがって、time=4.5 に達し、time=5.0 (アサーション トリガー) にステップしようとし、time=6.0 (アサーション トリガー) を試行し、time=5.25 (アサーション トリガー) を試行し、あきらめます。OpenModelica が早期にあきらめる理由は、収束エラーやイベントではなくアサーションをトリガーするためです。おそらくバグです。

于 2015-02-20T20:59:47.827 に答える