前口上



レポート課題の幾つかは計算機の使用を前提として出題しているので,とりあえず,「こんな風に出来ますよ.」というのをここにまとめておく.処理系についてはMaximaを使うことにする.数値計算だけでなく微積分の計算や行列の計算,さらにグラフを描くなどの機能があって非常に汎用に使えるというのもあるが,無料で使えるもののなかで参考文献が充実していることなどもあり,このMaximaがもっとも適当であると思えたからである.もし,MapleMathematicaなどに使い慣れているのであればそれらを使えばよい.ただし,それらは商用のものなので入手するには当然金がかかる(そしてそれらは決して安くはない).

入力例と出力例は通常の端末のコマンドラインから入力した場合のものを例示してある.InterfaceにTeXmacsを使えば,こんな感じで見栄えが非常によくなり,商用のものと較べても見劣りはしない(講義でMaximaをちょっと紹介したときはこのTeXmacsをIntefaceにしたものをディスプレイでみせた).

入力例を見れば,なんとなく何をどうしているのかがわかるように書いたつもりではあるが,この手のものを全く初めて見るのであれば,意味がわからないところも多いのではないかと思う.その場合は参考文献の中から親切に書かれていると思われるものを探して,それを参照すれば(多分)何とかなる。とりあえずは,行の先頭に (%i1) とか (%i2) などのように(%iN) (N:自然数)とあるところが入力行で,(%iN) の後ろにコマンドを(セミコロン; まで含めて )入力してenterを押すと、次の行に (%oN) (N:自然数)に続いて結果が出力される(InterfaceにwxMaximaを利用する場合のコマンド入力は最後に shift+enter で,入力の最後の; は省略できる).以下の説明では入力行だけで出力行を省いて書いてあるところもあるので,その点は各自で判断してほしい.

尚,目次にしかない項目は予定のものである.


目次



  1. 展開,因数分解 (expand, factor, …)
  2. 関数定義,浮動小数点評価 (:=, float, …)
  3. 微分,積分
  4. グラフの描画
  5. Taylor展開,Laurent展開
  6. 微分方程式
  7. 参考文献


展開,因数分解



(%i1) (x^2+x-1)*(x^2-4);
と入力すると,
(%i1) (x^2+x-1)*(x^2-4);
                     2       2
(%o1)              (x - 4) (x + x - 1)}
と次の行に出力される.展開したければ,
(%i2) expand((x^2+x-1)*(x^2-4));
と入力すれば,
(%i2) expand((x^2+x-1)*(x^2-4));
                    4    3      2
(%o3)              x  + x  - 5 x  - 4 x + 4
と出力される.%で直前の出力を参照できるので、
(%i1) (x^2+x-1)*(x^2-4);
                     2        2
(%o1)              (x  - 4) (x  + x - 1)
(%i2) expand(%);
                    4    3      2
(%o3)              x  + x  - 5 x  - 4 x + 4
ともできる.続いて,
(%i4) factor(%);
と入力すると,
(%i4) factor(%);
                                    2
(%o4)             (x - 2) (x + 2) (x  + x - 1)
と因数分解してくれる.変数が増えても同じ.
(%i5) factor(x^3-x^2*y^2+x^2*y-2*x*y^3+y^5);
                    2        3          2
(%o5)             (y  - x) (y  - x y - x )
整数や有理数に対しては,
(%i6) factor(185850);
                     2  2
(%o6)             2 3  5  7 59
(%i7) factor(12/45);
                        2
                       2
(%o7)                 ---
                      3 5
という感じに素因数分解してくれる.


関数定義,浮動小数点評価



(%i1) f(x):=x^3+3*x+1;
と入力すると,
(%i1) f(x):=x^3+3*x+1;
                         3
(%o1)           f(x) := x  + 3 x + 1
と出力され,f(x)=x3+3x+1 という関数 f を定義したことになる.
x に何か代入したときの値を知りたいとき,例えば f(4/7) の値を知りたければ,
(%i2) f(4/7);
と入力する.すると,
(%i2) f(4/7);
                995
(%o2)           ---
                343
と分数で返してくれる. 浮動小数点での表示が知りたいのなら,
(%i3) float(995/343);
とすれば,
(%i3) float(995/343); 
(%o3)           2.900874635568513
と出力される.直前の結果の参照である % を使って,
(%i2) f(4/7);
                995
(%o2)           ---
                343
(%i3) float(%);
(%o3)           2.900874635568513
としても同じ出力を得る.最初から
(%i4) float(f(4/7));
(%o4)           2.900874635568513
としてもよい.関数は合成することも出来て,
(%i5) g(x):=x^2;
                      2
(%o5)        g(x) := x
(%i6) g(f(x));
               3           2
(%o6)        (x  + 3 x + 1)
となる.


微分,積分



