第90回

90. <エクセルでもできるシミュレーション (1)改訂>

これ間違っていました、ある方からメールで指摘していただき気が付きました、ありがとうございました。
間違っているのは積分の順番で、今の加速度を求めてそれと一瞬前の速度と、変位を合わせて積分してました。
これじゃ今と一瞬前がごっちゃになってます。一瞬前に微小時間の変化分を加えての積分なのに今の値を使ったら未来の先取りになってました。
まず全部一瞬前の値(加速度、速度、変位)を使って積分して今の速度、変位を出し、今の加速度は今の変位から微分方程式から求めて加速度、速度、変位が「今」で統一されてないといけません。 間違った方法でも計算はできますしそれらしい答えになってます、でも細かく細かく見ていくと「あれっ力が掛かった瞬間にもう動いてる、動くのは速度が出て変位がです次の次のステップでしょう」みたいなことが起きます。
では訂正です、間違ってた解説と図は残しておきますので正誤で比べてみてください。

第90回間違った回で次のように書きました、『時間シミュレーションは簡単な計算をすごく細かい時間きざみで計算するだけです、「今」は「一瞬前」の状態に「一瞬前から今への変化」を足した状態です、 それを「今」から「一瞬先」、「そのまた一瞬先」と繰り返して計算するのがシミュレーションです。』 これ考え方は合っているんですが実際の計算方法が違っていました。
ちなみにこの積分の方法をオイラー法(Euler method)と言うそうです、長所は簡単な点ですがステップ入力のような不連続な変化で発散しやすい欠点があります、このため計算ステップΔtを小さくする必要があり計算負荷が高くなります。
安定性の高い計算法にルンゲクッタ法(Runge-Kutta method)というのがありますがちょっと難しいですね。

======== 説明を以下に差し替えます=========

今回はその考え方と計算の流れを説明します。
時間シミュレーションの考え方はこんな風です、ある時刻の状態から時間で積分して次の時刻の状態を計算する
1. 加速度を積分すると「新しい速度」が求められる
2. 速度を積分すると「新しい変位」が求められる
3. 「新しい変位」からマスに掛かる力を計算し質量で割って加速度を求める
4. 以下1-3の繰り返し
積分っていう言葉で引いちゃってる人がいると思いますが心配ありません、微小時間で計算する限り微分、積分はただの割り算、掛け算です。
変位を時間で割れば速度ですね、もう一回時間で割れば加速度です、これが微分です。
逆に加速度に時間を掛ければ速度、もう一回時間を掛ければ変位です、これが積分です、そんだけのことです。
複雑な曲線も短い直線をいくつもつないで書けると同じでどれだけ変位が複雑でも微小な時間では直線運動です、だから単純に微小時間で割ったり掛けたりできます。
この時間が長いとその時間の中で曲線になってしまってうまくないので計算は細かい時間きざみでしないといけないのです。
では上の1~3のステップを説明します、モデルは今まで使ってきた1自由度のマスばねモデルです、一番シンプルなモデルです。
モデル図の下にある式、これが1自由度のマスばねの微分方程式になります、慣性力と減衰力とばね力が釣り合ってますよ、という式です。
慣性力は加速度の関数、減衰力は速度の関数、ばね力は変位の関数、そういうわけで積分が出てきちゃうわけです。
入力は路面から“Z“として入力されます、形状はステップ入力、つまりは階段の1段みたいな入力です、求めるのはマスの動きです。
図の右側を見てください。
時刻(a)
あるとき(a)の加速度、速度、変位の3点セットがあります。
時刻(b)
時刻(b)は時刻(a)からΔtだけ進んだ状態です
まず加速度を積分して速度を求めます、使うのは時刻(a)の加速度と速度です。
<速度>に<加速度>xΔt(=速度の変化分)を加えます、一瞬前の値に変化分を加えたのが今の値ですね
次は速度の積分で変位ですが上と同じことです、時刻(a)の速度と変位を使います、ここが前回間違えたところです
<変位>に<速度>xΔt(変位の変化)を加えます。
最後に新たに得られた速度、変位から加速度を求めます
これで(b)の新しい加速度、速度、変位の3点セットがそろいました。
あとはひたすらこれの繰り返しです。
次回実際にエクセルを作ってマスの変位を計算してみます。
==============================

Copyright(C) 2007-    富樫研究開発