================ Introduction ================ Mathematicaを用いたプログラミングの練習を行います。 Mathematica は毎回使いますから、GNOMEパネルの ランチャーに登録しておきましょう。 Mathematica は 「センターメニュー」-「アプリケーション」-「Mathematic数式処理」 にあります。 今回は Mathematica の基本的な利用方法の演習です。 適当にプログラムの中の数字などを変更して試してみてください。 以下の説明の中で*****ではさまれた部分は Mathematica に入力する文字列です。自分で入力し Shift+Enter(Return) キーで実行します。 上から順に,すべて実行するようにしてください。 上で定義した関数を後で利用すること があります(今回に限ってはそのようなことはありません)。 簡単なものから勉強しましょう。まずは加法。 ****** 5+7 ****** 2の37乗を計算するには ****** 2^37 ****** わり算では少し注意が必要。 ****** 4/6 ****** では約分するだけで,その小数展開を知りたいときには ****** N[4/6] ****** または4のかわりに4.0のように小数を用いる ****** 4.0/6 ****** 同様なことが実数値関数についてもあてはまります。 ****** Sin[1] ****** では数値的な値は得られません。 ****** Sin[1.] ****** とします。さらに正確な値が知りたければ ****** Sin[1.0000000000000000000000] ****** ****** N[Sin[1],1000] ****** この例ではSin[1]を1000桁まで計算しています。 丸い括弧は通常の数学的な意味と同様な作用をします。 ****** 2^3 + 4 ****** ****** 2^(3 + 4) ****** 関数のグラフを描くにはPlotを用います。 ****** Plot[Sin[x], {x, 0, 2 Pi}]; ****** この例では [0,Pi] 区間での Sin[x] のグラフを表示します.ここで Pi は円周率 3.14142...です。ちなみに Pi の値が知りたければ,上で説明したように (((( 最近このファイルを見た皆様へ: 今日は平成22年3月16日です。幾人かの方々から 上記の円周率が間違っているとの親切なご指摘を頂きました。 無論 3.141592...の間違いです。 いちごのくにのむこさんいわくななくさにみやしろに、、、 とか、 ひとよひとよに、、、 などと定数を覚えたりした世代が故か、、 両者を混同したようで、汗顔の至りです。 皆さんは、せっかく何かの御縁でこのファイルを見た 訳ですから、大学院怖い怖いとおっしゃらず、 http://www.math.sci.osaka-u.ac.jp/~akitaka/ にある他のページもご覧になり、これを機会に 大阪大学、情報科学研究科基礎数学専攻 http://www.ist.osaka-u.ac.jp/japanese/mat/index.html を宜しくお願いいたします。 )))) ***** N[Pi,2000] ***** とすればよい.Plot がどのようにグラフを生成しているか,簡単に説明しておこう。 まず下のCellを実行してください(意味は今はわからなくても気にしないで)。 ***** test = Plot[Sin[x], {x, 0, 2 Pi}, DisplayFunction -> Identity]; Show[ Graphics[{ Thickness[0.001], Map[ Line[{{#[[1]], 0}, #}]&, Nest[First, test, 4] ] }], Axes->Automatic ]; ***** Plotは縦の棒の部分でのSin[x]の値を計算して,その結果をつないでグラフを作りま す.グラフの曲がっているところでは細かく,直線的なところでは荒くサンプルポイ ントを選んでいます.Mathematicaはかなり賢い. 次に曲線で結ばず,関数の値を点列として表示したい場合にどうすればよいか考えて みよう.それにはまず,リストについて復習する必要があります. Mathematicaでは{ }でかこまれたデーターをすべてリストと呼びます. 平面上の点列は座標のリストのリスト ***** testList={{1, 0}, {2, 1}, {3, 2}, {4, 1}, {5, 1}} ***** {{1, 0}, {2, 1}, {3, 2}, {4, 1}, {5, 1}} として表すことが出来ます。 testList={{1, 0},...}はこの点列を testList に代入すること を意味します。確認にためにtestList を実行すると ***** testList ***** 点列が表示されます。 この点列を絵にするには ***** ListPlot[testList] ***** これは ***** ListPlot[{{1, 0}, {2, 1}, {3, 2}, {4, 1}, {5, 1}}] ***** のように入力するのと同じことです.同じことを何度もタイプしないですむように, また,プログラムを読みやすくするために上手に名前をつけておきましょう. Mathematicaの組み込み関数はすべて大文字で始まります.自分で定数,変数,関数 を定義するときには小文字始まりの名前をつける方が安全です。既に使われている名 前を使うと警告がでるのでそれほど心配する必要はありません。 リストを作るにはTable関数が便利: ***** Table[Sin[x], {x, 0, 6}] ***** {0, Sin[1], Sin[2], Sin[3], Sin[4], Sin[5], Sin[6]} Sin[x] の値のリストを作るには ***** N[Table[Sin[x], {x, 0, 6}]] ***** {0, 0.841471, 0.909297, 0.14112, -0.756802, -0.958924, -0.279415} とすればよい.さらに細かく変数を動かしたいときには ***** Table[Sin[x], {x, 0, 6, 0.5}] ***** この場合はxは0から 6 まで 0.5 刻みで動きます。 答えが小数値で与えられていることに 注意しよう。 これは 0.5 という小数刻みで x が動いているからです。 ***** Table[Sin[x], {x, 0, 6, 1/2}] ***** このようにMathematicaにとって 0.5 と 1/2 は異なる意味を持っています。 最初の目的であった Sin[x] のグラフ上の点のリストを作るには ***** sinPoints=Table[{x, Sin[x]}, {x, 0, 6, 0.5}] ***** この点列を絵にするには ***** ListPlot[sinPoints]; ***** さらに細かくサンプルを選ぶと ***** ListPlot[Table[{x, Sin[x]}, {x, 0, 6, 0.1}]]; ***** 上の例では Table を用いて繰り返しを行いましたが、 同様な働きをする関数として Do があります。 使い方はTableと同じです。 ***** Do[Sin[x], {x, 0, 6}] ***** これを実行しても何も表示されない.ただ出力がないだけでちゃんと計算は実行され ています。途中の結果を表示させるにはPrintを用います。 ***** Do[Print[Sin[x]], {x, 0, 6}] ***** Do が活躍するのは次のような場合です。 ***** Do[ ParametricPlot[ {Sin[n t], Sin[(n + 1) t]}, {t, 0, 2Pi} ], {n, 1, 3} ] ***** ここでParametricPlotはパラメータ表示された曲線を描く関数で、使い方は Plot と同様です。 Do 文を用いると簡単にアニメーションを作ることもできます。 9枚の絵が描かれたあとでその一枚をダブルクリックするこ絵が動きます。 絵をダブルク リックすると9枚の絵を束ねることができます. ***** Do[Plot[Sin[n x], {x, 0, 2Pi}], {n, 1, 3, 1/4}] ***** Mathematicaには 800 以上の関数が用意されています.もちろんこの演習ですべての関 数を用いるわけではありません。最も重要なのは7個です.すでに3つは説明しました。 Table Plot Do Factor Expand Integrate D その使い方を例を使って説明します。 ***** Table[Expand[(a + b)^n], {n, 1, 5}] ***** ***** Plot[x Sin[x], {x, -10, 10}]; ***** Printを使うと出力を読みやすくすることができます。 ***** Do[ Print["Remarkably, ", n, " squared is ", n^2, "."], {n, 1, 10} ] ***** Factor と Expand は各々多項式の因数分解,展開をします。 **** Factor[x^24 - 1] **** **** Expand[(1+x)^10] **** Integrate と D は関数の積分,微分をします。 ***** Integrate[1/(1-x^3), x] ***** ***** D[Sin[Tan[x]], x] ***** Helpの使い方: 新しい関数について調べたい,また関数の使い方を忘れてしまった場合には 例えば **** ?Expand **** のように ? のあとに関数名を書きます。 また関数の名前も忘れてしまったときには **** ?Plot* **** のように入力するとPlotで始まる関数をすべて表示します。 * は任意の長さの文字列 とパターンマッチします。 **** ?*Plot **** 小文字のaを3つ以上含む関数をすべてリストするには次のように入力します。 ***** ?*a*a*a* ***** 関数名はかなり長いものもありますが補完機能をもちいれば入力を省略することが出 来ます.例えばIntまでタイプしたときに command キー(ここでは、Alt キー)を 押しながら k を押すと Int で始 まる名前のリストが表示されます. その中の一つを矢印キーまたはマウスで選べば こ の名前が入力されます。 またcommand キー(ここでは、Alt キー)を押しながら l を押すとさっき実行した 関数が,command キーを押し ながら L を押すとさっき出力された計算結果が 表示されます。試して見ましょう。 今日の演習はこれでおわりです。