| Download
All published worksheets from http://sagenb.org
Project: sagenb.org published worksheets
Views: 168739Image: ubuntu2004
Hiroshi TAKEMOTO([email protected])
微分方程式で解く硫黄島の戦い
大学時代数学セミナーに微分方程式で硫黄島の戦いがシミュレーションできるという記事がありました。そこで、Googleで「硫黄島の戦い」と「微分方程式」で検索すると、ランチェスターのモデルを使って 硫黄島の戦いを表した本:「微分方程式 その数学と応用」あることが分かりました。
また、Lanchester iwo jimaをキーワードとするとVerifying Lanchester's Combat Model Battle of Iwo Jimaが見つかり、クイック・ビューでその論文を見ることができました。 この論文では、
- xを米軍の兵士の数
- yを日本軍の兵士の数
微分方程式をsageで表現する
を任意の関数にすることは難しいので、として、一瞬で補強が完了するような式を sageを使って定義したのが以下の式です。微分方程式を解く
desolve_in_japaneseと同様に、以下の手順で微分方程式を解きます。- 微分方程式にラプラス変換を施し、微分方程式を変数t領域から変数s領域へ移します
- 得られた方程式は演算子の代数方程式となるので、代数計算により解を求める
- 求めたs 関数の解を逆ラプラス変換を用いてt の関数に変換する
s \mathcal{L}\left(x\left(t\right), t, s\right) - x\left(0\right) = -a \mathcal{L}\left(y\left(t\right), t, s\right) + c
s \mathcal{L}\left(y\left(t\right), t, s\right) - y\left(0\right) = -b \mathcal{L}\left(x\left(t\right), t, s\right)
X s - x_{0} = -Y a + c
Y s - y_{0} = -X b
[[X == (a*y0 - c*s - s*x0)/(a*b - s^2), Y == (b*c + b*x0 - s*y0)/(a*b - s^2)]]
\frac{{(a y_{0} - c s - s x_{0})}}{{(a b - s^{2})}}
\frac{{(b c + b x_{0} - s y_{0})}}{{(a b - s^{2})}}
{(c + x_{0})} \cosh\left(\sqrt{a} \sqrt{b} t\right) - \frac{\sqrt{a} y_{0} \sinh\left(\sqrt{a} \sqrt{b} t\right)}{\sqrt{b}}
y_{0} \cosh\left(\sqrt{a} \sqrt{b} t\right) - \frac{{(b c + b x_{0})} \sinh\left(\sqrt{a} \sqrt{b} t\right)}{\sqrt{a} \sqrt{b}}
係数の決定
論文では、a, bを以下のように求めています。最初は、bを求めます。 から となります。
戦闘開始時の日本軍の数は21,500人でほぼ全滅したことから、分子は、21,500とし、 米軍には、戦闘開始から終了までの兵士の数の記録が残っており、分母のであることが分かっています。
次にaですが、開戦から28日目で戦況が決まったことから、bの時と同様に ここで、であり、日本軍の日々の残留兵士の数の記録はありませんが、先のbを使って から求めることができます。 となります。
結果の出力
微分方程式の解をプロットしてみます。米軍の兵士の数をf1(t, a, b, c, x0, y0)の関数にセットし、プロットします。(このようにセットすることで設定を変えた結果をプロットすることができます)
米軍の兵士の数を実際の記録と重ね合わせてプロットしてみます。f1のtをずらし、x0, y0を再計算しながら計算します。
驚くほどよい一致が見られます。
参考までに、日本軍の兵士の推移も表示してみます。