7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MathematicaAdvent Calendar 2015

Day 5

Mathematicaのわかりやすいイントロダクション 〜つまずき編〜

Last updated at Posted at 2015-12-05

式の実行

前回のイントロダクションで、Mathematicaは対話型インターフェイスだとご説明しましたね。

さて、ではとても簡単な式を実行してみましょう。

1 + 1

と。はい、Enter。

…あれ、結果が出てこない?

実はEnterキーは単なる改行です。
1つのテキストエリア(「セル」と呼びます)に複数行の命令を詰め込めるので。

実行するにはShift + Enterです。

2

と出ましたね。

関数の実行

次の式を実行してみましょう。

sin (pi/2)

EnterではなくShift + Enterですよ!

結果は

(pi sin)/2

あれ?

実はここでは3つの間違いを犯しています。

Wolfram|Alphaでは実行できたではないか!と憤慨する方もいるかもしれませんが、
Wolfram|Alphaはかなり緩いんです。

組み込み定数は大文字で始まる

円周率$\pi$を表す定数はPiです。
基本的に、Mathematicaが予め用意している定数は大文字で始まります。
エイリアス(また詳しく説明しようと思います)を使うと直接$\pi$の記号を円周率として使えます。

組み込み関数も大文字で始まる

正弦関数$\sin$を表す関数はSinです。
関数名も、組み込みのものは大文字で始まります。
よくあるプログラミング言語ではクラスと関数を区別するために大文字・小文字を使い分けていますが、そのあたりのルールが違うのがハマりポイントです。

慣習的に、自分で定義する関数や定数は小文字で始めることになってます。

脱線

別にユーザー定義の定数が大文字でも怒られはしません。むしろ怒られるのを制止しつつ組み込み定数・関数の上書きもできます。

Pi = 3;

こんなことをすると

mathematica_set_pi_3.png

怒られますね。

でも、

Unprotect[Pi];
Pi = 3;
Protect[Pi];

こうしたら

mathematica_unprotect.png

円周率がおよそ3!ていうか確実に3!

Unprotectはいざというときに使いましょう。
(具体的には、独自の代数を作った時の演算の拡張とか、ですかね。)

関数の実行は"[]"

正弦関数に代入するときは

Sin(x)

ではなく

Sin[x]

です。

ほとんどのプログラミング言語では"()"ですからね。一番直感的でないかもしれません。
(僕も初心者の頃は解せませんでした。)

配列ではなくリスト

"[]"が関数なら、配列はどうなんだろう??

Mathematicaでは値の羅列のことを「リスト」と呼びます。(「配列」でよくない?)
定義するときはこうです。

li = {5, 3, 8}

アクセスするときはこうです。

li[[2]]

他になかなか見たことのない記号の使い方ですね。

ちなみにこれで返ってくるのは3です。

リストのインデックス

3だと?8ではなく?
そう、リストのインデックスは0から始まるのではなく、1から始まります。

では、

li[[0]]

と入れると何が返ってくるでしょう。エラーでしょうか?

正解は

List

です。
0番目に頭部(型みたいなもの)が入っているのです。
(ちなみに頭部はHeadという関数でも取得できます。)

ちなみに、最近になって連想配列的な「Association」もサポートされたので、用途によってはこちらも積極的に使っていきましょう。

<|a -> x, b -> y, c -> z|>

こんな感じです。(これもまた独特な書き方ですね。)

関数の宣言

f[x_] := x^2 + 2 x + 1

ポイントは

  • 関数の代入と同じく"[]"を使うこと
  • 引数の後ろには"_"を付けること
  • 定義は":="を使うこと

です。

覚えてしまえばなんてことないのですが、
この書き方は「パターン」と「遅延評価」という独特の世界観の上に成り立っているので、なかなか難しいものです。

遅延評価だけ先に軽く説明しておきましょう。

これは普通の代入です。
0から9999までのランダムな整数を1回代入して、毎回同じ数が呼び出されます。

rand1 = RandomInteger[9999];
mathematica_immediately.png

一方、こっちが遅延評価です。

rand2 := RandomInteger[9999];
mathematica_delay.png

呼び出す度に、RandomIntegerが実行されるので、毎回違う値が返ってきます。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?