Mathematica 入門 はじめに Mathematica は極めて高度かつ有用な機能を有する研究支援統合ソフトウェアです. 理工系学生にとって ( それどころか研究者にとっても ) 非常に便利なツールですから, 基本的な操作方法に慣れておくと, いざというときにとても重宝します. 入力方法 キーボードからの入力 Mathematica では, 数式はすべてキーボードから入力できるようになっています. 例えばベキ乗 2 の 37 乗 は次のように入力します. 2^37 この状態で Shift + Return(Shift キーを押しながら Return) と押せば, 計算結果を表示してくれます. In[1]:= 2^37 Out[1]= 137 438 953 472 2 Control ^ 37 として入力することもできます. In[2]:= 2 37 Out[2]= 137 438 953 472 パレットからの入力メニューから Palettes > BasicInput と選ぶと, 様々な数学記号が現れます. この中からまず を選び, 初めに大きい方の ( 黒くなっている ) ボックスに 2 を入力 : 2 引き続き tab キーで小さい方のボックスに移動して, そこに 37 を入力, その後 Shift + Return と押せば : In[3]:= 2 37 Out[3]= 137 438 953 472 かけ算記号の省略 2かける3 を計算するには In[4]:= 2 3 Out[4]= 6
としてもよいし,* を省略し, その代わりにスペースを空けてもよい. In[5]:= 2 3 Out[5]= 6 数値計算 厳密な代数計算 整数および有理数については, 厳密な計算がなされます. In[6]:= Out[6]= In[7]:= Out[7]= 2^512 13 407 807 929 942 597 099 574 024 998 205 846 127 479 365 820 592 393 377 723 561 443 721 764 030 073 546 976 801 874 298 166 903 427 690 031 858 186 486 050 853 753 882 811 946 569 946 433 649 006 084 096 2^10 10^3 128 125 近似計算 厳密な値でなく, 小数表示 ( もしくは近似的な値 ) が知りたい場合は, 関数 N を用います. In[8]:= N 2^10 10^3 Out[8]= 24 あるいは, 一旦 In[9]:= Out[9]= 2^10 10^3 128 125 と計算しておいて, 次のようにしてもよい. In[10]:= N Out[10]= 24 Tips: ここで用いた % は すぐ前の結果 を意味します. 同様に,2 つ前の結果は %%,3 つ前は %%% など. 同様なことが関数についても当てはまります. In[11]:= Out[11]= Sin 1 Sin 1 これでは具体的数値は得られないので In[12]:= N Sin 1 Out[12]= 0.841471 とします. さらに正確な値が知りたければ,
In[13]:= N Sin 1, 200 Out[13]= 0.84147098480789650665250232163029899962256306079837106567275170999191040439123966894863 974354305269585434903790792067429325911892099189888119341032772921240948079195582676660 699990776401197840878273257 とすれば,200 桁まで計算してくれます. 複素数 Mathematica では複素数も扱うことができます. 虚数単位は I で表します. In[14]:= Out[14]= 1 2 I ^2 3 4 記号計算 多項式 In[15]:= a b c ^5 Out[15]= a b c 5 これを展開したければ, 関数 Expand を使います. In[16]:= Out[16]= Expand a 5 5 a 4 b 10 a 3 b 2 10 a 2 b 3 5 a b 4 b 5 5 a 4 c 20 a 3 b c 30 a 2 b 2 c 20 a b 3 c 5 b 4 c 10 a 3 c 2 30 a 2 b c 2 30 a b 2 c 2 10 b 3 c 2 10 a 2 c 3 20 a b c 3 10 b 2 c 3 5 a c 4 5 b c 4 c 5 あるいはもちろん In[17]:= Out[17]= Expand a b c ^5 a 5 5 a 4 b 10 a 3 b 2 10 a 2 b 3 5 a b 4 b 5 5 a 4 c 20 a 3 b c 30 a 2 b 2 c 20 a b 3 c 5 b 4 c 10 a 3 c 2 30 a 2 b c 2 30 a b 2 c 2 10 b 3 c 2 10 a 2 c 3 20 a b c 3 10 b 2 c 3 5 a c 4 5 b c 4 c 5 としてもよい. 逆に, この式を因数分解するには関数 Factor を用います. In[18]:= Factor Out[18]= a b c 5 Tips: 与えられた式を簡単にしたい場合, 一般には関数 Simplify あるいは FullSimplify を用います. 後者の方が単純化能力は高いですが, 計算時間がかかります. In[19]:= Simplify Out[19]= a b c 5 In[20]:= FullSimplify Out[20]= a b c 5 方程式 方程式 x 3 x 2 3 x 1 0 を解くこともできます.
In[21]:= Solve x^3 x^2 3 x 1 0, x Out[21]= x 1, x 1 2, x 1 2 Tips : 方程式を意味する等号は = ではなく = = ( イコールが 2 つ ) を用います. 解が代数的に求まらないような方程式に対しても, 関数 FindRoot を用いて数値的な近似解を求めることができます. 例えば方程式 Sin[x] + 1 = x は ( 下のグラフからも分かるように ) x = 2 の近くに解を持ちます. In[22]:= Plot Sin x 1, x, x, Pi, Pi, PlotStyle Red, Blue 3 2 1 Out[22]= 3 2 1 1 2 3 1 2 しかし方程式 Sin[x] + 1 = x の解は代数的には求められません. 3 In[23]:= Out[23]= Solve Sin x 1 x, x Solve::tdep : 本質的に非代数的な方法で解かれる変数が方程式に含まれているようです. Solve 1 Sin x x, x そこで, 数値による解を求めてみましょう. In[24]:= Out[24]= FindRoot Sin x 1 x, x, 2 x 1.93456 ここでは,x = 2 から出発して近似数値解を求めています. 微分 微分操作は関数 D を用います. In[25]:= D x^sin x, x Out[25]= x Sin x Cos x Log x Sin x x パレット BasicInput を用いて次のように入力し, 計算することもできます. In[26]:= x x Sin x Out[26]= x Sin x Cos x Log x Sin x x 積分 積分操作は関数 Integrate を用います.
In[27]:= Integrate x^3 2 x 5 x^3 1 ^2, x Out[27]= 1 18 12 3 x x 22 3 ArcTan 1 2 x 14 Log 1 x 7 Log 1 x x 2 1 x 3 3 パレット BasicInput を用いて次のように入力し, 計算することもできます. In[28]:= Out[28]= 1 18 x 3 2 x 5 x x 3 1 2 12 3 x x 22 3 ArcTan 1 2 x 14 Log 1 x 7 Log 1 x x 2 1 x 3 3 グラフィクス 様々な関数やデータを視覚化することができます. 2 D グラフィックス 関数 Sin[x] のグラフを描いてみよう. In[29]:= Plot Sin x, x, 0, 2 Pi, PlotStyle Red Out[29]= 1 2 3 4 5 6 この例では, Sin[x] のグラフを区間 [0, 2 Π] で表示しています.Pi は円周率 Π です. ここで,Plot というコマンドがどのようにグラフを生成しているか簡単に説明しておきます. 次の計算結果を見てください.( 意味が分からなくても気にしないで! なお, この計算は Mathematica Version 6 で行っています.Version 5 以前でこれと同じグラフを描くには,test[[1]][[1]][[3]][[2]][[1]]] の部分を test[[1]][[1]][[1]][[1]] で置き換えてください.) In[30]:= test Plot Sin x, x, 0, 2 Pi, DisplayFunction Identity ; Show Graphics Thickness 01, Map Line 1, 0, &, test 1 1 3 2 1, Axes Automatic Out[31]= 1 2 3 4 5 6 Plot は, 縦の棒の部分での Sin[x] の値を計算して, その結果をつないでグラフを作ります. グラフの曲がっているところは細かく, 直線的なところは荒くサンプリングしています.Mathematica はかなり賢いですね!
パラメタ表示された曲線も描くことができます. 試しにリサジュー図形を描いてみましょう. In[32]:= ParametricPlot Cos 3 t, Sin 5 t, t, 0, 2 Pi Out[32]= 3 D グラフィックス 関数 (x, y) --> x 2 y x 4 y 2 を描くには関数 Plot3D を用います. In[33]:= Plot3D x^2 y x^4 y^2, x, 1, 1, y, 1, 1 Out[33]= しかしこれでは情報が荒すぎて, 原点付近での挙動が良く分かりません. そんなときは, 関数の値を計算するグリッド数を大きくします.( ついでに網の目も消してみましょう.) In[34]:= Plot3D x^2 y x^4 y^2, x, 1, 1, y, 1, 1, PlotPoints 120, 120, Mesh False データサイズが大きいので, グラフィクス結果を表示することは ( この資料では ) やめておきますが, だいぶマシになったことと思います. マウスでつかんでグルグル廻してみると, もっと様子が分かります. 等高線を描いてみるのも, 時に有用となります.
In[35]:= ContourPlot"x ^ 2 y! $x ^ 4 $ y ^ 2%, &x, %1, 1', &y, %1, 1'# Out[35]=!!!! 高いところほど白く 低いところほど暗く表示されています パラメタ表示された曲線や曲面も描くことができます 試しにアステロイド的球面を描いてみましょう In[36]:= ParametricPlot3D"&Cos"s# ^ 3 Cos"t# ^ 3, Sin"s# ^ 3 Cos"t# ^ 3, Sin"t# ^ 3', &s, 0, 2&Pi', &t, 0, 2&Pi', PlotRange ( &&%1, 1', &%1, 1', &%1, 1''#!! Out[36]=!!!!
リスト 中括弧 { } で囲まれたデータをリストと呼びます. 例えば HCl 水溶液の氷点降下の実験データは, 平面座標のリストとして次のように与えます. In[37]:= Out[37]= mylist 0.627, 0.228, 1.179, 0.434, 1.245, 0.455, 1.474, 42, 2.228, 0.815, 3.526, 1.286, 4.520, 1.644, 6.879, 2.494, 10.633, 3.843 0.627, 0.228, 1.179, 0.434, 1.245, 0.455, 1.474, 42, 2.228, 0.815, 3.526, 1.286, 4.52, 1.644, 6.879, 2.494, 10.633, 3.843 Tips : Mathematica の組み込み関数はすべて 大文字 で始まります. ですから, 自分で定数 変数 関数などを定義する場合は 小文字 で始まる名前をつけることをお勧めします. これをグラフで表示するには次のようにします. In[38]:= ListPlot mylist, AxesOrigin 0, 0, Joined True, Mesh All, MeshStyle Red, PointSize Medium, PlotStyle Blue 3 Out[38]= 2 1 2 4 6 8 10 あるルールに従ってリストを自動生成するには Table という関数を用います. 例えば, 数列 a(n)=(1+1/n)^n が Napier の数 =2.71828... に収束する様子を視覚化したい場合には, 次のようにします. In[39]:= napier Table 1 1 n ^n, n, 1, 50 ; Show ListPlot napier, PlotStyle Red, Plot Exp 1, x, 0, 50, PlotStyle Blue, PlotRange 2, 2.85, AxesLabel "n", "a n " 2.8 a n 2.6 Out[40]= 2.4 2.2 0 10 20 30 40 50 n 上の例では関数 Table を用いて繰り返し計算を行いましたが, 同様なことを, コマンド Do を用いて行うことも可能です. In[41]:= Do 1 1 n ^n, n, 1, 50 これを実行しても何も表示してはくれませんが, 計算はちゃんと実行してくれています. 結果を表示させるには, 次のようにします.(n=50 まで表示すると大変なので, ここでは n=10 までにしておきます.)
In[42]:= Do Print 1 1 n ^n, n, 1, 10 2 9 4 64 27 625 256 7776 3125 117 649 46 656 2 097 152 823 543 43 046 721 16 777 216 1 000 000 000 387 420 489 25 937 424 601 10 000 000 000 Do は次のような使い方もできます. In[43]:= t x; Do t n 1 t, n, 1, 5 ; t Out[45]= 1 5 4 3 1 2 1 1 1 1 x 行列 上で述べたリストの多次元版を考えることにより, 行列も表現できます. 例えば In[46]:= Out[46]= Table a^i b^j, i, 1, 3, j, 1, 2 a b, a b 2, a 2 b, a 2 b 2, a 3 b, a 3 b 2 は次のように,3 2 行列と同一視されます. In[47]:= MatrixForm Out[47]//MatrixForm= a b a b 2 a 2 b a 2 b 2 a 3 b a 3 b 2 行列の積はドット記号. もしくは関数 Dot で行います. 例えば In[48]:= mata 1, 2, 3, 4, 5, 6 ; matb a, x, b, y, c, z ;
はそれぞれ行列 In[50]:= MatrixForm mata MatrixForm matb Out[50]//MatrixForm= 1 2 3 4 5 6 Out[51]//MatrixForm= a x b c y z を表していて, これらの積は In[52]:= Out[52]= mata.matb MatrixForm a 2 b 3 c, x 2 y 3 z, 4 a 5 b 6 c, 4 x 5 y 6 z Out[53]//MatrixForm= a 2 b 3 c x 2 y 3 z 4 a 5 b 6 c 4 x 5 y 6 z および In[54]:= Out[54]= matb.mata MatrixForm a 4 x, 2 a 5 x, 3 a 6 x, b 4 y, 2 b 5 y, 3 b 6 y, c 4 z, 2 c 5 z, 3 c 6 z Out[55]//MatrixForm= a 4 x 2 a 5 x 3 a 6 x b 4 y 2 b 5 y 3 b 6 y c 4 z 2 c 5 z 3 c 6 z となります. ヘルプ 新しい関数の使い方を調べたい, あるいは関数の使い方を忘れてしまった, といった場合には,Help 機能を使いましょう.Mathematica では極めて充実したヘルプ機能が利用できます. 例えば Expand の使い方を忘れてしまったら : In[56]:=? Expand Expand expr 式 expr における積と正の整数ベキを展開する. Expand expr,patt パターン patt にマッチする項を含まない式 expr の要素の展開を避ける. 関数の名前がうろ覚えの場合, 任意の長さの文字列を表す * を使って, 候補となる関数のリストを表示することもできます.
In[57]:=? Plot System` Plot PlotLabel PlotRangePadding Plot3D PlotMarkers PlotRegion Plot3Matrix PlotPoints PlotStyle PlotDivision PlotJoined PlotRange PlotRangeClipping もちろん, メニューからヘルプを呼び出すこともできます. いろいろと試してください.