Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

跳ねるボールのシミュレーション

この例では、跳ねるボールの 2 つのモデルを使用して、Zeno 動作があるハイブリッド動的システムをモデル化する異なるアプローチを示します。Zeno 動作の簡略的な特徴として、特定の複合システムに対して一定の時間間隔で無限個のイベントが発生することが挙げられます。ボールがエネルギーを失うにつれ、連続したより短い時間間隔で地面と衝突するようになります。

ハイブリッド動的システム

跳ねるボールのモデルは、ハイブリッド動的システムの一例です。ハイブリッド動的システムとは、連続ダイナミクスに加え、システム ダイナミクスの変化と状態値のジャンプを伴う離散遷移を含むシステムです。跳ねるボールの連続ダイナミクスは、次の方程式で与えられます。

$$
\frac{d v}{d t} = -g,
$$

$$
\frac{d x}{d t} = v,
$$

ここで、$g$ は重力による加速度、$x(t)$ はボールの位置、$v(t)$ は速度です。システムには、位置 $x$ と速度 $v$ という 2 つの連続状態があります。

モデルの複合システムとしての側面は、ボールと地面の衝突のモデル化に由来しています。地面との部分的な弾性衝突を考えた場合、衝突前の速度 $v^-$ と衝突後の速度 $v^+$ は、ボールの反発係数 $\kappa$ により次のよう関連付けられます。

$$
v^+ = -\kappa v^-, \qquad x = 0
$$

したがって、跳ねるボールは、遷移条件 $x=0$ において連続状態 (速度) のジャンプを示します。次のイメージは、25 m の高さから速度 0 m/s で放たれるボールを示しています。

2 つの Integrator ブロックを使用した跳ねるボールのモデル化

sldemo_bounce_two_integrators モデルでは、2 つの Integrator ブロックを使用して跳ねるボールをモデル化します。左の Integrator ブロックは最初の方程式をモデル化した速度の積分器です。右の Integrator ブロックは位置の積分器です。位置の積分器の [ブロック パラメーター] ダイアログ ボックスを開き、このブロックで下限が 0 になっていることを確認します。この条件は、ボールが地面より下になることはないという制限を表します。

位置の積分器の状態端子と対応する比較結果は、ボールが地面に当たるタイミングを検出し、両方の積分器をリセットするために使用されます。速度の積分器の状態端子は、$v^+$ の計算に使用されます。

システムの Zeno 動作を観察するには、ソルバーのコンフィギュレーション パラメーターを変更します。

  1. [コンフィギュレーション パラメーター] ダイアログ ボックスを開くには、[モデル化] タブの [設定][モデル設定] をクリックします。

  2. [ソルバー] ペインを選択します。

  3. [終了時間]25 に設定します。

  4. [ソルバーの詳細] の横の矢印をクリックして追加のソルバー パラメーターを表示します。

  5. [ゼロクロッシング オプション][アルゴリズム][Nonadaptive] に設定します。

モデルをシミュレートします。

ボールが何度も地面に当たり、エネルギーを失うと、シミュレーションが [連続的なゼロクロッシングの数] の既定の限界である 1000 を超過します。

[コンフィギュレーション パラメーター] ダイアログ ボックスで、[アルゴリズム][Adaptive] に設定します。適応アルゴリズムにより、チャタリング動作に対して高度な処理が行われます。これで、システムを 20 秒を超えてシミュレートできるようになります。21 ~ 25 秒の間の状態のチャタリングがまだ大きく、20 秒前後に警告が発行されます。

Second-Order Integrator ブロックを使用した跳ねるボールのモデル化

sldemo_bounce モデルでは、1 つの Second-Order Integrator ブロックを使用して跳ねるボールをモデル化します。このモデルでは、2 番目の方程式 $dx/dt=v$ は Second-Order Integrator ブロックに内包されています。Second-Order Integrator のブロック ダイアログ ボックスを開くと、$x$ の下限が 0 になっています。[属性] タブで [Reinitialize dx/dt when x reaches saturation] を選択します。このパラメーターにより、$x$ が飽和制限に達した時点で $dx/dt$ (跳ねるボールのモデルの $v$) を新しい値に再初期化できます。つまり、跳ねるボールのモデルでは、ボールが地面に当たったときに、その速度を衝突後の速度などの別の値に設定できます。地面との衝突後の速度を計算するためのループに注意してください。衝突直前のボールの速度 $v^-$ を取得するには、Second-Order Integrator ブロックの $dx/dt$ 出力端子と Memory ブロックを使用します。その後、$v^-$ を使用して、跳ね返りの速度 $v^+$ を計算します。

[コンフィギュレーション パラメーター] ダイアログ ボックスで [ソルバー] ペインに移動します。

  • [シミュレーション時間][終了時間]25 に設定します。

  • [ソルバーの詳細] を展開します。[ゼロクロッシング オプション][アルゴリズム][Nonadaptive] に設定します。

モデルをシミュレートします。

シミュレーションでエラーが発生しないことを確認します。[アルゴリズム][Adaptive] に設定しなくても、20 秒後に過度のチャタリングを起こすことなく、モデルをシミュレートできます。

跳ねるボールをモデル化するアプローチの比較

各跳ね返りに必要な時間を合計することにより、速度が 0 になってボールが地面に停止するときの正確な時間 $t^*$ を解析的に計算できます。この時間は、次の式で表される無限等比級数の合計です。

$$ t^* = \frac{1}{g}\left(v_0+ v_1\left(\frac{1+\kappa}{1-\kappa}\right)
\right),\qquad v_1=\sqrt{v_0^2+2gx_0}, $$

ここで、$x_0$ および $v_0$ は、それぞれ位置と速度の初期条件です。ボールの速度および位置は、$t>t^*$ では恒等的に 0 でなければなりません。次の図は、両方のシミュレーションの $t^*$ 近辺の結果を示しています。プロットの垂直の赤い線は、指定されたモデル パラメーターに対する $t^*$ です。$t<t^*$ で、かつ $t^*$ から離れていると、どちらのモデルも正確な同じ結果を示します。プロットには 2 番目のモデルのマゼンタの線のみが示されています。しかし、最初のモデルのシミュレーション結果は $t^*$ 以降は不正確です。$t>t^*$ では過度のチャタリング動作が持続的にプロットに示されています。一方、Second-Order Integrator ブロックを使用したモデルは、$t > t^*$ において厳密に 0 に落ち着きます。

Second-Order Integrator ブロックを使用したモデルの方が最初のモデルに比べて優れた数値特性をもつ理由は、2 番目の微分方程式 $dx/dt=v$ が Second-Order Integrator ブロックに内包されていることにあります。ブロック アルゴリズムで、この関係を 2 つの状態の間で利用し、ヒューリスティックな方法を使用して特定の条件におけるチャタリング動作を排除できます。このようなヒューリスティックな方法は、積分の誤差とチャタリング動作により、2 つの状態の整合性が相互に失われた場合に有効です。このように、システムの物理的な知識を活用して、特定のクラスの Zeno モデルのシミュレーションが Zeno 状態に陥る状況を回避できます。

参考

| |

関連するトピック