ユユユユユ

webエンジニアです

職業で自我を規定しない

このところ、数学ほど楽しいものはないという気持ちと、プログラミングはやっぱり楽しいという気持ちが交じりあっている。いっぽうは趣味でいっぽうは職業であるが、たまたま手近な職業として後者を選択してしまったにすぎず、本分がどちらであるのかはどうでもよくさえなっている。

プログラマという職業がもてはやされていることと、自分がその職業についていること。これらは異なる因果のなかにあるということが見えずに(あるいは積極的に盲目を装い)、「自分の職業はこれ以外にない」と奇妙な自尊心をもっていた時期があった。しかしそれは「私は成功している(はず)」という暗示によって不安をトランキライズするひとつの目くらましにすぎず、まったくもって拙速な、無意味な、愚かな表現であった。それがわかってきた。

別にプログラマじゃなくても生きていけるとおもうし、職業に囚われて感性がタコツボ化してしまうくらいなら、さっさと新しいアクティビティに移行するべきでさえある。現実的には、職業を変えることにはすさまじいエネルギーが要る(実際のところ、他業種からプログラマに転職してくる人はそれだけで尊敬に値する)。ただちになにかを計画して実行に移すというほどのものはまだないけれども、少なくとも僕自身の意識、自画像としては、「たまたま」プログラミングができるだけの並の人間、というくらいで十分であって、それ以上のものではない。楽しいからやっていることではあるが、もっと楽しいことがあるならばそちらに移行する道は空けておきたい。それができるかどうかをシリアスに見極めたい。

Elixir のイントロダクションをスローに読んでいる

世の中では Rust への熱が日に日に高まっている様子であるが、僕はというとなにか本能的に惹かれるものがあったのだろうか、 Elixir のイントロダクションをちまちまと読んでいる。

elixir-lang.org

パターンマッチングだとかアクターモデルだとか、 Ruby 3.0 の文脈でワイワイ言われていたものがごくごく基本的な事項として提示されて、なるほどこういうものであったのか、とふんわり用語法を咀嚼している。

楽しくはあるけれど、深入りはあえてしない。なにせ週末は学生に戻って微積やら化学やらの予習復習をしているわけで、とてもではないがそれ以上のアクティビティに熱中する余裕はない。思えばフルタイムの学生をしていたころも、学期中に限って履修科目から外れたトピックの独学を始めたりしていたものであったから、これも同じように気紛れ、逃避の類なのだろう。講義に追いつけてきたという余裕のあらわれであると思えば、そう悪くもない。

しかしあくまで講義を優先して、こちらは余暇の手慰みである。つい熱中しかけても、主従関係は誤らないようにせよ、という戒めとして記述しておく。結果としてどちらも楽しめればこれほど素晴らしいことはないが、順序の定義は失わないこと。

ランダウの記号

計算量の上界を見るときにビッグオー記法などとよく引き合いに出される、例のランダウの記号というやつについて、解析学のテキストで触れられているものを読んだ。「他の定理はともかくとしてこれなら知っているぞ」といわんばかりの思いで臨んだが、数学的定義のちんぷんかんぷんさに打ちのめされた。とはいえひとまずテキストの内容は理解できたと信じて、この定義を忘れないようにしたいとメモを書いておく。

収束速度の表現

 x \to a のとき  0 に収束するふたつの関数を考える。  a = 0 として  x \to 0 と考えてもよい。

 \displaystyle
\lim_{x \to a}{\varphi(x)} = 0

 \displaystyle
\lim_{x \to a}{\psi(x)} = 0

 \sim 記号

 \displaystyle
\varphi(x) \sim \psi(x)
と書いて  \displaystyle
\lim_{x \to a}{\frac{\varphi(x)}{\psi(x)}} = 1
を意味する。

 \displaystyle \varphi(x) \displaystyle \psi(x) が同じ速さで  0 に収束するということ。

 o (スモールオー)記号

 \displaystyle
\varphi(x) = o(\psi(x))
と書いて  \displaystyle
\lim_{x \to a}{\frac{\varphi(x)}{\psi(x)}} = 0
を意味する。

 \displaystyle \varphi(x) \displaystyle \psi(x) よりも速く  0 にいくということで、このとき  \varphi(x) \psi(x) より 高位の無限小 という。

 Oビッグオー)記号

正の数  K があって

 \displaystyle |\frac{\varphi(x)}{\psi(x)}| \leq K, x \to a

のとき  \varphi(x) = O(\psi(x)) と書く。

 O(\psi(x)) \psi(x) で割って  K で上から抑えられる数」と覚えればよい。

発散速度の表現

 x \to \infty のときもだいたい同じ感じで表現できる。ここでは省略。

