(ただ今工事中です。現在の Mathematica は、一部の偏微分方程式や、 境界値問題も解けるようになっていますが、 ここでは常微分方程式やその初期値問題の解き方のみ紹介します。 2019/11/3 LaTeX2HTML が '' を二重引用符 ” に することがあって、コードが壊れていたのを直す。)
常微分方程式を解くコマンド DSolve[] があります。
一つの使い方は、次のように y[x] について解くというものです。
|
次の例では、単振動の方程式の初期値問題
|
連立の微分方程式を解くことも出来ます。
|
もう一つのやり方は、 y[x] でなく、y について解くと言うものです。 結果は (説明は省略しますが) 「純関数」 {{y->Function[{x},2Exp[a x]]}}になります。 つまり y に /. したときに、 y[] という関数が出来るだけでなく、 y'[x] や y[1] などの式が使えるのが嬉しい点です。
|
こちらでも初期値問題が解けます。
|
微分方程式は、 いわゆる式変形では解けない場合が多いことは良く知られています。 そのため数値的に近似解を求める方法が色々と開発されています。 NDSolve[] は数値的に微分方程式の初期値問題を解くコマンドで、 結果は離散的な点での関数値を近似的に求めたものになります。 計算していない点での値は補間により簡略計算することになります (こういうものを、 Mathematica では InterpolatingFunction (直訳すると補間関数?) と呼んでいるようです)。
次の例では、いわゆる単振り子の方程式
| 振り子の方程式を解く (1) | ||||||
|
連立1階の方程式
| 振り子の方程式を解く (2) | ||||||
|
おまけ (未整理)
Remove[t,x,y,t2]
Manipulate[
ParametricPlot[Evaluate[{x[t2], y[t2]} /.
NDSolve[{x'[t] == y[t], y'[t] == -Sin[x[t]], x[0] == x0,
y[0] == 0}, {x, y}, {t, 0, 20}]], {t2, 0, 20},
PlotRange -> {{-1.2 Pi, 1.2 Pi}, {-Pi, Pi}}], {x0, 0, Pi}]
とか
Remove[t,x,y,x0,t2,a]
my[x0_] :=
ParametricPlot[Evaluate[{x[t2], y[t2]} /.
NDSolve[{x'[t] == y[t], y'[t] == -Sin[x[t]], x[0] == x0,
y[0] == 0}, {x, y}, {t, 0, 20}]], {t2, 0, 20},
PlotRange -> {{-1.2 Pi, 1.2 Pi}, {-Pi, Pi}}]
Show[Table[my[a Pi], {a, 0.1, 0.9, 0.1}]]
とか
Remove[t,x,y,a,b]
sol = Table[{x[t], y[t]} /.
NDSolve[{x'[t] == y[t], y'[t] == -Sin[x[t]], x[0]==a*Pi, y[0]==b},
{x, y}, {t, -20, 20}], {b, -2.4, 2.4, 0.2}, {a, -2, 2, 2}];
g = ParametricPlot[sol, {t, -20, 20}, PlotRange -> {{-3 Pi, 3 Pi}, {-Pi, Pi}}]
ちなみにエネルギー保存則の式で描くと
ContourPlot[
1/2 y^2 - 9.8 Cos[x] - 9.8, {x, -2 Pi, 2 Pi}, {y, -10, 10},
Contours -> Table[x, {x, -40, 40, 5}], AspectRatio -> 0.5]
|
| おまけ2: 放物運動 |
?? Global`*
Remove["Global`*"]
v=20;
theta=45;
ParametricPlot[Evaluate[{x[t2], y[t2]} /.
NDSolve[{x' '[t] == 0, y' '[t] == -9.8,
x[0]==0, y[0]==0, x'[0]==v*Cos[theta Degree], y'[0]==v*Sin[theta Degree]},
{x, y}, {t, 0, 5}]],
{t2, 0, 4}]
もちろん
DSolve[{x' '[t] == 0, y' '[t] == -g,
x[0] == 0, y[0] == 0, x'[0] == v Cos[theta], y'[0] == v Sin[theta]},
{x, y}, t]
として、式変形で解くことも出来る。
|
桂田 祐史