文中
-->
という矢印は、私が勝手に決めた「左の入力に対し、右の出力を得る」という記号。
[esc] ... [esc] と、エスケープキーを挟んでタイプすると特殊文字が表示される。詳しくはエイリアス参照。
ii | 虚数単位 |
ee | 自然対数 |
p | 円周率 |
pd | 偏微分 |
inf | 無限大 |
int | 積分記号 |
sum | 総和 |
co | 複素共役 |
tr | 転置(行列) |
hb | エイチスラッシュ (Dirac定数) |
アルファベット | 各種ギリシャ文字 |
[CTRL]を押しながら....
6 or ^ | 累乗 |
/ | 分数 |
2 | 根号(√) |
_ か - (underbarかハイフン) | 下添字 |
& | 真上添字(ベクトルの矢印、ハット等用) |
9 と 0 | 数式モード/文字モード切換の開始と終了 |
行列の入力も[CTRL]を使うとラク。(Input -- Create Table/Matrix/Palette でMatrixを指定してもOK)
, | 列追加(行列の記述に使う) |
(enter) | 行追加 |
要素の移動はTABで行う。
その他CTRLを押しながら、、、
[CTRL] . | を押すごとに、ひと階層上のグループを選択(言葉で表現しにくい) |
[CTRL] ' | グループの開け閉め(セル横のブラケットを選択した状態で) |
入力が面倒な項(上下にギリシャ文字の添字があるとか)は、コピー/ペーストで処理するよりパレットを作った方がよい。 Input -- Create Table/Matrix/Palette からとりあえずパレットを作り、その中に適当に項を入力する(埋め尽くさなくてもOK)。そしてそこを選択して、File -- Generate Palette From Selection とするとパレットが飛び出る。あとはそこをクリックすればワンタッチで入力可能。
引数みたいなものも持たせられる。
[esc] spl [esc]
として現れる黒い四角を使えば、デフォルトで表示されているパレットと同様なものが作れる。
例えば
Expand[■]
などとパレットに登録しておくと、
(1+x)^4
みたいな部分を選択して"Expand[■]"ボタンを押せば
Expand[(1+x)^4]
としてくれるわけである。
lispみたいに、なんでもかんでもリストが使われている感じ。
下付き文字(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に記述されている。
例えば
Sin[x]
なんてのは
Sin@x x//Sin
などで代用可能。例えば「ここまで入力したやつは数値で値が欲しいなー」なんてときは
a+b//N
とする。先頭に戻る必要がないのでラク
等号で結んで宣言する。
x=3;x^2 --> 9
使用後、クリアしないと代数演算ができない。
Clear[x]; 2 x --> 2 x
いちいちこうするのは面倒なので、その式限りの代入だけがしたいなら変換規則を使う。
1 + x^2 + x^4 + x^5 /. x -> 3 --> 334
これなら、クリアしなくても直後から代数演算ができる。なおクリアは
x=.
などとしてもOK
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が良い。
定義は、変数と等号に注意
f[x_] := (1 + x)^2
ベクトルはリストで、行列はリストのリストで記述する。
内積はドット(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}]
D[Sin[x], x] --> Cos[x] D[Sin[x], {x,2}] --> -Sin[x] (二階微分)
これらは偏微分的なもの。Dtは依存関係も記述できる。
Integrate[Sin[x], x] --> -Cos[x] (不定積分) Integrate[Sin[x], {x, 0, 1}] --> 1 - Cos[1] (定積分) NIntegrate[Sin[x], {x, 0, 1}] --> 0.459698 (数値積分)
DSolve[{y'[x] == y[x], y[0] == 1}, y[x], x] --> {{y[x] -> e^x}}
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[100!] --> 9.33262 x 10e157
桁の指定もできる。
N[100!,2] --> 9.3 x 10e157
展開と因数分解
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で、指定した項の係数を抜き出せる
式の形を簡単にする。"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
そのまんま、DiracのDelta関数。
プロットさせる。
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}}]
リストでなく、行列の形で表示する。
MatrixForm[A]
Do[Print[n^2], {n, 0, 10}]
Do文の中身はデフォルトで出力されないので、Print文で囲む
実際に使ったことはないが、ToStringとStringJoin(<>)があれば生きてゆけそうだ。
Table["a"<>ToString[i]<>"b",{i,0,3}] --> {a0b,a1b,a2b,a3b}
LiveGraphic3Dにて公開されています。MathematicaのGraphics3Dオブジェクトを Javaアプレットを使ってマウスでグリグリ動かせるようにする優れモノです。つまり、あらかじめネタを作成しておけばWebブラウザでグリグリが見られてしまいます。当然、Javaを有効にしておかなくてはなりません。
細かいグリグリで色々できます。
ドラッグ ................. 回転 shift + 水平ドラッグ ..... 1点を中心に回転 shift + 垂直ドラッグ ..... 拡大、縮小 ctrl + ドラッグ .......... フォーカス位置変更 右ボタン + 垂直ドラッグ .. 部品除去 s ........................ ステレオ図
拡大したものは重くなります。極度の拡大に注意です。調子コイて速い動作を行うと固まります。
とりあえず、(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を開いたらグリグリができるはずです。
過去に所属機関のサイトライセンスにてインストールしたものから、個人購入のものに移行したいと思い、再インストールを試みた。
とするとうまくいった。All Users以下のディレクトリを消さないと、以前のライセンス情報が残ってしまい、新しいライセンスに移行できない。