テイラー展開の表現

 Rn を剰余項としてこんな風に書くことにする。

 \displaystyle
f(x) = f(a) + f'(a)(x-a) + \frac{f''(a)}{2!}(x-a)^{2} + \cdots \\\
\displaystyle + \frac{f^{(n-1)(a)}}{(n-1)!}(x-a)^{n-1} + Rn, x \to a

このときに  Rn (x - a)^{n} で割れてかつ正数  K で上から抑えられるので、

 \displaystyle
Rn = O( (x - a)^{n} )

とも表現できるわけである。

さらに  (x-a)^{n} (x-a)^{n-1} より高位の無限小なので

 \displaystyle
Rn = o((x-a)^{n-1})

としてしまってもよい。

不定形の極限を計算するときには、テイラー展開を上手に使って  O( (x-a)^{n} ) o(1) のような形に持ち込みたい。  o(1) はつまり「 1 で割って  0 になる数」として処理できる(無視できる)ことになり、  \displaystyle \lim_{x \to 0}{(x + o( 1 ) )} = 0 のように計算できる。

たとえばこのように:

 \displaystyle
\lim_{x \to 0}{\frac{\log(1+x) - x}{x^{2}}} \\\displaystyle
= \lim_{x \to 0} {\frac{( x - \frac{1}{2} x^{2} + O(x^{3}) ) - x}{x^{2}}} \\\displaystyle
= \lim_{x \to 0} {\frac{- \frac{1}{2} x^{2} + o(x^{2})}{x^{2}}} \\\displaystyle
= \lim_{x \to 0} {( - \frac{1}{2} + o( 1 ) )} \\\displaystyle
= - \frac{1}{2}

四則演算パズル

日曜日の午後、こんな遊びを見かけた。

遊びと思って取り組んでみて、最初の一題は数分で解けた。が、後が続かない。二題目ではいい感じの形の有理数は作れるのだけれど、分子と分母が逆転してしまっていて、あといっぽ及ばない。というところで悔しさが勝ってしまい、ソルバーを書いた。

ソルバーでも解なしとなったところで異変に気づいて、与えられた自然数を並べ替えることは自由であるとわかった。それを知っていれば、単に割り算の順序を変えて二題目も容易に解けたはず。悔しい気もするが、ゲームのルールを知らなかったのでは仕方がない。少なくとも今日それを覚えられてよかった。

「中学生の遊びと書いてあるものを解けないのか!?」と危機感を持ったが、ルールさえわかっていれば一題目と考え方は同じであった。妙なことに時間をかけてしまったような気もするが、まあいいだろう。お正月にでも身内の子供たちとこれで遊んであげたい。

gist.github.com

ネイピア数の微分がネイピア数になることの証明

放送大学の「入門微分積分 '16」第五課を読んでいる。ネイピア数導関数が次のようになることを知った。

 \displaystyle
(e^{x})' = e^{x}

証明を一読して(わけわからんやん...)となってしまっていたところ、じっくりと精読していたら論理をはっきりと見抜くことができた。きちんと読めばわかるというのが嬉しく、その気持ちのまま自分のためのまとめとして記録する。

前提

 \displaystyle
\lim_{x \to \infty}(1+\frac{1}{x})^{x}=e

証明

 \displaystyle \lim_{x \to -\infty}(1+\frac{1}{x})^{x} = e の導出

 \displaystyle
x=-t
とおくと

 \displaystyle
(1+\frac{1}{x})^{x} \\\displaystyle
= (1-\frac{1}{t})^{-t} = (\frac{t-1}{t})^{-t} \\\displaystyle
= (\frac{t}{t-1})^{t} = (\frac{t-1+1}{t-1})^{t} = (1+\frac{1}{t-1})^{t} \\\displaystyle
= (1+\frac{1}{t-1})^{t-1}(1+\frac{1}{t-1})

である。x \to -\infty のとき  t \to \infty, t - 1 \to \infty であるから

 \displaystyle
\lim_{x \to -\infty}(1+\frac{1}{x})^{x} \\\displaystyle
= \lim_{t-1 \to \infty}(1+\frac{1}{t-1})^{t-1}(1+\frac{1}{t-1}) \\\displaystyle
= \lim_{t-1 \to \infty}(1+\frac{1}{t-1})^{t-1} \cdot \lim_{t-1 \to \infty}(1+\frac{1}{t-1}) \\\displaystyle
= e \cdot 1 
= e

となる。

 \displaystyle \lim_{k \to 0}(1+k)^{\frac{1}{k}} = e の導出

 \displaystyle x = \frac{1}{k} とおけば、 x \to \infty, x \to -\infty の極限を用いて

 \displaystyle
