Mathematica
Wolfram

Mathematicaでノートブックを作るTips

More than 1 year has passed since last update.

はじめに

細々としたことばかりで恐縮ですが、
ホビーとしてMathematicaを利用する際、ノートブックを作ったりコードを実行したりするときのTipsを書き連ねようと思います。

Tips

ノートブック情報を残す

僕のMathematicaフォルダには大量のノートブックがあるので、
なるべく関連性がわかるような管理を心がけています。

そこで僕は、各ノートブックファイルの冒頭に

  • ファイル名
  • ノートブックの元となったプログラムのファイル名(マージしている場合複数)
  • ノートブックの作成日

を明記することにしています。

例:

(* qiita-tips--2.nb *)
(* from qiita-tips.nb *)
(* from notebook-tips.nb *)
(* created at 2016-12-06 *)

ファイルを新規作成して上記のファイル情報を書き、
そこに書いたファイル名で名前を付けて保存します。
このとき、セルの形式がInputだと、ハイフン等にスペースが紛れ込むので、
Textにしておくのがよさげです。

Webからの引用はHyperlinkで

fibonacci-word.nb
(* from https://oeis.org/A003849 *)
Flatten[Nest[Join[{#}, {#[[1]]}] &, {0, 1}, 9]]

このように引用元を含めたセルの場合、Inputスタイルになるため先ほどと同じくコピペ時にスペースが紛れ込んでしまいます。
こんな感じ: https : // oeis.org/A003849

なので、

(* Hyperlink["https://oeis.org/A003849"] *)
Flatten[
 Nest[Join[{#}, {#[[1]]}] &, {0, 1}, 9]]

というようにしておくといいでしょう。
別にHyperlinkをコメントアウトせず評価しちゃってもいいんですが。

すでに保存してあるファイルは新規ノートブックにコピーして編集する

バージョン1のファイルを作ってバージョン2を作るとき、
バージョン1のファイルを直接いじることはしません。

人によってはあまり意味をなさないかもしれませんが、保存状態が気になってしまうので念を入れてこうやってます。
バージョン1のコードを全選択してバージョン2にペーストしてから新しいコードを書き加えていくのがおすすめです。

本当に不要になるまでコードを消さない

「1回うまくいったので清書で書き直そう」、みたいなときに、
「前に試行錯誤してたのはもういらないや」、と思うことがありますが、
「やっぱりさっきの検証結果を見直してちゃんと書かないと」みたいになることがあるので、
不要なコードだと思うものも邪魔にならない程度に残しておくといいと思います。
Mathematicaのアンドゥは挙動が微妙なので…。

カーネルを終了してからノートブック評価

Mathematicaはノートブック間で変数や関数などが共通になっています。
なので、例えばファイルAで定義した関数をファイルBで使い、ファイルBを保存していたとすると、
後日ファイルBを開いた時にファイルAの関数がない状態なので、「はてどう定義したんだっけか」、と
なってしまう恐れがあります。
また、同じファイルでも、実は消したコードで関数を定義してた、なんてこともあり得ます。
ノートブックはファイルを開いて実行した時に正常に動くべきなので、
相当実行時間の長いコードを含んでない限りは、保存前に[評価]→[カーネルを終了]をして
[評価]→[ノートブックを評価]した状態にすれば安心です。

あと、例えば

a = 5

とした後

記号として

{{a, b, c}, {d, e, f}}

を扱ったら

{{5, b, c}, {d, e, f}}

となり記号が別の式に変換されていた、という気付かない事象もあります。
それに気づかず関数が壊れたような動作をする恐れもあるので、
特に x とか f とか、一文字の記号は要注意です。

Exportはコメントアウトして保存

先ほどのTipsのようにノートブックを評価しちゃいたいところですが、
Exportがあると既存のファイルを壊したり問題がある可能性があります。
Exportのコードはコメントアウトしておくとよいでしょう。

まとめ

ノートブック管理は人によって結構さまざまでしょうね。
Mathematicaのクセを見抜いて、もっと快適に使えるようになりたいものです。