指数関数型の成長

フィードバックと指数関数

フィードバックがあるということは、ある量 X が変化すると、 それが、何かを介して、X 自体の変化を引きおこすということである。

この特徴をもつ数理モデルのうちで、いちばん単純な微分方程式でかけるものは、 次のように、Xの変化 (Xの時間による微分) が X自体に比例するものである(ただし a は定数)。

d X / d t = a X ... (1)

この解は、
X = X0 ea t
同じことであるが、
X = X0 exp( a t )
という形になる。ここでexpは指数関数、X0は時刻t = 0での Xの値である。

a の値が正なら、Xの絶対値は時間とともにどんどん大きくなっていく。 しかも、その大きくなりかた(時間あたりの変化)自体も、同じ形で 大きくなる。

a の値が負なら、Xの絶対値は時間とともに0に近づいていく。 しかし、0に一致はしない。

現実に起こる現象では、量が指数関数型に無限に大きくなることはない。 それは、質量保存、エネルギー保存、エントロピー増大などの制約を受ける からである。 そのような現象を表わす式は、Xの絶対値が小さいあいだは(1)式で近似できる かもしれないが、それが大きくなるにつれて、(1)式で近似する際に省略した 項が重要になる(あるいは、a が定数とみなせなくなる)。

feedback_exponential.png

(「ふろおけモデル」については[別ページ]参照。)


指数関数型成長(または減衰)の例題

このページでは、ひとまず、 物理量ではなく「数」の問題として考える。したがって、量の単位は出てこない。 時間は出てくるが、無次元化された時間 (現実の時間を 時間という次元をもつ定数 でわったもの) と考えてほしい。

変数 v の値が、時間 t によって変わる。変わりかたがつぎの法則にしたがうばあいを考える。

dv/dt = g v 【g は定数】

これは微分方程式としてとくことができ、解は指数関数で書ける。

v(t) = v(0) exp(g t)

差分計算

しかし、もうすこし複雑な問題の準備として、わざと、時間間隔 Δt きざみで計算してみる。 右辺にでてくる v は、各時間区間のはじめの時点での値を使うことにする (わたしの知っている専門用語では「前方差分」。 別の教材ページ 「数値計算の教材: 時間発展問題の差分計算」で説明している。)

(v(t+Δt) - v(t))/Δt = g v(t)

v(t+Δt) = v(t) + Δt g v(t)

Pythonによる計算

exp_growth.png

プログラム例では、v(0) = 100, g は 0.02, -0.02, 0 の3とおり、Δt = 2 とした。 これらの数値は、プログラム内に書きこんである。それを変更すると結果も変わる。

3とおりのΔtきざみの時間発展計算それぞれに対応して、 微分方程式としての解(「解析解」)の式に数値を代入した値も計算した。 解析解のほうの変数名に「true」という表現を使ってしまったが、 厳密には真の解ではなくその浮動小数点計算による近似値である。 グラフでは、Δtきざみの時間発展計算結果を、〇、△、+の記号列で、 解析解を線であらわすようにした。


2021-06-18
増田 耕一 (MASUDA Kooiti)
[計算機を利用した気象分野の実習の教材]