MathML

作成日:2011-12-04
最終更新日:

MathML に慣れる

数学の式を記述するのに、MathML という形式がある。 ひたすら手打ちをするのは疲れる。どうすればいいのだろうか。 字句解析ソフトを作って MathML 形式にしようと考えたが、 少し調べてみて、ASCIIMathML.js (mathcs.chapman.edu) JavaScript があることに気付いた。 英語の例があったので、日本語に直してみた。

amath 例: 二次方程式を解く。 方程式を a x^2+b x+c=0 かつ a!=0 とする。まず 辺々を \a で割り、 x^2+b/a x+c/a=0 を得る。 そして平方完成ができるように式を x^2+b/a x+(b/(2a))^2-(b/(2a))^2+c/a=0 のように変形する。 左辺の最初の3項をまとめて、 (x+b/(2a))^2=(b^2)/(4a^2)-c/a が得られる。 ここで両辺の平方をとり、 x+b/(2a)=+-sqrt(((b^2)/(4a^2)-c/a)) を得る。 最後に両辺から b/(2a) を引き、2つの解: x_(1,2)=(-b+-sqrt(b^2 - 4a c))/(2a) を得る。 endamath

おそるべき表現力である。

グラフの描画

この ASCIIMathML.js ではさらに恐るべきことに、グラフも書ける。下の図は正弦曲線である。

agraph plot(sin(x)) endagraph

次は五次曲線である。

agraph width=300; height=200; xmin=-5; xmax=5; xscl=1; plot((x-2)*(x-1)*x*(x+1)*(x+2)/2,-2.5,2.5); endagraph

次は、正弦曲線に y = cos(log(x)) を重ね合わせたものである。

\begin{graph} width=300; height=200; xmin=-6.3; xmax=6.3; xscl=1; plot(cos(log(x))); plot(2.2sin(x)) \end{graph}

次は、y = x * sin(1/x) をグラフにしたものである。原点の間で細かく振動している様子がわかる。

\begin{graph} width=300; height=200; xmin=-1; xmax=1; xscl=1; plot(x*sin(1/x)); \end{graph}

最後に、極座標表示を見ていただく。

agraph pTypeOfGraph=Polar; setViewport(600,600,60); setGraphArea(-5,5,-5,5); setGridandTicks(1,1/24,1,1); setLabelsandTitle(Automatic,"Im","Re","Polar Plot"); axes(); setPen("2","blue"); plot(["t*cos(pi*t)", "t*sin(pi*t)"],0,5); setPen("2","green"); polarplot("-t/pi",0,5*pi); axesBorder("1","light"+gridstroke); viewportBorder("3","black"); endagraph

まりんきょ学問所JavaScript 手習い > MathML


MARUYAMA Satosi