われらなりに、テイラーよ、奉ずるはきみだけ
おはようございます。本日の当番、プログラマのM.L.Kです(LはLookie-looのLです。Lookie&Loo!)。
皆さんは、三角関数(sin、cos、tan)を初めて知った時のことを憶えていらっしゃいますでしょうか?
大抵は、教科書の巻末なんかに載っている三角関数表で大体の値を調べて計算する、といった方法を教えられたと思います。
それ以外だと、30°や45°なんかの計算しやすい代表的な値を使う、とか。
なんというか、もやもやとして、よく分らない、みたいな?
プログラマになると、三角関数を自在に利用するということが、日常的に求められます。
もちろん、sin(x)なんていう便利な関数が予め用意されていて、それに値を放り込むだけの話なのですが。
高校生の頃に習った三角関数の定義は、幾何的なもの(図形から導き出すもの)でしたので、コンピュータがどうやって任意の値を計算しているのか、気になって気になってしかたありませんでした。
で、
気になったら覗き見る、ということを、とある家政婦さんに教えられていた私は、
「あらあら、いいのかしら…」
とか呟きながら、ライブラリの実装を覗き見たわけです。
その時に見たものは、諸々の事情、つまびらかにできませんが、かいつまんで言うと、
sin(x) = x^1 +
x^3 * (-0.16666666666666666666666666666667) +
x^5 * (0.0083333333333333333333333333333333) +
x^7 * (-0.0001984126984126984126984126984127)
というものでした。
意味の分らない数字の羅列によって、表向きはクールなように見えても、実は裏ではドロドロとしているという、しごく大人な世界を突きつけられたワケです。
そんなこんなで、歳をとり、裏ではドロドロしつつも、表でもドロドロしている、という酸っぱい思いさえも経験した私は、ある日、運命の出会いを果たしたのです。
テイラー展開によるsin関数の定義です。
つまり、あの日のアレはこういうことだったのです。
sin(x) = (-1)^0 / (2*0+1)! * x^(2*0+1) +
(-1)^1 / (2*1+1)! * x^(2*1+1) +
(-1)^2 / (2*2+1)! * x^(2*2+1) +
(-1)^3 / (2*3+1)! * x^(2*3+1)
↓
sin(x) = 1 / 1! * x^1 +
-1 / 3! * x^3 +
1 / 5! * x^5 +
-1 / 7! * x^7
↓
sin(x) = x^1 * ( 1/1) +
x^3 * (-1/6) +
x^5 * ( 1/120) +
x^7 * (-1/5040)
↓
アレ
しかも、sin(x)のみならず、cos(x)やe^xなど、一見面倒な計算の数々が、実は、同じように単純な多項式に変換できてしまうという、なかなかの素敵仕様。
この出会いにより、テイラー展開に心酔した私は、複雑な数式を計算しなければならない時には、決まってテイラー展開が可能かどうかを調べ、簡略化できるかどうかを検討するようになったのです。
大抵の場合、あんまり上手くいかなかったり、上手くいっても、後で自分で実装を見返して、「あらあら、いいのかしら…」となったりもしますが、バッチリはまった時には、もの凄く悦いんで、やめられません…。
高校生の頃にこれを知っていたら、おそらく猿のようにテイラー展開しまくっていたと思います。
いや、ま、今でも十分、猿なんですケドね。
| 固定リンク
« 目標 | トップページ | 体調管理マスター »
「プログラマー」カテゴリの記事
- 懐古って言うほどでもないゲー(2010.08.31)
- 懐古ゲー(2010.08.30)
- 小一時間問い詰めたい。自分を(2010.08.27)
- ワタシ、ハズ、ガンバッタ、キット(2010.08.26)
- いつかの運動のその後とPCのメンテナンス(2010.08.25)









コメント