MathJax を使う

作成日:2013-11-24
最終更新日:

MathJax による表現

最近この数年はASCIIMathMLを使い続けてきたのだが、 LaTeX や MathML を使った場合に比べて数式が美しくないと思っていた。 いっぽう、Web での数式表現は MathJax がいいということは聞いていたが、 LaTeX や MathML での表現でしか使えないと思い込んでいて、ろくに調べずにいた。 ところが今日、MathJax でも ASCIIMathML の表記法が使えるとわかり、試してみた。 すなわち、MathJax は LaTeX や MathML だけでなく、 ASCIIMathML の表記も理解してMathJax 固有の表示をすることができる。

MathJax の使い方

ASCIIMathML は自前で js ファイルを持ってきたが、 MathJax はリモートにあるサーバを使うのがよさそうだ。 これには、<head> と </head> の間で、次の行を書けばよい。

<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=AM_HTMLorMML"></script>

ASCIIMathML と同じように簡単な表現で式が書ける。以下、対比してみよう。 なお、文字入力の事例は、福井高専の MathMLマニュアル (toshichan.be.fukui-nct.ac.jp)から、 4章の MathML Tips 集による。 ただし、文字入力で前後につけるバッククォーテーションは省略している。

なお、MathJax は、Mozilla/Firefox 系 や Opera, Safari, Google Chrome のブラウザで表示できたことを確認した。 Internet Explorer でも使えるが、 MathML を理解させるためのアドオンである MathPlayer はかえってじゃまになるので、 もしブラウザにインストールしているのであれば無効にしなければならない。

事例の対比:基本編

文字入力表現説明
a+b+3`a+b-3`加法、減法
a b`a b`乗法
1/2+1/x-x/3`1/2+1/x-x/3`除法
(a+b)-3`(a+b)-3`カッコ
(x-1)/3+1/(a+b)-(x+3)/(x-c)`(x-1)/3+1/(a+b)-(x+3)/(x-c)`分数と式
x^2-3^x`x^2-3^x`べき乗
sqrt(x)+sqrt(2)`sqrt(x)+sqrt(2)`根号
a=b`a=b`等号
a>b`a>b`不等号
a>=b`a>=b`等号つき不等号
a<b`a < b`不等号
a<=b`a<=b`等号つき不等号
f(x)`f(x)`関数
x^(y-1/3)`x^(y-1/3)`
root(3)(x)+root(a)(3)`root(3)(x)+root(a)(3)`
sin(x+3)`sin(x+3)`
pi`pi`
log_3(x)`log_3(x)`
log_e(x)+e^x`log_e(x)+e^x`
sin^-1(x)`sin^-1(x)`
sum_(k=1)^20k_i`sum_(k=1)^20k_i`
{::}_(\ n)C_r`{::}_(\ n)C_r`
vec v`vec v`
(a_x,a_y+b_y)`(a_x,a_y+b_y) `
((x,3),(1,y))`((x,3),(1,y)) `行列
|(x,3),(1,y)|`|(x,3),(1,y)| `行列式
dy/dx`dy/dx`微分
intf(x)dx`intf(x)dx`不定積分
int_0^1f(x)dx`int_0^1f(x)dx`定積分
int_1^oo1/x^2dx`int_1^oo1/x^2dx`無限大
|-x|`|-x|`絶対値
lim_(x->0)sin(x)`lim_(x->0)sin(x)`極限
4+3i`4+3i`虚数
(delz)/(delx)`(delz)/(delx)`偏微分
(d^2y)/dx^2`(d^2y)/dx^2`2 階微分

事例の対比:応用編

下記は、基本編以外の記号である。

文字入力表現説明
bbA bba`bbA bba`太字。
bbbC bbbN bbbQ bbbR bbbZ`bbbC bbbN bbbQ bbbR bbbZ`二度打ち体
ccA ccB ccC ccE ccF ccH ccI ccL ccM ccR`ccA ccB ccE ccF ccH ccI ccL ccM ccR`カリグラフ体(スクリプト体)
frA frB frC frH frI frR frZ`frA frB frC frH frI frR frZ`フラクトゥール
ttA tta`ttA tta`テレタイプ
dotA dota`dotA dota`(時間に関する)一階微分
ddotA ddota`ddotA ddota`(時間に関する)二階微分
|__x__|`|__x__|`床関数。実数 `x` に対する `x` 以下の最大の整数
|~x~|`|~x~|`天井関数。実数 `x` に対する `x` 以上の最小の整数
nn`nn`集合の交わり
nnn`nnn`集合の交わり。(`sum` のように添字集合とともに用いる)
uu`uu`集合の結び
uuu`uuu`集合の結び。(`sum` のように添字集合とともに用いる)
sub`sub``A sub B` は A は B に含まれる
sup`sup``A sup B` は A は B を含む

ASCIIMathML による証明の一例

せっかくなので、ASCIIMathML 記法と MathJax による表示によって数学の一証明を記述してみる。 題材は、`pi` が無理数であるという証明である。この証明は、 大阪理工大学(現:近畿大学)の学生であった岩本義和(湯上義和)氏による。 これを真鍋和弘氏(札幌篠路高校)が、http://www7a.biglobe.ne.jp/~watmas/dosukyo/circle-reports/irrationalnumberbyManabe.pdf にてこの証明を紹介している。これを多少追記して記述してみる。

定理1

`pi` は無理数である。

補題1

`pi^2` が無理数ならば、`pi` は無理数である。

証明

`pi` が有理数ならば、`pi^2` は有理数である(仮に `pi = a/b` という形の有理数ならば、`pi^2 = (a^2)/(b^2)` という形の有理数になる)。この対偶をとれば、補題1が得られる。