\lim_{x \to \infty}(1+\frac{1}{x})^{x} = \lim_{\frac{1}{k} \to \infty}(1+k)^{\frac{1}{k}} = \lim_{k \to +0}(1+k)^{\frac{1}{k}} = e

 \displaystyle
\lim_{x \to -\infty}(1+\frac{1}{x})^{x} = \lim_{\frac{1}{k} \to -\infty}(1+k)^{\frac{1}{k}} = \lim_{k \to -0}(1+k)^{\frac{1}{k}} = e

より、右極限と左極限が導ける。よって次の極限

 \displaystyle
\lim_{k \to 0}(1+k)^{\frac{1}{k}} = e

が成り立つ。

 \displaystyle \lim_{k \to 0}\frac{k}{\log{}(1+k)} = 1 の導出

 \displaystyle \frac{k}{\log{}(1+k)} = \frac{1}{\frac{1}{k}\log{}(1+k)} = \frac{1}{\log_{}(1+k)^{\frac{1}{k}}}

のように式変形を施しておく。これの  k \to 0 の極限は

 \displaystyle
\lim_{k \to 0}\frac{k}{\log{}(1+k)} = \lim_{k \to 0}\frac{1}{\log_{}(1+k)^{\frac{1}{k}}} \\\displaystyle
= \frac{1}{\displaystyle \log_{}(\lim_{k \to 0}(1+k)^{\frac{1}{k}})} \\\displaystyle
= \frac{1}{\log_{}e} = 1

と導ける。

 \displaystyle (e^{x})' = e^{x} の導出

ここまでを準備として、  \displaystyle (e^{x})' を計算する。

導関数の定義より

 \displaystyle
(e^{x})' = \lim_{h \to 0}\frac{e^{x+h}-e^{x}}{h} = e^{x} \lim_{h \to 0}\frac{e^{h}-1}{h}

である。ここで  \displaystyle \lim_{h \to 0}\frac{e^{h}-1}{h} を求められれば、導関数は求められそうである。

 \displaystyle k = e^{h} - 1 とおくと  h \to 0 のとき  k \to 0 である。また対数の定義より  \displaystyle h = \log{}(e^{h}) であるので

 \displaystyle
\lim_{h \to 0}\frac{e^{h}-1}{h} \\\displaystyle
= \lim_{h \to 0}\frac{e^{h}-1}{\log{}(e^{h})} \\\displaystyle
= \lim_{k \to 0}\frac{k}{\log_{}(1+k)} \\\displaystyle
= 1

結論

以上より

 \displaystyle
(e^{x})' = e^{x} \lim_{h \to 0}\frac{e^{h}-1}{h} = e^{x} \cdot 1 = e^{x}

となる。

 \displaystyle
(e^{x})' = e^{x}

が求められた。

三角関数の加法定理を復習する

 放送大学「初歩からの数学 '18」は、第十章にて三角関数を扱っている。すっかり記憶が磨耗していることに恥をしのびつつ、加法定理をいちど書き出してまとめておこうとおもう。

 結局のところ、基本の形をもとにして、いくつもの展開形が生じるということになる。「すべてを覚える必要はないので、いつでも導出できるようにしなさい」という指導をそういえば受けたことがあったなあ、と学生時代に思いをはせつつ、その導出手法を確認しておく。


 基本の形はこれだ。これがなければなにも始まらない。


\sin ( \alpha + \beta ) = \sin \alpha \cos \beta + \cos \alpha \sin \beta \\
\cos ( \alpha + \beta ) = \cos \alpha \cos \beta - \sin \alpha \sin \beta

左辺で \alpha\beta に加法を適用しているので加法定理ということになる。減法定理というものはない。上式で \beta- \beta に置き換えると、次の式がえられるだけのことである。


\sin ( \alpha + ( - \beta ) ) = \sin \alpha \cos (- \beta ) + \cos \alpha \sin (-\beta ) \\
\cos ( \alpha + ( - \beta ) ) = \cos \alpha \cos (- \beta ) - \sin \alpha \sin (-\beta )

定義より


\cos (- \beta ) =   \cos \beta \\
\sin (- \beta ) = - \sin \beta

であるので、


\sin (\alpha - \beta ) = \sin \alpha \cos \beta  - \cos \alpha \sin \beta \\
\cos (\alpha - \beta ) = \cos \alpha \cos \beta  + \sin \alpha \sin \beta

こうして加法定理の4つの基本形がえられるわけである。あくまで、最初のふたつだけを強く記憶すればよい。


 三角関数の積を和ないし差に直す公式、というものもある。これは加法定理からこのように求められる。


