数学を学んでこなかった君たちに指数関数と対数関数を説明してあげるよ
この本を読んで、数学の勉強をしてたんですよ。
でも、はっきり言って、全然、わかんなくて。
「そんなこといいながら、ちょっとはわかるんでしょ?」って思うかもしれませんが、ほんとにわからない。とくに指数関数と対数関数で行き詰まってました。
一応、エンジニアなのに、まずいんじゃないか? と思うかもしれませんが、大抵のエンジニアは「プログラミング言語の知識」でやっています。文系の人も多いですし、そもそも大学でまともに勉強すらしていない人もいます(僕です。経済学部でしたが、経済のことはまったくわかりません)。
ちょっと恐る恐る書くのですが、これ、他の職種でもそうだと思うんですよ。
去年、この本読んだんですよ。どうしたら操作感のいいUIって作れるのかなーと思って。アフォーダンスとかシグニファイアという概念で有名な人らしいんですけどね。でも、たぶんUIデザインとかやってる人に、アフォーダンスのことを聞いても、きちんと答えられる人って、わずかなんじゃないすかね……?
(9割のデザイナーは答えられる、ということでしたら、土下座します)
これには、まず、「きちんと言葉にできる=言語化能力」という別の能力が必要、という問題もあります。
「知っている・わかっている・できる」と「人がわかるように説明できる」は全然別の能力、ということです。
「説明できないのはわかってないから」はちょっとズレてる、とも思う。
僕、全然サッカー好きじゃないんですけどね。昔読んだ本です。
一言で説明してしまうと、スポーツの指導でも、「ソレをこう、バカーン!って感じでアレして」的な説明をしないで、明確に伝える術を身につけようね。っていう本なのですが、この本の中で触れられていた三森ゆりかさんという方の本がありまして、
すごーくざっくり説明してしまうと、対象物をじっくり見て、要素を理解して、それらの文脈を理解したのちに、説明できるようにする方法……って感じの内容だったと思います。クリティカル・リーディングなんて言葉を聞いたことあるかもしれませんが、それについても触れられています。
これらは好悪を根拠とする「感想」とは別物です。きちんと批評するための技術でもある。でも、割と分析したり、批評的に話すと、「偉そうだな〜」って感じで言われちゃうこと多いですよね。批評=偉そう。うーん。
まあ、こういう分野もあるくらいなので、それなりに特殊な技能なんだな、ということで。
外国だとディベートとかディスカッションっていうのがあると思うのですが、日本ってあんまりないですよね。たぶん。なので、説明も、苦手な人も結構多いんだと思うんですよ。
脱線しましたが、「理論(=体系化、言語化)と実践は結構、別」なんですよね。
そんで、聞きかじった知識よりも、手を動かして得た経験のほうが仕事にはなる。
プログラムを書いていると、数字とかの「並べ替え」=ソートをすることって結構あるのですが、「sort」みたいな関数(エクセルでもありますよね)が存在するプログラミング言語であれば、とりあえずおまかせでそれを使えばいいですよね。
どちらかというと、引数に何を与えたら、昇順になる/降順になる、ということを覚えておく方が大事だったりして。極端な例ですけど。
ただ、そこからスキルアップして次にいきたい、というときに、手癖でやってきた場合は限界がきてしまう。無駄も多いですしね。
なので、定期的に理論的な部分も学んでいく必要はあるんだと思います。
指数・対数はなんのためにあるか
ということを、僕なりに説明しようと思ったのですが
……実は、ここまで書いて、ちょっと絶望しています。
なぜなら、noteだと数式を書けないということがわかったからです。
いや、2の二乗を
2^2
って書いてもいいんですけど……この時点でもう、読む気なくしませんか?
(プログラムだとこう書くんですよね.....)
a²とか打てなくもないんですけど。。。環境依存だと思いますし。
しょうがないから、画像で貼っていきます。
指数関数ってこんな感じ
二次関数みたいにも見えますよね。
でも二次関数は、こんなんです。
もうこの時点で、あ〜クソつまんねぇ〜〜〜と思う人もいると思います。
でも、もうしばしお待ちください。対数の説明をしたら、これらが何のために存在するか、なんと、その答えをお教えいたします。
散々言語化についての話をしたあとです。これは、僕なりに導きだした、「一番わかりやすい指数と対数の理解のとっかかりの説明」です。
まあ、さっきの見てみると、とりあえず指数関数っていうのは、
累乗の部分(=指数)が変数xなんですよ。
だからaの2乗、3乗、4乗....ってどんどんでかくなるグラフができるんですよね。
ちょっと計算してみましょう。
a=2だとしたら、指数関数のほうは、xが4になったら、yは16になります。
2の4乗って、「2を4回掛け算する」ってことじゃないですか。
さすがにこれは僕でも、計算できます。16になりますよね?
二次関数のほうは、32。
二次関数のほうが大きくなるんだ〜って思うかもしれませんが、
xが10だったらどうでしょう。
二次関数だと200です。指数関数だと1,024。
xが30だったら?
二次関数だと1,800。指数関数だと1,073,741,824。もうパッと読めないです。
だから雪だるま式に増えることを「指数関数的に増大する」とか言いますよね。
こういうことだからですね。あってますよね……?
グラフにするとこんな感じ。
このグラフっていうのがまた、曲者ですよね。
だからなんだっつーんだ!!!! っていうね。
x=10のときのyの値だけ、見ておいていただければ....と思います。
指数関数のほうが変化量が大きいよ、っていうことだけ。
ちなみにこのグラフはPythonで適当にコピペして修正して作りました。
これが、手癖です。
もはやプログラミング言語の知識すら不要です。
「Python 二次関数 グラフ」と検索すれば先人たちの能力をお借りできます。
『僕のヒーローアカデミア』の『ワン・フォー・オール』みたいなものですね。
対数関数ってこんな感じ
数学を学んでこなかった方、すでに、もう、ブラウザを閉じたくなりますよね!!
log! ログ? 掛け算なのか? 何算なのか? と。
Wikipediaの対数の説明を読んでみましょう。
対数(たいすう、英: logarithm)とは、ある数 x を数 b の冪乗 bp として表した場合の冪指数 p である。
ふざけてますよね。全然意味わかんない。
Wikipediaの編集をする人は、もう少し考えたほうがいいですよね。悪いけど。
他の説明だと、
対数とは、指数関数の逆関数である対数関数で求められた値。
とか。これも全然わかんないですよね。
もうちょっとよい説明を探します。前述の「人口知能プログラミングのための数学がわかる本」p21から引用しますと、
まあ、これもよくわかんないんですけど、
わかりやすく言うと、aを何回掛けたら(何乗したら)xになるか、っていうことを求めるための式なんです。その「何回」っていうのはyってことですね。
それが、上に書いたlogなんとかこんとかっていうやつ、ということです。
なので、
これだと、2の3乗は8ってことですね。
logのあとの数字(この場合2)を、
イコールの向こう側にある数字(この場合3)で累乗すればいいってことです。
累乗するっていうのは、以下のことですね。
腹が立ちますよね。バカにされている気がする。だからなんなんだよ、と。
複利の計算に使います、とかよく書かれてますが、複利がそもそもよくわかんねーよ、という。
一応複利について調べたので、説明しますと、金利ですね。
単利と複利っていう利子の計算方法があって、
単利というのは、ずーっと利子が固定。複利っていうのは、利子がどんどん増えていく、ってことです。
以下の動画、logの計算までいくとちょっと大変ですが、その前の単利と複利の動画はとてもわかりやすいです。資産運用とかするときに、複利のほうがよかったりするみたいですよ。資産ないからわかんないですけど。
しかしやっぱり、金利計算とかしないしなぁ、って思いますよね。
ただ、唯一わかりやすい切り口が存在します。それは『ドラえもん』です。
みなさんご存知かもしれませんが、『ドラえもん』に『バイバイン』というひみつ道具が登場します。
これは、『バイバイン』という液体をふりかけたモノが5分単位で2倍にコピーされていく、というものです。
最初は1つ。
5分たったら、1x2=2なので、2つ。
もう5分、つまりトータル10分、2x2=4なので、で4つですね。
もう5分、トータル15分だと? 4x2=8つ。8は、2の3乗ですよね。
つまり、まさしく「指数関数的に増えていく」ということになります。
ここで、たぶんみんな思うかもしれません。
え? 上の計算って、2かけてるだけじゃない?
全部ただの掛け算なのに、なんで指数計算なんかいるの??
永遠に掛け算していけば、計算できるじゃん。
そのとおりです。
永遠に掛け算していけば、わかります。
つまり、そういう意味では指数関数なんかいらない。
ただの掛け算の繰り返しですから。
ただ、ここが、冒頭に記載した、説明の技術と関係してきます。
まず指数がないと、説明が長くなります。
以下は同じ意味ですが、指数を使ったほうが、短く書けますよね。
上の2x2x2...のほうは、まあ、これくらいならパッと2が5個あるな、
ってわかるかもしれませんが、これが10個なら? たぶん、わかりにくいですよね。指数を使えば、あー、2が10個か。とすぐわかるわけです。100個だったら?
いわずもがなですよね。
読みやすく、わかりやすくなる。ってことですね。
厳密にいうと、もっと色々存在理由はあると思いますけど、まあ、そう思ってもいいんじゃないでしょうか。
はい。
で、ドラえもんに戻りますが、これをとりあげたブログなども多数存在します。
(画像の無断転載をしていないものだと)以下サイトなどがわかりやすいです。
1年間で利息が倍になっていくものを「1年複利」と呼ぶそうですが(上記YouTube動画参照)、バイバインは「5分複利」と言えるんでしょうね。
じゃあ、バイバインが100万個になるのは、何分後?
というのを計算したいときに、対数が役に立つ、ということになります。
まず簡単に前述の32個になる場合、くどいですが、以下のようになりますよね。
2倍が5回で32個。1回は5分だから、5分かける5回=25分後に32個になる。
ここで、あれ、となる人もいるかもしれません。
こいつです。2は2倍の2だよね。5は5回の5。
でも、ドラえもんの栗まんじゅうは最初、1個だったよね?
なんでいきなり2なの? 1のときは?
と思ったとしたら、正しいです。以下のように、2の1乗は2なので。
ただ、これはどの状態を表すかというと、1回目の分裂が行われたあと、つまり5分後の状態なんですね。もう一回分裂してる。じゃあその前、つまりバイバインをふりかけた直後はどう表すか? 1の前は0です。だから、
こうなります。なんで0乗で1なのか? は中学校で習うみたいですが、僕は習った記憶がありません。たぶん寝てたからだと思います。
わかりやすいサイトはたくさんあるので、気になった方は読んでみてください。
(ただ、僕にはどれも屁理屈のように感じました)
脱線しましたが、5分後の結果は、以下でした。
じゃあ、32個になるのは何分後? を知りたいとき、どうしたらいいでしょう。
こうなりますよね。
これ、計算できます?
32を2でわっても16。まあ、これ繰り返せばでるんですけど。
32÷2=16
16÷2=8
8÷2=4
4÷2=2
2÷2=1
5回割ったら1になった。なので、2を5回かければ32になる。だからx=5。
でもこのやり方だと、100万個になるのを計算するの、すごい大変ですよね。
何回も2で割らないといけない。めんどくさい。
じゃあ、どうするか? ここで、対数の計算を使うと、便利!
ということに、やっとたどり着きました。
一応、やってみます。以下でlogとなっているのは常用対数の
です。logのあとの小さい数字が10のときは、常用対数といって、
この場合は、10を省略してlogって書いていいんですって。
でもこれ、なんでしたっけ。
さっき出てきたのは、こうでした。
2を3乗したら8になる。でした。
なので、こんな感じになるってことですね。
10を2乗したら100になる。こんな風に使えるわけですね。
常用対数っていうのは、よく使う対数のことで、これの表が
あるんですよ。「常用対数表」でググると出てきます。
上記動画でも常用対数を使っています。
これは、2をr回掛け算したら、10の6乗=100万より大きくなる、という式です。
なんでイコールじゃなくて、大なりイコールなの? というのは、ぴったり同じじゃなくていいから。右辺が奇数だったら、絶対イコールにならないし。
次ここ。ここで、もう、わかんなくなりますよね。たぶん。
なんでlogをかけたのか。
これは、計算しやすくするためです。何がしたいかというと、常用対数表から数値に変換したいからです。
そのあと、途中でlog2が0.3010になっているのは、常用対数表から持ってきたからです。ここ。
log 10が消えたのは、以下のような公式があるんですよね。
なので、以下のようになって、1になったから見えなくなってOKってことですね。
※logは、小さい数字(底=てい、と言います)の10が省略されているんでしたよね。
次に分からなくなりそうなのは、この変換。
rと6がなんか前にきた。なぜ?
ぶっちゃけ公式です。以下の「累乗の対数」っていうのを見てね。
なんで? 証明してよ! と思ったら、以下とか。
はい。
そんでrは19より大きいとわかるから、20回目で100万個を超えるってことです。
つまり、5分x20回=100分=1時間40分後。
たぶんあってると思います。
もちろん、これは単純な数字なので、対数関数を使うまでもないんですが。
でも、いやー……こんなの、絶対わかんないですよね。
僕も勉強してなかったら絶対わからない。でもやったらできるようになりました。
結論
さて、長々とやってまいりましたが、賢明なみなさまは、僕が言うまでもなく、気づいたのではないでしょうか?
なんのために、指数・対数みたいなものがあるのか。
なぜこんなものを考えた人がいるのか。
それは、ですね……。
「大きい数字を表現したり、計算するのに便利だから!!!!」
ということですね。
もちろん、大きい数字だけじゃなく、すごく桁の多い数字(小数点以下がながーいやつ)とかにも使えるってことみたいです。
ていうか、数学ってほとんどが、「頭で考えるにはちょっとたいへんな数字を計算するために」いろいろ考えられている、ってことだと思います。
しかし、あれですよね。
ドラえもんとかで教えてくれるとわかりやすいのに、妙に数学って、ややこしい教え方をしますよね。
こちらの本に書いてあったのですが、これは、意図的にこうなってるみたいです。
(p.109 より引用)
学校のカリキュラムを見てみると、今までは、現実世界とは距離を置いた「抽象的で美しい数学の世界」を中心に教えていました。
この犯人が、20世紀初頭ドイツの数学会のトップだったヒルベルト博士という人。彼が「数学は抽象化すべきだ」って宣言しちゃったんです。
でも、もうちょっとすると、以下のように、
実社会との関わりを意識した数学的活動の充実が図られた指導内容・教科書に変わっていくみたいですよ。うらやましいですね。
おわりに
ちょっと疲れちゃいましたが、これを読んだみなさんが、ほんのわずかでも指数と対数って聞いた時に、嫌な気持ちにならなくなったらいいなぁ、ということを願いながら、終わりたいと思います。
それではー。
※まちがってるよ!!!!! とか、結局わかんねーよ!!!!とかありましたら、ぜひ教えてください。そもそも計算が間違ってたりするかもしれないので……。