補題2

次の関数 `f(x)`
`f(x) = x^n (1-x)^n / (n!) , n in NN`
は、次の3つの性質を満たす。

  1. `f(x) = 1/(n!) sum_(m=n)^(2n)c_m x^m` という多項式であり、係数 `c_m` はすべて整数である。
  2. ` 0 < x < 1` に対して `0 < f(x) < 1/(n!)`
  3. `AAk(>=0)` に対して、関数 `f` の `k` 回微分 `f^((k))(x)` を考える。 `x` が 0 と 1 のときの微係数 `f^((k))(0)` と `f^((k))(1)` はいずれも整数である。

証明

  1. `f(x) = x^n (1-x)^n / (n!) = x^n / (n!) (1-x)^n = x^n / (n!) sum_(m=0)^n ({::}_(\ n)C_m(-x)^(n-m)) = 1/(n!) sum_(m=n)^(2n) ((-1)^(m-n){::}_(\ 2n)C_m)x^m `
    ここで、`{::}_(\ n)C_m` は2項係数であるから証明された。
  2. `0 < x < 1` では `x^n < 1 ` かつ ` (1-x)^n < 1` 。よって `f(x)` の式から成り立つ。
  3. `x = 0` のときを考える。`k < n` であれば、`f^((k))(x)` の定数項はないから、`f^((k))(x) = 0`。 `k > 2n` であれば、`f^((k)) = 0` であるから `f^((k))(x) = 0` 。`n < k <= 2n` のときは、1. から `f^((k))(0) = (k!)/(n!) c_k` であるが、`k > n` だから `(k!)/(n!)`は整数。かつ `c_k` は 1. より整数である。したがって、`f^((k))(0)` は整数である。
    `x = 1` のときを考える。`f(x) = f(1-x)` が恒等的に成り立つから、`f^((k))(1-x) = (-1)^kf^((k))(x)` である。 よって、`f^((k))(1) = (-1)^(k)f^((k))(0)` であり、i で証明した `f^((k))(0)` が整数であることと合わせ、 `f^((k))(1)` も整数である。

補題3

任意の正の実数 `c` に対し、十分大きな整数 `n` をとれば、`(c^n) / (n!)` はいくらでも小さくすることができる。

証明

正の整数 `m` を `m > 2c` となるようにとる。すると `c / m < 1 / 2` であるから、 `n` を `m` より大きい整数とすれば、

`(c^n) / (n!)` ` = (c * c * * * c) / (1 * 2 * * * m) * (c / (m + 1)) * (c / (m + 2)) * * * c/n`
` < (c^m) / (m!) * c/m * c/m * * * c/m`
` < (c^m)/(m!) * 1/2 * 1/2 * * * 1/2 `
` = (c^m)/(m!) * (1/2)^(n-m)`

ここで、`n` を大きくすれば `(1/2)^(n-m)` はいくらでも小さくすることができる。

定理1の証明

`pi^2` が有理数と仮定すれば、正の整数 a, b によって `pi^2 = a / b` とおける。補題 2 の関数から、 新しい関数 `F(x)` をつぎのように作る。

`F(x) = b^(n)[pi^(2n)f(x) - pi^(2n-2)f^((2))(x) + pi^(2n-4)f^((4))(x) - ... + (-1)^(n)f^((2n))(x)]`

このとき、各行を展開すると `F(0)` は整数であることがわかる。なぜなら、[] 内を展開すると、 第1項は `b^(n)pi^(2n)f(0) = b^n (a/b)^n f(0) = a^n f(0)` となり、`f(0)` は補題2のiiiで整数となるからである。以下、第2項、第3項も同様にして展開し、 すべての項が整数であるから、`F(0)` は整数である。同様に、`F(1)` も整数である。さて、 `F(x)` の x に関する 2 回微分は

`(d^2)/(dx^2) F(x) = b^(n)[pi^(2n-2)f(x) - pi^(2n-4)f^((2))(x) + pi^(2n-6)f^((4))(x) - ... + (-1)^(n-1)f^((2n))(x)]`

となる(なお、`f(x)` は `x` の `2n` 次式だから、`f^((2n+2)) = 0` である) 。これと `F(x)` の元の式から

`(d^2)/(dx^2) F(x) = F^(′′)(x)= -pi^2F(x)+b^n pi^(2n+2) f(x)`

となる。また、

`d/(dx)[F^(')(x)sin pi x - pi F(x) cos pi x]``=[F^('')(x)+ pi^2F(x)] sin pi x`
`=b^n pi^(2n+2)f(x) sin pi x`
`=pi^2 a^2 f(x) sin pi x`

となるので

`alpha = pi int_0^1 a^n f(x) sin pi x dx`` = [1/pi F^'(x) sin pi x - F(x) cos pi x]_0^1 `
` = F(0) + F(1)`

は整数となる。一方、補題2の ii より、

` 0 < pi int_0^1 a^n f(x) sin pi x dx < (pi a^n)/ (n!)`

となる。したがって、十分大きな n に対して、

`0 < alpha < (pi a^n)/(n!) < 1`

となる(補題3も参照)。`alpha` は整数であったからこれは矛盾である。 よって `pi^2` は無理数であり、補題1より `pi` もまた無理数である。■

解析学の紹介の次は代数学といきたいが、現代日本人の業績は知らない。 江戸時代の和算家、 関孝和が導いた結果を応用数理学会誌の読後感として書いたので、 そちらを参照されたい。

まりんきょ学問所コンピュータの部屋マーク付け言語手習い > MathJax を使う


MARUYAMA Satosi