文中 --> という矢印は、私が勝手に決めた「左の入力に対し、右の出力を得る」という記号。 *link [#k7ddb8d7] -[[ようこそ数学の部屋へ:http://www.wasurena.sakura.ne.jp/~mc2lv/Mhmain.HTM]] -[[Mathematicaで教材作成:http://www.nikonet.or.jp/spring/Mathematica/Mathematica.htm]] -[[Mathematica Museum:http://park-avenue.homeip.net/mathematica/]] -Mathematica book は[[Wolfram Mathematica Documentation:http://documents.wolfram.com/mathematica/]]から英語版のPDFがダウンロードできる -[[3年生前期学生実験「Mathematicaによる計算処理」アニメーション:http://aquarius10.cse.kyutech.ac.jp/~otabe/mathematica/anime/animation.html]] 素晴らしいアニメーションの実例が列挙されている。電磁場の可視化にも触れられている。 -[[Mathematica World by Hidekazu Takahashi:http://www.biwako.ne.jp/~hidekazu/]] パッケージを用いたグラフィックス・プログラミング *メモ [#n50b893a] -[shift] + [enter]で入力を評価 -文末にセミコロンで評価結果を出力しない。Shortとすると適当に短縮して表示される -乗算はスペースかアスタリスク -%は直前の計算結果 -コメントは (* コメント *) とする -[Ctrl] + k で補完 -<<RealTime3D`とするとMathematica内で3Dグラフをくるくる回せる -Helpの文字が小さくて見にくいと思った。下に倍率を指定するポップアップがあるが、図まで拡大されて汚くなるから使い勝手が悪いと思った。が、Format -- Stylesheet で適当なのを選ぶと見易くなった。 **特殊文字 [#ca848c5c] [esc] ... [esc] と、エスケープキーを挟んでタイプすると特殊文字が表示される。詳しくはエイリアス参照。 | ii | 虚数単位 | | ee | 自然対数 | | p | 円周率 | | pd | 偏微分 | | inf | 無限大 | | int | 積分記号 | | sum | 総和 | | co | 複素共役 | | tr | 転置(行列) | | hb | エイチスラッシュ (Dirac定数) | | アルファベット | 各種ギリシャ文字 | **特殊表記 [#s687ba61] [CTRL]を押しながら.... | 6 or ^ | 累乗 | | / | 分数 | | 2 | 根号(√) | | _ か - (underbarかハイフン) | 下添字 | | & | 真上添字(ベクトルの矢印、ハット等用) | | 9 と 0 | 数式モード/文字モード切換の開始と終了 | 行列の入力も[CTRL]を使うとラク。(Input -- Create Table/Matrix/Palette でMatrixを指定してもOK) | , | 列追加(行列の記述に使う) | | (enter) | 行追加 | 要素の移動はTABで行う。 その他CTRLを押しながら、、、 | [CTRL] . | を押すごとに、ひと階層上のグループを選択(言葉で表現しにくい) | | [CTRL] ' | グループの開け閉め(セル横のブラケットを選択した状態で) | **パレット [#f078a9f6] 入力が面倒な項(上下にギリシャ文字の添字があるとか)は、コピー/ペーストで処理するよりパレットを作った方がよい。 Input -- Create Table/Matrix/Palette からとりあえずパレットを作り、その中に適当に項を入力する(埋め尽くさなくてもOK)。そしてそこを選択して、File -- Generate Palette From Selection とするとパレットが飛び出る。あとはそこをクリックすればワンタッチで入力可能。 引数みたいなものも持たせられる。 [esc] spl [esc] として現れる黒い四角を使えば、デフォルトで表示されているパレットと同様なものが作れる。 例えば Expand[■] などとパレットに登録しておくと、 (1+x)^4 みたいな部分を選択して"Expand[■]"ボタンを押せば Expand[(1+x)^4] としてくれるわけである。 *グラフィック [#h9ea7252] ***図のマウスによる回転 [#n4985cef] << RealTime3D` ***とにかく三角形を描く [#a085cf6e] Show[Graphics3D[Polygon[{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}]]] *リスト [#ba1ad39a] lispみたいに、なんでもかんでもリストが使われている感じ。 -要素を抜きだすにはmylist[[1]]とする。1のindexが最初の要素を表す *シンボル [#obf1371e] **添字変数 [#jadb9350] 下付き文字(x_0とか)は、印刷物では他の変数と同様に扱われることが多い(添字がメモ代わりになっている)が、Mathematicaにおいてはちと扱いが異なり、そのままでは通常のシンボルとして解釈されない。つまり Integrate[Exp[-(x - x0)^2], {x, -Infinity, Infinity] (* x0 は下付き文字SubscriptBox[x, 0] のつもり *) を評価してもルートπを返してくれないのである。(もちろん、上式はx0をaなどと変えるとルートπをきちんと計算してくれる) 素直に下付き文字を他の文字に変えれば一応のworkaroundとなるが、やっぱり下付き文字の変数を使いたいことがある。そんな時は Needs["Utilities`Notation`"] として別途パッケージを読みこませておく。するとパレットが出てくるが、''このパレットを使って'' Symbolize[x0] とすると、以降x0を通常のシンボルとして扱ってくれる(内部で一対一の変換をしてくれる)。自分で手入力する場合はちょっと面倒。詳しくは公式のFAQに記述されている。 -[[添字変数はどのように作成するのですか.:http://support.wolfram.com/mathematica/packages/utilities/subscriptedvariables.ja.html]] -[[ コマンドSymbolizeがタイプできないのですが.:http://support.wolfram.com/mathematica/packages/utilities/typing.ja.html]] *計算させる [#bbb92db1] **関数の入力方法 [#z52cd8e3] 例えば Sin[x] なんてのは Sin@x x//Sin などで代用可能。例えば「ここまで入力したやつは数値で値が欲しいなー」なんてときは a+b//N とする。先頭に戻る必要がないのでラク **変数 [#yb61e885] 等号で結んで宣言する。 x=3;x^2 --> 9 使用後、クリアしないと代数演算ができない。 Clear[x]; 2 x --> 2 x いちいちこうするのは面倒なので、その式限りの代入だけがしたいなら変換規則を使う。 1 + x^2 + x^4 + x^5 /. x -> 3 --> 334 これなら、クリアしなくても直後から代数演算ができる。なおクリアは x=. などとしてもOK **方程式 [#m57aace9] Solve[x^2 + 3 x + 2 == 0, x] --> {{x -> -2}, {x -> -1}} NSolve[x^2 + 5x + 3 == 0, x] --> {{x -> -4.30278}, {x -> -0.697224}} (数値的) ややこしい形の場合、NSolveではなくFindRootを使う。 FindRoot[Sin[x] == Cos[x],{x,1}] --> {x -> 0.785398} (* pi/4 *) 複数の変数を持っていてもOK Solve[{x^2 - k^2 == 0, y^2 == x^2}, {x, y}] --> {{x -> -k, y -> -k}, {x -> -k, y -> k}, {x -> k, y -> -k}, {x -> k, y -> k}} つまり、「変数xxxについてこの式を解く」という作業はこのSolveで行える。 でも、厳格に条件を吟味するために、「解なし」とする場合もでてくる。この場合はSolveの代わりにReduceを使うと条件別に解答が得られる。 変数の数を減らすだけならEliminateが良い。 **関数 [#i5169fce] 定義は、変数と等号に注意 f[x_] := (1 + x)^2 **ベクトルと行列 [#cac1af4c] ベクトルはリストで、行列はリストのリストで記述する。 内積はドット(Dot[])。行列積も同様。 {1, 2, 3} . {a, b, c} --> a + 2 b + 3 c {{a, b}, {c, d}} . {{1, 2}, {3, 4}} --> {{a + 3 b, 2 a + 4 b}, {c + 3 d, 2 c + 4 d}} ドットが無ければ要素同士の乗算。 {1, 2, 3} {a, b, c} --> {a, 2 b, 3 c} 面倒な行列演算も可能。 Inverse[{{1, 2}, {2, 3}}] --> {{-3, 2}, {2, -1}} Eigenvalues[{{2, 0}, {1, 6}}] --> {6, 2} 要素(成分)を下付き文字で表したい場合があった。これでいいかどうかわからんが、以下のようにするとできた。 (* 実行後、MatrixForm[c] などとすると見慣れた表式が。 *) c = Table[Subscript[c, ToString[k] <> ToString[l]], {k, 6}, {l, 6}] e = Table[Subscript[e, {"x","y","z"}[[k]] <> {"x","y","z"}[[l]]], {k, 3}, {l, 3}] **微積 [#ydfd8cd9] ***微分 [#jf5bfc7e] D[Sin[x], x] --> Cos[x] D[Sin[x], {x,2}] --> -Sin[x] (二階微分) これらは偏微分的なもの。Dtは依存関係も記述できる。 ***積分 [#ecb526d7] Integrate[Sin[x], x] --> -Cos[x] (不定積分) Integrate[Sin[x], {x, 0, 1}] --> 1 - Cos[1] (定積分) NIntegrate[Sin[x], {x, 0, 1}] --> 0.459698 (数値積分) ***微分方程式 [#t93e6974] DSolve[{y'[x] == y[x], y[0] == 1}, y[x], x] --> {{y[x] -> e^x}} **その他 [#k892628e] ***総和と総積 [#ed82f261] Sum[x^i, {i,1,5}] --> x + x^2 + x^3 + x^4 + x^5 Product[x+i, {i,1,5}] --> (1+x) (2+x) (3+x) (4+x) (5+x) ***N [#pbe02afe] 数値近似を与える。 N[100!] --> 9.33262 x 10e157 桁の指定もできる。 N[100!,2] --> 9.3 x 10e157 ***Expand, Factor [#p474997f] 展開と因数分解 Expand[(a + b) (c + d)] --> a c + b c + a d + b d Factor[a c + b c + a d + b d] --> (a + b) (c + d) 関連:Collectで指定した文字のベキで整列できる。Coefficientで、指定した項の係数を抜き出せる ***Simplify, FullSimplify [#y35df075] 式の形を簡単にする。"Full"の方が強力だが時間がかかる。 Simplify[Cos[x]^4 - Sin[x]^4] --> Cos[2 x] 第2引数にassumption(変数の範囲など)を指定できる。条件によってはさらに簡略化できる。 Simplify[Sqrt[x^2]] --> Sqrt[x^2] Simplify[Sqrt[x^2],x>0] --> x ***DiracDelta [#ifa2d6b4] そのまんま、DiracのDelta関数。 *描画させる [#g775684a] ***Plot, Plot3D [#b798c69b] プロットさせる。 Plot[Sin[Exp[x]], {x, 0, 4}]; Plot3D[Cos[x] Sin[y], {x, 0, 2 Pi}, {y, 0, 2 Pi}]; 複数の関数をプロットしたい場合はリストにすればOK。 Plot[{Sin[x], Cos[x]}, {x, -Pi, Pi}] 媒介変数を使う場合はこれと似ている。 ParametricPlot[{2 Sin[t], Cos[t]}, {t, 0, 2 Pi}] プロット範囲は PlotRange で指定できる Plot[Sin[x]/x, {x, 0, 50}, PlotRange -> {Automatic, {-0.3, 1}}] ***行列 [#h56555a1] リストでなく、行列の形で表示する。 MatrixForm[A] *プログラミング [#p00f5c23] **繰り返し [#ad2c670d] Do[Print[n^2], {n, 0, 10}] Do文の中身はデフォルトで出力されないので、Print文で囲む **文字列 [#oe615d9f] 実際に使ったことはないが、ToStringとStringJoin(<>)があれば生きてゆけそうだ。 Table["a"<>ToString[i]<>"b",{i,0,3}] --> {a0b,a1b,a2b,a3b} *LiveGraphic3D [#g68145c3] [[LiveGraphic3D:http://www.vis.uni-stuttgart.de/~kraus/LiveGraphics3D/index.html]]にて公開されています。MathematicaのGraphics3Dオブジェクトを Javaアプレットを使ってマウスでグリグリ動かせるようにする優れモノです。つまり、あらかじめネタを作成しておけばWebブラウザでグリグリが見られてしまいます。当然、Javaを有効にしておかなくてはなりません。 [[面白そうだったので、球面調和関数で試してみました:http://aki.issp.u-tokyo.ac.jp/itoh/mm/sp.html]] **操作 [#dba86399] 細かいグリグリで色々できます。 ドラッグ ................. 回転 shift + 水平ドラッグ ..... 1点を中心に回転 shift + 垂直ドラッグ ..... 拡大、縮小 ctrl + ドラッグ .......... フォーカス位置変更 右ボタン + 垂直ドラッグ .. 部品除去 s ........................ ステレオ図 拡大したものは重くなります。極度の拡大に注意です。調子コイて速い動作を行うと固まります。 **作成手順 [#ad3c69c2] とりあえず、(x,y,z)の角度依存性を定めておきます。 x[theta_,phi_] := Sin[theta]Cos[phi] y[theta_,phi_] := Sin[theta]Sin[phi] z[theta_,phi_] := Cos[theta] 簡単のために球面調和関数を定義しなおしておきます。 sp00[theta_, phi_] := SphericalHarmonicY[0, 0, theta, phi] 以下のようにすれば図が見られます。 gr00 = First[ ParametricPlot3D[ {Abs[sp00[theta, phi]] x[theta,phi], Abs[sp00[theta, phi]] y[theta,phi], Abs[sp00[theta, phi]] z[theta,phi]}, {theta, 0, Pi}, {phi, 0, 2 Pi}] ]; 軸もあった方が参考になるので、以下のようにします。文字もつけます。 xline = Graphics3D[Line[{{-1, 0, 0}, {1, 0, 0}}]]; yline = Graphics3D[Line[{{0, -1, 0}, {0, 1, 0}}]]; zline = Graphics3D[Line[{{0, 0, -1}, {0, 0, 1}}]]; xnote = Graphics3D[Text[StyleForm["x",FontSize -> 20, FontWeight -> "Bold"],{1,0,0}]]; ynote = Graphics3D[Text[StyleForm["y",FontSize -> 20, FontWeight -> "Bold"],{0,1,0}]]; znote = Graphics3D[Text[StyleForm["z",FontSize -> 20, FontWeight -> "Bold"],{0,0,1}]] そして、 Show[ Graphics3D[gr00, LightSources -> {{{1, 1, 1}, GrayLevel[1]},{{-1, -1,-1}, RGBColor[1,1,0]}}], xline, yline, zline, xnote, ynote, znote, Boxed -> False ] とすると、軸も一緒に表示できます。物体の光の当たり方ですが、光源がひとつだとちょっと淋しいので、色違いのふたつの光源を逆方向に設置しました。これで見てくれを確かめた後に、HTMLに取り込む作業をします。outputの番号を確かめ、 InputForm[%番号] とすると、長い文字列が出てくるので、Graphics3D以下をテキストで保存します。例えばファイル名を"test.m"などとすると、 <HTML> <APPLET ARCHIVE="live.jar" CODE="Live.class" WIDTH=300 HEIGHT=300 ALIGN=LEFT> <PARAM NAME=BGCOLOR VALUE=#FFFFFF> <PARAM NAME=MAGNIFICATION VALUE=2> <PARAM NAME=INPUT_FILE VALUE="test.m"> </APPLET> </HTML> というHTMLを、test.mと同じディレクトリに作ります。そこに、本家のサイトから入手できる"live.jar"も入れておきます。これで、そのHTMLを開いたらグリグリができるはずです。 *アンインストールとライセンス変更 [#j71d49f5] 過去に所属機関のサイトライセンスにてインストールしたものから、個人購入のものに移行したいと思い、再インストールを試みた。 +コントロールパネルよりアンインストール +C:\Program Files\Wolfram Research以下削除 +C:\Documents and Settings\(username)\Application Data\Mathematica以下削除 +C:\Documents and Settings\All Users\Application Data\Mathematica以下削除 +CDよりインストール とするとうまくいった。All Users以下のディレクトリを消さないと、以前のライセンス情報が残ってしまい、新しいライセンスに移行できない。