この文章は、プログラムを記述したことがない人が、関数の作用と副作用を理解するための実験かもしれません。
力学を理解していない人が、作用と反作用を理解するきっかけになるといいかもしれません。
記述していることが正しいかどうかを課題としていません。
記述している論理展開、事象描写が、関数の作用と副作用の理解に役立つことなのかどうかを検討するための記述です。
正しいことをいくら並べ立てても、物理現象との相似性がわからなかったり、
工学で問題を解こうとしているのに問題が解けなければ意味がありません。
正しいことをいくら並べ立てても、必要な時間内に終わらなかったり、
必要な時間内に伝達できなければ、無駄でしかないかもしれません。
正しいことと、意味があることは、直交しているかどうかはわかりませんが、方向が異なると感じているといいかもしれません。
プログラミングは、何か正しいことをしようとしている論理世界だけでなく、
正しいかどうかわからないが存在してしまっている物理世界を描写し、
物理的になにかわからないけど困っていることを解決したい工学世界の解の候補をだしたり、することにも使うことを前提とした記述できればと思います。
大事なのは、時間。計算時間と転送時間。必要な時間内に届かないよりは、近似値でいいので時間内に届くのが大事。
関数
関数とは何かを考える際に、数学、物理学、工学、プログラミングの間に差があるとすれば何か。
差があるのは言葉の印象か、用語の範囲か、注目している事象が違うのかなどを検討したい。
三角関数
関数でわかりやすいのは三角関数。
物理学、工学で周期的事象を取り扱うのによい。
y = sin(x)
三角関数
https://qiita.com/rakusan/items/2f60f2ae6af208dda40f
指数関数
三角関数は、複素数を用いて指数関数で置き直すことができる。
\begin{eqnarray}
e^{-i\theta} = cos \theta + i・sin \theta \\
\end{eqnarray}
逆に
\begin{eqnarray}
cos \theta = \frac{e^{i \theta} + e^{-i \theta}}{2}\\
sin \theta = \frac{e^{i \theta} - e^{-i \theta}}{2 i}\\
\end{eqnarray}
関数の共通の性格
関数に値または式を与えると、値または式を求めることができる。
入力が値または式で、出力が値または式である。これは数学、物理学、工学、プログラミングで違いはない。この関数の共通の性格を、「作用」ということにする。
副作用
副作用とは、関数を適用して、発生した作用以外の現象、事象を指す。
数学では、副作用が存在しないように定義しようとしている。
例えば、具体的な数を0で割ったら、無限大という概念を答えとする。
副作用が生じないような定義をしていけば
物理現象
では、すこしやっかいな問題があるかもしれない。
ある物理現象に、関数を適用したときに、適用対象が爆発し、適用対象外に損傷を与えたとしよう。ある液体Aと別の液体Bを混ぜたら、爆発して容器が壊れたとする。
液体と液体を混ぜて、爆発したことが作用。
容器が壊れたのは副作用だとしよう。
これは、物理現象をどういう系で見ているかによる。容器も含めた系に作用させようとしたのか、容器の中の液体だけに作用させようとしたのか。
まず、Aが変数、Bが関数だとすると、
B(A)
次に、A, Bが変数、混ぜるという操作Xを関数だとすると
X(A, B)
さらに、容器Yを変数だとすると、
X(A, Y, B)
容器Yが関数だとすると
X( Y(A), B)
という感じで、一つの物理現象を、変数、関数でいろいろ表現できる。
そうすると、何が作用かは、何を変数、何を関数だと決めるかに依存する。
物理現象は、今、着目している制約条件の中だけで解決すればいい。
その制約条件は、いっぱいある。
プログラム
プログラムは、数学も、物理現象も表現し、工学的な問題も解決しようとする。
そのため、何を変数とし、何を関数とするかも、プログラムできるかもしれない。
プログラムでやっかいなのは、出力をプログラムの内部に値または式を返すか、プログラムの外部に返すかの選択が必要なことかもしれない。
プログラムが、プログラムの内部に値または式を返す場合には、数学の式と同じように取り扱うことができる。内部に値または式を返すことを作用と呼ぶことがある。
プログラムの外部に値または式を返す場合には、外部に値または式を返すことを副作用と呼ぶことがある。
より厳密には、関数を呼んだ相手に、関数の戻り値として式または値を返す場合を作用、関数の戻り値以外の値または式を変えたり、外部に値または式を返すことを副作用と呼ぶこともある。
参考資料(reference)
[数学] 三角関数について整理する
https://qiita.com/edo_m18/items/f8b8f86a857d34eec3c5
ゼロから理解するCGプログラミングのための数学(三角関数編)
https://qiita.com/hatuxes/items/6151da80f033e96f2acb
任意の座標を原点から指定した角度回す
https://qiita.com/FumioNonaka/items/c246aca8f1b1b03a66be
三角関数は何に使えるのか 〜 サイン・コサイン・タンジェントの活躍 〜
https://qiita.com/drken/items/41b4ec6bde794cbcd0f6
自然対数と指数関数の値をテイラー展開で求める関数を自作する!
https://qiita.com/MilkySaitou/items/614fcbb110cae5b9f797
オイラーの等式よりも美しい
https://qiita.com/koher/items/05a31a8ca28653dc4bdb
文系フロントエンドエンジニアは、アニメーションに三角関数をどう活用したら良いのか Part.1
https://qiita.com/yukiTTT/items/92f2f3910a333ff2d8a1
文系フロントエンドエンジニアは、アニメーションに三角関数をどう活用したら良いのか Part.2
https://qiita.com/yukiTTT/items/c961e3c6de7e2f7f2770
数式サンプル
https://qiita.com/bobchin/items/cb77ccf68a6ce9c39b46
最後までおよみいただきありがとうございました。
いいね 💚、フォローをお願いします。
Thank you very much for reading to the last sentence.
Please press the like icon 💚 and follow me for your happy life.