はじめまして、Mathematica歴3年の筆者です。
「Mathematicaを始めたいんだけど、何から手をつけていいかわからないなあ」
「最初に身につける基本は何?」
「いいチュートリアルが載っているサイトないかなあ?」
といった需要が筆者がMathematicaを始めるときにあったので、これからMathematicaを始める人向けにチュートリアルを作ってみました。
ターゲットは「今までプログラミングを全くやったことはないけど、これからMathemaricaを始めようとしている人」です!
全5回くらいで、Mathematicaを用いた「データ解析」や「シミュレーション」ができるようになることを目指します。
第1回目は「Mathematicaの基本操作」についてです。それではどうぞ。
1, 「1+1」の計算
私の記事では、具体的な課題を解決する過程でMathematicaを習得していきます。この方法が一番効率がいいからです。
そんなわけで、最初の課題は「1+1を計算すること」とします。
早速、Mathematicaを開いて上のタブから、「ファイル」→「ファイル」→「ノートブック」とクリックして下さい。
すると「名称未定義-1」というウインドウが立ち上がります。
この状態でEnterを押すと、下図のように「セル」と呼ばれるものが生成されます。
「セル」は日本語で例えるなら「段落」です。
Mathematicaでは、セルを選択した状態で「Shift + Enter」を押すことでセルの中のプログラムを実行します。
つまり、セルを分けることで小さく区切ってプログラムを実行できます。
「じゃあどこでセルを区切ったらいいんだ?」
とお思いかもしれませんが、セルを全く区切らなくてもプログラムは問題なく動くので、今は深く考えなくても大丈夫です。
では、セルの中に「1+1」と記述して「Shift + Enter」を押してみて下さい。
下図のように「Out[1] = 2」と表示されたら成功です。In[1]やOut[1]は仕様ですので特に気にしなくて大丈夫です。
ちなみに、引き算は「-」、掛け算は「*」、割り算は「/」、乗数は「^」になります。
基本操作その1:Shift + Enter → セルを実行する
2, 「a = 1かつb = 2の時、a + b」の計算
次の課題は、「a = 1かつb = 2の時、a + bを計算すること」です。
「a + b」をセルに入力してShift + Enterを押しても計算できないのは直感的にわかるかと思います。
なぜなら、Mathematicaは「a」と「b」が何なのかを知らないのですから。
そこで先に「aは1」で「bは2」という情報を与えてから「a + b」を計算します。
下記のように1行目に「a = 1」、2行目に「b = 2」、3行目に「a + b」と記述してShift + Enterを押してみて下さい。
すると下図のように、1と2と3が出力されます。この出力はそれぞれ、1がaの値、2がbの値、3がa + bの値に対応しています。
しかしながら、今回の課題で知りたいのは「a + b」の答えである3だけであり、出力の1と2は目障りですよね。
そんな時のために、Mathematicaでは文末に「;」をつけることで、その行を出力しないようにできます。
試しに、下図のように1行目を「a = 1;」、2行目を「b = 2;」としてからShift + Enterを押してみて下さい。
3行目の「a + b」の答えである3だけが出力されます。
基本操作その2:文末に「;」→ その行を出力しない
ちなみに「a = 1」は代入と呼ばれる操作です。
「a」は変数と呼ばれており、「=」を使うことで「変数a」に「整数1」を紐付け(代入)しています。
実はこの「=」は数学的な「等しい」とは意味が異なっています。
代入の「=」は「右辺を左辺に代入する」という意味です。
「結局、数学と一緒の意味じゃねえか!?」
という疑問をお持ちかと思います。
以下の例がわかりやすいかと思います。
1行目に「a = 1;」、2行目に「a = a+1」と記述してShift + Enterを押してみて下さい。
すると2行目の「a」の値である2が出力されます。
「=」を数学的な意味と捉えていると「a = a+1」は理解できないですよね。
説明すると、まず1行目で「変数a」に「1」を代入しています。
2行目では右辺の「a + 1」を先に計算して、その結果を「a」に代入しています。
結果、最終的に「a」に「2」が代入されるわけです。
ちなみに、筆者は「=」が代入であることを知らずに1年くらいMathematicaを使っていたので、すぐに理解できなくても大丈夫です。
数学の「=」とは違うんだなあくらいに知っておいて下さい。
3, 「 1から100までの整数の和」の計算
さて、少し実践的な問題を解いてみましょう。
今回の課題は「1から100までの整数の和」です。
パッと思いつくのは「1 + 2 + 3 + ・・・・+ 100」と記述してShift + Enterを押すことです。ですが、この方法はもちろん今回はダメです。
そこで「関数」というものを使ってみたいと思います。
関数とは「平均を求める」や「合計値を求める」といった数学でよく行われる操作を簡単に記述する方法です。
例えば「平均を求める」という操作は「Mean」という関数によって簡単に実行できます。
実際に「1から5までの整数の平均」を「Mean」を使用して計算してみましょう。
1行目に「a = {1, 2, 3, 4, 5};」と記述して下さい。
これによって「変数a」に「1から5までの整数のリスト」が代入されます。
リストについては後で解説します。
次に2行目に「Mean[a]」と記述してShift + Enterを押して下さい。
3と出力されれば成功です。
「Mean」によって「リストa」の中身の1から5までの整数の平均が計算されます。
「関数が便利なのはわかったけど、たくさん関数を覚えないとMathematicaは使えないのか、、、、」
と思った方もいらっしゃるかと思いますが、ご安心ください。
実は関数を覚える必要は全くないのです。
なぜなら関数はググって使用するものだからです。
筆者自身もググらずに完璧に使用できる関数は10個くらいだと思います。
Mathematicaに限ったことではないですが、プログラミングではググるということが非常に重要です。
あなたが直面する問題のほとんどは、以前に誰かが直面して解決方法を考えてくれているものです。
わからないことがあったらすぐにググることを徹底して下さい。
基本操作その3:とにかくググる
先程の平均を求める関数は、「Mathematica 平均」とでもググれば簡単に見つけられます。
下図一番上の公式サイト(Wolfram言語ドキュメント)がわかりやすくまとまっています。
公式サイトをクリックすると、下図のように関数の詳しい解説が載っています。
特にわかりやすいのが、下にある「例」です。
公式サイトでは、「例」にあるコードをクリックするだけでコピーできる仕様になっています。
ですので、「例」の中で関係がありそうなコードを自分のセルにコピペして、必要な箇所だけ変更して使用するのがおすすめです。
さて、関数の説明に話を戻しましょう。Mathematicaの関数を使用する際には以下の3つのルールを守る必要があります。
ルール1:関数名の先頭は大文字にする
ルール2:関数名の後ろに大括弧をつける
ルール3:大括弧の中に適切な型を入れる
先程のMean[a]がこの3つのルールを守っていることを確認しましょう。
ルール1とルール2に従って、「Mean」の先頭の文字は確かに大文字になっており、Meanの後ろには大括弧がついています。
ここで、ルール3の「適切な型」とは何だろうという疑問にお答えします。
Mathematicaでは変数を型として区別しています。
初心者が覚えておくべき型を以下に挙げます。
整数型:小数を扱わない数字は整数型です。負の数も含みます。四則演算できます。
例:1、11、-1など
小数型:小数点以下まで扱うものは小数型です。四則演算できます。
例:1.5、 1/3、πなど
文字列型:文字の列を文字列型と言います。ダブルクオーテーションで挟むことで文字列型に変換できます。文字列型は数字ではないので四則演算はできません。
例 :”abc”、”11″、”+”など
リスト型:中括弧の中に数字や文字列をカンマで区切って羅列したものはリスト型です。Mathematicaではリストをいかに操作するかが重要です。リストの中身を要素と呼びます。下の最後の例のようにリストの中にリストを入れることも可能です。
例:{1,2,3}、{“1”, “2”, “a”}、{{1, 2, 3}, {3, 4, 5}, {6, 7, 8}}など
ブール型:TrueとFalseの2つしかないです。一見使いにくそうですが、不等式「1 > 0」が「True」を出力するなど、実は使う場面は多々あります。
例:True、False
他にもいろいろな型がありますが、上の5つを意識して使い分けるだけで数値解析やシミュレーションまで実行可能です。
では、関数「Mean」の適切な型とは何でしょうか?
先程のググった結果をよく見ると、下記のように「list」(= リスト型)と書いてありますね。
そして「a」は「{1, 2, 3, 4, 5}」のリスト型でした。
したがってルール3も守られていることがわかりました。
ちなみに大括弧の中身を引数(ひきすう)と呼びます。
よく使う専門用語ですので覚えておいて下さい。
さて前置きが長くなりましたが、いよいよ「1から100までの整数の和」を計算してみたいと思います。
今までの話の流れから、おそらく以下の2つのステップで計算できそうですよね。
ステップ1:1から100までの数字のリストを作る
ステップ2:リストの中身を合計する
それぞれの関数をググってみましょう。
ステップ1においては、筆者が「Mathematica 等差数列」と検索したところ「Table」という関数を発見しました。
「Mathematica Table」とググり直して、公式サイトに行って例を見ると以下のコードが使えそうでした。
このコードの「i^2」の部分を「i」にして、「10」を「100」に変更すれば良さそうですね。
実際に確認してみたところ、下図のように確かに「1から100までの整数のリスト」を生成できていました。
次に、ステップ2の「リストの中身を合計する関数」を調べましょう。
筆者は「Mathematica 合計」とググりました。
すると「Total」という関数を見つけました。
「Total」は引数であるリストの合計を返す関数です。
よって、先程の「1から100までの整数のリスト」を「Total」の引数にすれば「1から100までの整数の合計」を計算できるはず。
結果、下図のように答えが5050ということがわかりました。
別の書き方として、下図のように「a」を使用しない書き方もあります。
またググっている過程で「Sum」という関数を見つけました。この関数を使用すると下図のように計算できます。
このように色々な書き方がありますが、正直どれでもいいと思います。
数値解析やシミュレーションではコードが短いため、計算の速さはそれほど重要ではない場合が多いです。
とにかく初心者のうちは、コードが長くなろうが汚かろうがググって自分で書けるスキルを身につけることが重要です。
たくさんコードを書いていく過程で、速くて綺麗なコードが自然と書けるようになります。
長くなりましたが第1回はここで終了とします。お疲れ様でした
第2回は「For構文」と呼ばれる繰り返し処理を使って問題を解いていきたいと思います。