2012/12/13

"fp-package"でジャネーの法則("TeX & LaTeX Advent Calendar")

~人生の折り返し地点(半分が経過した年齢)を求める~

1. はじめに
本投稿は"TeX & LaTeX Advent Calendar"の参加記事です (http://atnd.org/events/34318)。


参加人数の都合で,2回目の投稿になりますがやっていきましょう。
あらかじめ書いておきますと,本投稿では数式(画像ファイル)があります。
この画像ファイルの生成には "TeX clip(http://maru.bonyari.jp/texclip/)"を使いました。
数式の画像ファイルを生成できるwebサービスで,数式の入力にはTeXの記法を使います。
こういった記事を今後書くときは重宝するのではないかと思います。

2. ジャネーの法則
ジャネーの法則とは「人間の体感時間は年齢に反比例する」というものです。
同じ1日なのに年齢を重ねると短く感じるようになる,というのを法則にしたものです。
どうやらこの法則に従って考えると,人生の半分が20代の時に終わるらしいのです。
人生の半分といっても結局は体感時間のことです。

本当に20代に人生の半分が終わってしまうのか気になったので,検証してみましょう。

3. モデル化
体感時間は年齢に反比例するというので,体感時間を関数にするとこうでしょう。

 
変数 "t" は年齢,"T_{0}" というのは基準とする年齢です。
考える年齢の範囲は基準とする年齢以上としましょう。
前提として,基準となる年齢の時,体感時間は "k" としましたが,私が計算する時は "k=1" としています。
(体感時間は "Experience Time" とか見えた気がしたので "E_{t}" と書いてます。)

さて,体感時間を関数で表したので,今度は「基準とする年齢からある年数だけ経過した時,体感時間の合計はどれくらいか」を求めましょう。

単なる反比例の式なので自然対数が出てくるだけでこうなります。
これを使えば,ある年齢(例えば生まれたとき,0歳は無理なので1歳ぐらい)から寿命を迎えるまでという範囲における体感時間の合計が求められますね。

ここから先では基準とする年齢を "T_{s}",寿命を迎えるときの年齢は "T_{e}",基準とする年齢から寿命までの体感時間の合計を "T_{total}" などと書きましょう。
「人生の半分をどこで終えるか」というのは次のようになる "t" を探してみればいいわけです。
そして,それぞれの積分の値はどうなるのか求めたのでこれを解いていくと…
…ああ,この数式を使えばよいじゃないですか。
(筆者ははじめ,ループを用いて条件を満たす "t" を求めるという愚行をやっておりました)

4. ソースコード
そういうわけで,改めて書きなおしたソースコードはこちらです。
計算のために "fp-package" を使っているので,導入しないとエラーが出ます。

\documentclass{jsarticle}
\usepackage{fp}

\makeatletter
\def\Janet#1#2{
    \FPmessagesfalse

    \edef\jane@min{#1}
    \edef\jane@max{#2}

    % \jane@max = #2/#1
    \FPdiv{\jane@max}{\jane@max}{\jane@min}
    % \jane@max = (#2/#1)^{0.5}
    \FPpow{\jane@max}{\jane@max}{0.5}
    % \jane@min = #1 * (#2/#1)^{0.5}
    \FPmul{\jane@min}{\jane@min}{\jane@max}

    You are going to spend 50\% of your life when you are \jane@min \ years old. \par
}
\makeatother

\begin{document}
Janet's law

This law describes that the experience time is inversely proportional to age.

\Janet{6}{80}
\Janet{6}{100}
\Janet{1}{100}
\end{document}


5. 実行結果

実行した結果はこうなります。
Excelで計算した結果とあっているのでまあいいでしょう。
気になる人は電卓やExcelでグラフを描いてみたりしてみるといいかもしれません。

6. 終わりに
さて,途中で筆者の失態を晒してしまったわけですが,皆様への教訓ということでここは一つお願いします。

プログラムに実装する前にもっと簡単にできないか考えてみようね。
というとても良い例を示して終わりたいと思います。

○追記
数式の表記について,私の見落としがちらほら見えます。
なんとか見つけ次第修正していきます。

0 件のコメント:

コメントを投稿