読者です 読者をやめる 読者になる 読者になる

三角関数

p.14 余弦定理
三角形ABCで2辺の長さb、cとその間の角Aがわかっているとき、残りの辺の長さaを求めることを考える。
 a^2 = (a \cos B)^2 + (b \sin A)^2
 \,\,= (c - b \cos A)^2 + b^2 sin^2 A
 \,\,= c^2 - 2bc\cos A + b^2(\cos^2 A + sin^2 A)
 a^2 =  b^2 + c^2 - 2bc\cos A


APL/J言語は数学表記の革命みたいな面があるので、こういった証明問題もAPL/J言語で表記したい誘惑に駆られるのですが、むずかしいですね。そもそも証明問題ってトリッキーなところがあって、上記の証明も三角形ABCのCからABに垂線を下ろして証明しています。そのやりかただとAやBが鈍角の場合も考えなくてはならなくなって、証明はできているものの納得としてはだんだん本能的ではなくなってしまいます。そういうむずかしい状況の中での数学表記はどこに焦点を合わせるかで表記も別途発明しながら進むような感じで、となるとこの場合はサイン、コサインがよくて、1 o.とか2 o.では同じことを表現しても決してわかりやすくならない。


いっぽう、この式に数字を入れてみよう、となったときにAPL/J言語はとても便利です。
やってみよう。
ためしに直角三角形ABCを考えます。左下がA=30°、右下がB=60°、上がC=90°とします。Cに向かい合う辺をcとして2cm、Bに向かい合う辺をbとして\sqrt{3}cmとしたとき、Aに向かい合う辺aの長さを求める。当然1cmなのですが、これを余弦定理を使って計算してみます。

   A=:30
   B=:60
   C=:90
   c=:2
   b=:%:3
   deg=: (1p1%180)&*
   deg 180
3.14159
   ((b^2) + c^2) - 2*b*c*2 o. deg A
1

一応できたけど最後の式が気持ち悪いですね。これは三角関数と関係なく、APL/J言語が右から評価する特殊な記法なところから、通常の a^2 =  b^2 + c^2 - 2bc\cos Aというのをそのまま書くと計算順序が合わないからだと思います。今回もすこし試行錯誤しました。


計算順序について別項を立てて考えます。