\sin \alpha \cos \beta  = \frac{1}{2}( \sin ( \alpha + \beta ) + \sin ( \alpha - \beta )) \\
\cos \alpha \cos \beta  = \frac{1}{2}( \cos ( \alpha + \beta ) + \cos ( \alpha - \beta )) \\
\sin \alpha \sin \beta  = \frac{1}{2}( \cos ( \alpha - \beta ) - \cos ( \alpha + \beta ))

変形した方が扱いやすければそうしよう


2 \sin \alpha \cos \beta  = \sin ( \alpha + \beta ) + \sin ( \alpha - \beta ) \\
2 \cos \alpha \cos \beta  = \cos ( \alpha + \beta ) + \cos ( \alpha - \beta ) \\
2 \sin \alpha \sin \beta  = \cos ( \alpha - \beta ) - \cos ( \alpha + \beta )

 記号の組み合わせが忙しく記憶に負荷をかけてよこす。実際のところ、記憶するよりも加法定理から導出するのはたしかに安全そうである。


 積を和(差)変換できたのと同じ理屈で、和ないし差を積に変換する公式も導ける。ただしこれにはわずかな操作が必要で、そこが混乱を生じさせる。

 上で導出した、積を和(差)に変換する公式をみよう。これを逆に適用すれば、和(差)から積を導くこともできるはずなのだが、いくぶんややこしいことになっている。


\sin (\alpha +\beta ) + \sin (\alpha -\beta ) = 2 \sin \alpha \cos \beta \\
\cos (\alpha +\beta ) + \cos (\alpha -\beta ) = 2 \cos \alpha \cos \beta \\
\cos (\alpha -\beta ) - \cos (\alpha +\beta ) = 2 \sin \alpha \sin \beta

 ここで必要な操作は、 A=\alpha +\beta , B=\alpha -\beta と新しいパラメータを宣言して、これらの置換した文字について扱うようにすることである。すると \alpha =\frac{A+B}{2}, \beta =\frac{A-B}{2} となり、次のように和(差)を積で表せるようになる


\sin A + \sin B =  2 \sin \frac{A+B}{2} \cos \frac{A-B}{2} \\
\sin A - \sin B =  2 \sin \frac{A-B}{2} \cos \frac{A+B}{2} \\
\cos A + \cos B =  2 \cos \frac{A+B}{2} \cos \frac{A-B}{2} \\
\cos A - \cos B = -2 \sin \frac{A+B}{2} \sin \frac{A-B}{2}

1日1万歩を1年間続けた

1日1万歩を1年間続けた。実のところ平均値にすぎないから表題には誤謬も含むが、誇れる習慣と言えようか。ひとがいつになく運動不足を口にした1年間で、僕はいつになく身体を動かした。

ルーチンはこう。朝、起床してすぐにランニングに出る。雨の日はジムにゆく。体調と環境をみて、3-8kmばかりを走る。これだけではたいてい1万歩には満たない。昼食後、あるいは夕方あたりに40分ばかりの散歩を加えると到達する。勤労日には1時間の休憩時間を15分の食事と長い散歩に分割するのが日常となっている。

さて、そこで得たものはなんだったか?

肉体的な健康が身についた、とひとは言うだろう。実際、この1年での減量幅は10kgになる。BMIは軽肥満から標準に戻った。あるいは、苦しいルーチンに打ち負けずに継続することのできる強い意思だとか、成功体験だとか、自己肯定心だとかいうものが身についた、などか。

とはいうものの、それだけのことである。肉体が健康であっても、心が健康でない日々はあったし、そう万事が万事快調でもない。

僕自身の性質として、はっきりとわかったことはある。苦しい習慣を続けることは苦にならない。実のところ、機械的な日々を過ごすほど楽なことはない。自分の決めたルールにのっとって動くだけで、それ以上のことは何も考えずに済むというのは、実に楽なことである。これは禁欲にみせかけて、むしろ堕落に近い。

そういうことをおもうにつけ、この1万歩という意味のない数字で生活を規定することは1年で終わりにすることにした。ずるずると数字に囚われて次の一年を暮らすことになるのがおそろしい。

目標を立ててそれを遂行することは美徳、そしてそれができるひとは善とみなされる。善行によって死後に救われるのであればまだしも、実際のところいつ風邪をこじらせて死ぬともわからない時代に、そんなことをしてなんになるのか。どうせ死ぬのであれば、徹底的に身体を破壊して滅びていくほうがよほど人間らしく美しくはないか。なんらの社会貢献も考えずに、映画をみて本を読んでゲームをして食って寝て肥満するだけの生活をしていた若い日々がいつになく懐かしい。

そういう脱出願望を心に秘めていながら、人生の目的を考えはじめると気が触れそうになるので、何も考えなくていいように身体を動かすのだろう。身体を鍛えて、健康を守る。この悪習から足を洗うことは、それを継続するのと同じだけ難しい。