忘却の微分方程式(33) 常微分方程式を解く その2、MathematicaとMaxima

Joseph Halfmoon

前回に引き続き今回も微分方程式です。今回は数値解の求め方について、Mathematicaの例題をMaximaでも解いてみた、という感じです。例によって、良いように勝手にやってくれるお楽なMathematicaと、ちゃんと自分でやれよ、という感じのMaximaという感じ。結構辛いよ素人には。

※「忘却の微分方程式」投稿順 index はこちら

※文中で Maximaとあるのは、MaximaにGUIを被せたwxMaxima 21.05.2 (Windows版)です。Mathematicaはラズパイ上の12.2.0.0です

※勝手に参照させていただいておりますWolfram社Mathematicaのチュートリアルは以下です。

数学を学ぶ学生のための入門チュートリアル 微分方程式

今回は上記のチュートリアルに書かれている例題2つをやってみています。

例題その1

勝手に例題その1などと書きましたが、Mathematicaの例題は以下の通りです。1行で数値解が得られる上、結果は後で加工が楽そうなInterpolatingFunctionなどというものの中に入っています。Plotに渡すだけでグラフを描いてくれもします。ラクダ。

WOLF_ODE_D000
同じことをMaximaでやる場合、1行で書くのことも不可能ではありませんが、ステップ踏んで途中結果を残していった方が、後で修正が効くので楽そうです。

f1(y,x):=cos(x^2)
x0: -5
x1: 5
N: 200
h: float((x1-x0)/N)
data0: rk(f1(y,x), y,0,[x, x0, x1, h])

プロットに関しては discreteとか指定しないとダメだと思います。何も考えずには出来ないってことかい。でもま、ここはそれほど難しくはないです。
MAX_ODE_D000

例題その2

その2は、連立微分方程式ぞな。その上、パラメータtで媒介変数プロットせよと。Mathematicaの方は例題どおりなので、うちこむだけ。

WOLF_ODE_D001a
媒介変数(パラメトリック)プロットも簡単。

WOLF_ODE_D001b
Maximaの方も出来上がってみれば大したことはなかったですが、以下の「表現」にいたるまで、結構苦労いたしましたぞ。やれば出来るのですが、知らないとどうして良いのか分からないことが多いです。

deq1: -y-x^2
deq2: 2*x-y^3
sol: rk([deq1, deq2],[x,y],[1, 1],[t,0,20, 0.02])
xylis: makelist([c[2],c[3]],c, sol)

お答えの中から makelist で t を滅して x, y だけにすれば parametric 指定しなくとも普通に plot2d で描けます。というか、parametric plotに descreteの結果を渡すことができるのか?分かりません。

MAX_ODE_D001
まあ、良く分からないのだけれど、同じようなグラフが描けたので、まずは一件落着。しかし凡人は相当練習しないと実用にならんぞ、これは。

忘却の微分方程式(33) 常微分方程式を解くその1、MathematicaとMaxima へ戻る

忘却の微分方程式(34) 複素数の取扱い、MathematicaとMaxima へ進む