Mathematicaで友愛数を列挙するプログラム例として以下のようなものが見受けられる。 yakuwa[n_] := DivisorSigma[1, n] - n; Do[If[(yakuwa[yakuwa[k]] == k) && (yakuwa[k] != k), Print[{k, yakuwa[k]}]], {k, 1, 1000}]; しかし、Doでループを回してPrintで書き出していくのはMathematica的に美しくないと思う。 Mathematicaなら関数型プログラミングとパターンマッチを用いるのが良いと思うので、私なら以下のように書く。 Cases[NestList[DivisorSigma[1, #] - # &, #, 2] & /@ Range[100000], {a_, b_, a_} /; a < b -> {a, b}] 実行速度もこちらの
読み込んだGPSログのデータを間引きたい、と思って調べたところ、
(Ramer-)Douglas-Peuckerのアルゴリズムというものがあることが分かった。
基本的な考え方は、
- 折れ線の始点と終点を結ぶ線分と各点の距離を求める。
- すべての点との距離が許容誤差$\varepsilon$以内に入っていれば始点と終点だけを返して終了。
- そうでなければ距離が最大の点Pを選択。
- 始点から点Pまでの折れ線と、点Pから終点までの折れ線のそれぞれについてまた1から処理する。
という再帰的なもの。
再帰的なものはMathematicaの得意分野なので、MathematicaでRamer-Douglas-Peuckerのアルゴリズムを実装してみた。
9月の連休(シルバーウィーク)を利用して、農作業の手伝いも兼ねて祖母宅まで自転車で行くことにした。
中山道経由も考えたが、ルートとしてはまずは甲州街道から伊那路を辿ることにした。
教授の発案で、研究室のメンバーで富津海岸で海水浴→木更津に住む教授の家でホームパーティという催しが行われたので、自転車で参加することに。
ホッケー部の後輩たちが今市(栃木県日光市)にある今市青少年スポーツセンターで合宿をする、とのことなので、先輩OBと2人で自転車で参加することになった。
譲ってもらったロードレーサーに慣れるため、
翌週用事のあった東京ガス深川グラウンドまでの道の下見を兼ねて、
海が見える方向を目指して気ままに走った。
大学院の講義の1つにソーラークルーレスボートの製作があり、その実走行試験を相模湖で行うとのことなので自転車で行ってみることにした。
それ以前は自転車による1日の最長走行距離は36km(東京→横浜)だったのだが、相模湖までは片道65kmと当時の自分にとってはかなりチャレンジング。