こんにちは、Яeiです。
今回は早稲田大学大学院(数学)を修了した私が、関数のイメージについて解説していきたいと思います。
ここでは数学の関数についてメインで話をしていきますが、プログラミングの世界の関数もイメージは一緒です。
数学にしてもプログラミングにしても関数はとても重要になってきますので、苦手な方は是非イメージだけでもつけていって下さい。
なお、イメージを優先しているため、厳密性の部分は捨てております。厳密に学びたい方は(いるかは分かりませんが)大学でちゃんと学ぶとよいでしょう。
関数だけでも「関数論」のように一つの学問となっており、人生をかけて取り組むくらい熱い分野ですよ。
目次
関数のイメージ
結論(関数は「製造工場」)
- 関数とは、「製造工場」のことです。
「何言ってんだこいつは」と思うかもしれませんが、イメージはこれで良いです。
こちらが「これ作って」と製造工場にお願いすると、せっせと作業をしてくれて出来上がったものを返してくれます。
もう少しだけ真面目な言葉で表現すると「情報を渡して」「結果を返してくれる」のが関数の主な機能となります。
ちなみにですが、ドラクエ好きの方は「錬金釜」が関数のイメージにピッタリかなと思います。
(ただし、同じ素材を入れたのにタイミングによって大成功!なんてことはありませんが)
重要なのは「どのような製造工場」か
「関数=製造工場」と表現しましたが、特に重要なのは「何を作ってくれる工場なのか」という点になります。
製造工場はとても便利です。情報を渡してあげればあとはせっせと作業をして結果を返してくれます。
一度製造工場を作っておけば、AさんもBさんも、あるいはCさんも使うことができてとても効率的です。
もし工場を作っておかなかった場合、AさんもBさんもCさんもみんなそれぞれ同じことをする必要があって大変ですよね。
さて、そんな期待の星である製造工場ですがもう一度言いますが「何を作ってくれる工場なのか」が重要になります。
せっかく製造工場を作ってくれても使う人がいなければ意味がありません。
関数を使う際は常に「どんな情報」を製造工場に託してあげれば「どんな結果」を返してくれるのかを意識しましょう。
これは数学でもプログラミングでも同じ考え方になります。
数学の関数の罠
恐らく多くの人は「あれ?数学の関数と関係なくないか?」と思われるのではないでしょうか。
それもそのはずで、数学で習う関数の多くは「仕様書のない製造工場」を眺めているのです。
例えば、「$y=ax(aは定数)$」なんて関数を中学時代に習いますよね(少し厳密性を捨てております)。
一見すると先ほどまでのイメージと全然関係なさそうに思えるのですが、
これは「$x$という情報」を関数(製造工場)に渡してあげると「$ax$という結果」を返してくれる、とういう関数となります。
ここで「$a$って何?$x$って何?$y$って何?」となると思います。
そうです、関数(製造工場)の仕様書がないのでこれらは具体的には分からないのです。
そのため、多くの人は「関数って結局何?何の役に立つの?」となって記憶の彼方へと忘れ去られてしまうのです。
もちろん、中学時代にやっていたことも重要な内容ではあるのですが、なにぶん「何をやっているのか分からない」ので記憶に残らないという致命的なデメリットがあるように感じます。
次のパートでは実際の例を用いながら関数について見ていきましょう。
数学における関数の例
先ほど、学校で学ぶ「$y=ax(aは定数である)$」が何の関数なのか不明で、そのため「関数って何?」となってしまう原因なのではないかと述べました。
では、今度は具体的に「消費税の税込み価格を計算する関数」を考えてみましょう。
税金は分かりやすく10%で計算しましょう(軽減税率は考えないこととします)。
商品の価格を$x$とすると、消費税は$0.1x$となります($100$円の商品の消費税は$100×0.1$ですよね)。
つまり、税込価格は$x+0.1x$となり「$1.1x$」となります。
税込み価格を$y$とし、これを関数化すると$$y=1.1x$$となります。
これで、税込み価格を計算したいすべての人は「商品の価格$x$」を$1.1$倍するだけで税込み価格が求められるようになりました。
さて、お気づきでしょうか?
税込み価格を計算する関数(製造工場)は$$y=ax$$の形式になってますよね?実は中学時代に学んでいた謎の関数と同じ形式になるのです。
ちなみに仕様書を作成するとなると、
$$y=ax(y:商品の税込み価格、a:消費税率、x:商品の価格)$$
となります。
こうなってくれてようやく何をやってくれる関数(製造工場)なのかが見えてきました。
そして、ようやく「関数=製造工場」のイメージがぼんやりと見えてきたのではないでしょうか。
学校ではグラフを描いて解析する方をメインに教えているように思えます。もちろんこれはとても重要なのですが、まずは具体的イメージを持っておきましょう。
数学における関数の問題を見てみる
実際に中学数学の教科書に載ってそうな以下の問題についてみてみましょう(少なくとも私の時代はこんな感じの問題がありました)
自宅から$6$km離れた公園に、毎時$x$kmの速さで歩くと$y$時間かかる。
このとき、$y$を$x$の式で表しなさい。
$y=\frac{6}{x}$とする。$x = 3$のとき$y$の値は何でしょうか。
ここまで読んで頂いた皆様ならもうイメージは分かりますよね。
問題例1では
自宅から$6$km離れた公園までどのくらいかかるか、という関数(製造工場)を作ってね。
ただし、歩く速度は人それぞれだから関数(製造工場)に情報として渡してね。
という問題になります。
こちらの関数(製造工場)を作っておいて家族間で共有しておけば、この先もずっと使えますよね(実際にこんなアプリありますよね)。
これで、公園まで行きたいときにその都度1から式を立てて計算する必要はなくなります。
次に問題例2についてですが、
先人が$$y=\frac{6}{x}$$
という関数(製造工場)を事前に作ってくれているので、$x=3$を代入して結果を求めて下さい。
という問題になります。問題文だけだとイメージがわかないかもしれませんが、実はこれ「問題例1の答え」になっております。
つまり問題例1の続きと考えると、
$x=3$は自分の歩く速度になりますので、計算すると$y=2$になりますので公園までは2時間かかることが分かります。
実は中学時代であっても問題例1のような問題はやっていたのです。
しかし、時間が経つにつれて「解析」や「問題を解くこと」がメインになってしまい問題例2のような計算パズルメインのようになっていくのです。
でも、関数のイメージを持っておくと「みんなが使える便利ツールを作っている」感覚になりませんか?
もちろん、学校で習うような関数はすでに先人が研究してくれています。
しかし、大学で数学を専攻すると「まだ誰もチャレンジしていない」関数作りができるかもしれません(大学や本人の力量にもよりますが)。
是非とも関数のイメージを常に持っておいてください。
そして、関数は「どんな情報」を渡して「どんな結果」が返ってくるかが重要であることを常に意識しましょう。
当記事は以上となります。
学生時代に「関数」が嫌いだった人も、嫌いだった理由が何となく分かったのではないでしょうか。
特に学生時代は具体的に説明がされないので「何のためにやっているのか」が分からなくて挫折しがちです。
しかし、イメージは数分あればつかむことができますし、イメージが持てればその後の勉強も多少は楽しくなります。
是非とも関数のイメージを持っておいてください。
また、プログラミングの世界ではもっと具体的になりますので、楽しいと思いますよ。
長々とお疲れさまでした!