x の関数 1/(x3+1) を x で微分するには,
(%i1) diff(1/(x^3+1), x);
とする.高階微分は
(%i2) diff(1/(x^3+1), x, 2);
とすれば2回微分したものを,
(%i3) diff(1/(x^3+1), x, 7);
とすれば,7回微分したものを返してくれる.
続けて,
(%i4) factor(%);
とすると,一つの分数にまとめて分母分子を因数分解してくれる.

x の関数 1/(x+1) の不定積分は
(%i5) integrate(1/(x+1), x);
(%o5)                     log(x + 1)
と求めてくれ,x=0 から x=1 までの定積分なら,
(%i5) integrate(1/(x+1), x, 0, 1);
(%o5)                     log(2)
としてくれる.積分区間は有限でなくてもよくて,sin(x)/x を x=0 から ∞ で積分するなら,
(%i6) integrate(sin(x)/x, x, 0, inf);
                          %pi
(%o6)                     ---
                           2
とできる.尚,%pi は円周率πを表していて,texmacs や wxMaxima などを interface に使うと,πと表示される.自然対数の底 e は %e と表す.%pi や %e は入力でも使い,
(%i7) integrate(%e^(-x), x, 0, inf);
(%o7)                                1
(%i7) integrate(cos(x), x, 0, %pi/4);
                                     1
(%o7)                             -------
                                  sqrt(2)
などとできる.sqrt は平方根を表していて,sqrt(2) は 21/2 と同じ.指数関数 %e^x は exp(x) ともかける.
(%i8) integrate(exp(-x^2), x, 0, inf);
                                  sqrt(%pi)
(%o8)                             ---------
                                      2


グラフの描画



(%i1) plot2d(asin(x), [x, -2, 2]);
で y=arcsin x (-2≦x≦2) のグラフが gnuplot を通して表示される.arcsin は |x|>1 で定義されていないがそこは省いて描画される.因みに,asin, acos, atan で,それぞれ arcsin, arccos, arctan として扱われる.
(%i2) plot(asin(x), [x, -2, 2], [y, -1, 1]);
とすると,値 y=arcsin x の範囲が -1≦y≦1 に制限されたグラフが表示される.

2変数の関数のグラフなら,
(%i3) plot2d(x^2+y^2, [x, -2, 2], [y, -2, 2]);
とすれば,z=x2+y2 のグラフである曲面を -2≦x≦2, -2≦y≦2 の範囲上に描いてくれる.Windows上であれば,表示されたグラフをマウスで掴んで動かすことで視点を変えてグラフを眺められる.

y2=x3+x2 のように,曲線が x, y の関係式で表されている場合は,まず,implicit_plot というコマンドが使えるように
(%i4) load(implicit_plot);
としたあとに,
(%i5) implicit_plot(y^2=x^3+x^2, [x,-2,2], [y,-2,2]);
とすると,曲線のグラフを -2≦x≦2, -2≦y≦2 の範囲で描画する.


Taylor展開,Laurent展開




微分方程式



t の関数 x(t) のついての微分方程式 x'(t)+x(t)=0 に対しては,
(%i1) desolve(diff(x(t),t)+x(t)=0, x(t));
                                             - t
(%o1)                          x(t) = x(0) %e
と初期値 x(0) を含む形で解いてくれる. 初期値を指定したいのなら,
(%i1) atvalue(x(t), t=1, 3);
(%o1)                          3
(%i2) desolve(diff(x(t),t)+x(t)=0, x(t));
                                             - t
(%o2)                          x(t) = x(0) %e
とこんな感じ.二階の微分方程式でも同様.
(%i3) atvalue(y(t), t=0, -1);
(%o3)                                - 1
(%i4) atvalue(diff(y(t),t), t=0, 0);
(%o4)                                 0
(%i5) desolve(diff(y(t),t,2)+2*diff(y(t),t)+2*y(t)=5*sin(t),y(t));
                                      - t
(%o5)               y(t) = sin(t) + %e    cos(t) - 2 cos(t)
連立方程式でも大丈夫.
(%i6) atvalue(x(t), t=0, 1);
(%o6)                                 1
(%i7) atvalue(y(t), t=0, 0);
(%o7)                                 0
(%i8) desolve([diff(x(t), t)=3*x(t)-y(t), diff(y(t), t)=2*x(t)+y(t)], [x(t), y(t)]);
                     2 t                               2 t
(%o8)      [x(t) = %e    (sin(t) + cos(t)), y(t) = 2 %e    sin(t)]


参考文献



参考になるであろう幾つかのページへのリンクを張っておく.他にも(特に英文のものまで含めれば)いろいろあると思うので,検索エンジン等で探してみるといいだろう.

尚,ここで扱っている程度のことは,(細かな違いはあるにせよ)どんな数式処理系でも簡単にできることなので,MathematicaMapleなどの解説も参考になる.検索エンジンなどで探してみるとよい.



by KOYAMA Yoshitaka

タグ:

Maxima tutorial
最終更新:2019年08月03日 17:46