29.4. 関数の計算と微積分
Mathematica には豊富な関数セットが用意されており、私たちが日頃扱うような有名な関数は自由に使うことができます。また、それらの関数を用いた微積分の計算も行うことができます。この節では関数の取り扱い方を調べましょう。
初等関数 #
よく知られた関数は、そのまま名前を打ち込めば使えます。
たとえば Cos[0] と入力して
を押すと、1 が帰ってきます。最初の C が大文字であることにだけ注意してください。Sin や Tan も同様に使えます。
Cos, Sin, Tan の逆数はそれぞれ Sec, Csc, Cot です。また逆三角関数は ArcSin, ArcCos, ArcTan で与えられます。逆三角関数は周期関数の逆関数だから多価関数になりますが、それぞれ ArcSin[0]=0, ArcCos[1]=0, ArcTan[0]=0 となる分枝が選ばれています。たとえば Plot[ArcTan[x], {x, -9, 9}] とすることにより、区間 [-9, 9] の上で ArcTan のグラフが描けます。
グラフの描画についてはここでは深入りせず、後ろの節 29.6. グラフの描き方 で改めて解説します。いまは Plot 関数でグラフを描けるということだけ頭においてください。
自然対数は Log 関数で計算できます。
この e は普通のアルファベット e とは異なるので、基本数学アシスタントのパレットにある e ボタンから入力するか、キーボードで大文字の E を打ってください。
対数の底を b として計算するには Log[b,z] とします。特に常用対数と 2 を底とする対数は使用頻度が多いので、Log10, Log2 という専用の関数が用意されています。
指数関数はパレットの巾乗記号でも計算できますし、また Exp 関数で自然対数の底 E の x 乗が計算できます。
Plot[Exp[x^-2], {x, -3, 3}] とすれば、区間 [-3,3] 上で Gaussian のグラフが描けます。
Gaussian は大変有名な関数で、至る所に姿を見せます。たとえば正規分布の確率密度関数はこの形をしています。
少し発展的な話題になりますが、指数関数と対数関数は複素数に対しても計算できます。複素数に対する指数関数は巾級数で定義され、複素平面全体で収束することが知られています。たとえば \(e^{i\pi}\) を計算させると -1 になります。
対数関数は指数関数の逆関数として定義されます。指数関数は \(2\pi i\) を周期に持つので対数関数は複素平面上の多価関数となり、分枝を決めると 1 価関数になります。Mathematica の Log は複素平面内の半直線 \((-\infty,0]\) にカットを入れ、Log[1]=0 となる分枝を選んでいます。たとえば Log[I] と入力すると \(i\pi/2\) が表示されます。
分枝の選び方がどうなっているかは Log[Cos[t] + I Sin[t]] の虚部のグラフを描けば分かります。興味のある人はここまでの例を参考に描いてみてください。
もちろん双曲線関数も用意されています。三角関数の時と同様に Cosh, Sinh, Tanh と打てば、双曲線関数の計算ができます。たとえば Cosh[t] のグラフを描かせてみましょう。このグラフは、両端を持って紐を垂らしたときの形 (懸垂線) になっています。
さらに関数名の頭に Arc をつけることで、双曲線関数の逆関数が使えます。たとえば ArcCosh のグラフを描くと、上で描いた Cosh[x] のグラフを直線 x=y で折り返したグラフが現れます。
極限の計算 #
極限の計算は Limit 関数を使うとできます。例えば \(x\to 0\) のときの Sin[x]/x の値は、次のように求まります。矢印は基本数学アシスタントのパレットから入力するか、キーボードで -> と入力してください。
極限を取る向きを指定するには Direction オプションを使います。たとえば 1/x の x=0 における左極限を取るときは、x を左から右へ向かって 0 に近づけるので Direction->1 とします。
Direction->-1 とすれば近づく方向が右から左となり、右極限を取ることができます。
微分 #
微分は D という関数を用いるか、あるいはパレットで微分記号のボタンを押すことで行います。ここでは関数 D を使って説明します。たとえば D[x^2,x] は \(x^2\) という関数を x で微分するという命令です。実際に入力して
を押してみましょう。確かに 2x が出てきます。
関数がどんな複雑な格好をしていても、微分は計算できます。また関数 F[x] の n 階微分を計算するには D[F[x], {x, n}] とします。たとえば次の例では Gaussian を 5 階微分した後で、係数の Exp を消去しています。
これは Hermite 多項式と呼ばれる有名な多項式です。
関数 D は微分する変数を引数に持つので、偏微分もまったく同様に計算できます。次の計算が正しいことを確かめてください。
微分ができるので Taylor 展開をすることもできます。たとえば指数関数の原点における Taylor 展開を5次まで計算するには Series[Exp[x], {x ,0 , 5}] と入力します。
今の使い方から推測できると思いますが {x, 0, 5} はそれぞれ微分する変数、Taylor 展開の中心、次数を表します。もう一つ例を挙げておきます。
ちなみに、関数の値が発散している点の回りでも Series 関数を使って展開ができることがあります。たとえば \(1-x^2\) の逆数は x=1 で発散しますが、この点を中心に Series で展開すると x-1 の (-1) 乗の項が登場します。
このような展開は Laurent 展開と呼ばれます。複素領域上の有理型関数であれば極のまわりで Laurent 展開ができます。しかし Mathematica と言えど、真性特異点を中心とする Laurent 展開はできないようです。
積分 #
関数の積分をするには基本数学アシスタントのパレットを使います。パレット内にあるタイプセットの項目を開けば、いかにも不定積分と定積分らしいボタンが見えるはずです。これを使って式を入力するだけで、積分計算ができます。たとえば次の図のように入力して を押すと \(x^2\) の不定積分が求まります。
こんな複雑な計算もできたりします。
被積分関数が簡単であっても、不定積分の結果は複雑になることがあります。数学で知られた特殊関数で表示可能な場合、Mathematica は特殊関数を使って計算してくれます。たとえば 根号の中に 3 次式や 4 次式が入っている関数を積分すると、一般には楕円関数が現れることがあります。
積分区間の中や境界で関数の値が発散するような場合でも、積分値が収束すれば計算ができます。
Fourier 変換と超関数 #
FourierTransform 関数を使うと Fourier 変換を計算することができます。ためしに Gaussian を Fourier 変換してみましょう。
すると Gaussian は Fourier 変換で再び Gaussian になることが分かります。Fourier 変換の定義には規格化定数の付け方などに応じていくつかの流儀がありますが、デフォルトでは次の式で定義されています。FourierTransform 関数を使って計算した結果と一致することを確認してください。
普通の意味では関数でない関数 (Schwarz の超関数) も、一部 Mathematica で使うことが出来ます。実用上最も重要なのは Dirac のデルタ関数です。Dirac のデルタ関数は Mathematica 内で DiracDelta という名前になっています。
また、次のグラフで定義される階段状の関数を Heaviside のシータ関数と言います。
この関数を超関数の意味で微分すると Dirac のデルタ関数になりますが、Mathematica ではその計算もできます。
特殊関数など #
Mathematica には様々な特殊関数が用意されています。
とえばガンマ関数は Gamma という名前で登録されています。
ゼータ関数を定義する巾級数の収束域は複素平面上の領域 { Re(z) > 1/2 } ですが、ゼータ関数は複素平面全体に解析接続することができます。区間 [-7, -1] 上でグラフを描いてみると、負の偶数が零点になっていることがわかります。
負の偶数に対してゼータ関数の値が 0 になることは関数等式を見れば明らかで、これらは自明な零点と呼ばれます。また、実部が 1/2 である直線上でゼータ関数の絶対値のグラフを描くと、いくつかの零点が見えます。
Riemann 予想は、自明でないゼータ関数の零点が全てこの直線の上にあるという主張です。この記事を執筆した 2012 年 3 月の段階では未解決の問題で、クレイ数学研究所によって 100 万ドルの賞金がかけられています。
これ以外にも Mathematica ではたくさんの関数が使えます。超幾何関数や楕円関数、Hermite 多項式や Legendre 多項式を初めとする直交多項式系などはほとんど全て入っています。詳しい使い方は Mathematica のリファレンスに書いてありますので、必要に応じて参照してください。