2021年03月16日の日記です


暮らしの中の微分積分  2021-03-16 20:34:53  コンピュータ 数学

少し前の日記で、微分積分は役立つよー と書いたのだけど、話の腰を折るのであまり具体例に踏み込まなかった。


これ、自分の中で気になっていて、もう少し説明したいと思っていた。


僕はプログラマーなので、これから書くのはコンピュータープログラムとしての微分積分の話だ。

そして、プログラムとしての微分積分というのは、高校で習ったアレは何だったのかと気が抜けるほど簡単だ。


まぁ、高校で習ったことはちゃんと意味があるので、そのフォローは最後にやる。


▼積分の概念


というわけで、微分積分の「考え方」から説明しよう。

微分積分、と言っているとややこしいので、まずは積分に話を絞る。


前提知識として、足し算は理解しているものとする。

足し算がわからない人には、さすがに説明ができない。


では、[ 3, 3, 3, 3 ] …3 が4つあるのだけど、全部足してみて欲しい。


答えは 12 だ。3 + 3 + 3 + 3 でいいのだけど、3 × 4 と考えるとすぐに答えが出る。


次に、[ 3, 4, 5, 6 ] を全部足してみて欲しい。


今度は掛け算は使えないので、地道に足し算をするしかない。

3 + 4 + 5 + 6 で、答えは 18だ。


概念的には、後者が積分にあたる。


たくさんの数をまとめて足す方法が積分。

そのうち、数が「たまたま全部同じだった」という特殊な場合が掛け算だ。




ここに書いた例では、4つの数を足しただけだった。

これが、数万という数があると考えて欲しい。とても手計算で足し合わせることはできない。


でも、それらの数に何らかの法則があって、数式で表せたとしよう。


こうなると話が変わってくる。足したい数の概要を数式として示せたので、これをもとに「全部足した結果」の数式を作り出す。

すると、数万件の足し算をする必要がなくなり、すぐに答えが出る。


これが、高校で習う積分だ。


ただ、数式で表すとなると、整数だけが相手というわけにはいかない。

式を変形するための前提条件などもいろいろと付き、話が複雑になっていく。


結果として「難しい」と思われてしまうのだけど、やりたいことは「全部足す」なのだ。


さて、そこでコンピューターが開発された。

最初は、「ひたすら足し算」しかできない機械だった。

でも、足し算さえできれば積分計算ができる。それで十分だ。


今のコンピューターもその延長上にあるので、プログラムのいたる所に積分が顔を出す。

多分、多くのプログラマーが、積分だとも思わないまま使っているのだけど。



▼積分の具体例


具体例をあげよう。


最近の家庭用テレビゲーム機では、コントローラーを振って操作することができる。

3Dのゲームで、コントローラーを左右にふることで、左右を見ることができたりね。


これ、コントローラーには「向き」を知るための仕組みは入っていない。

入っているのは、加速度センサーだ。


加速度、というのが馴染みが薄いかもしれないのだけど、単純に力のことだ。

加速度センサーは、コントローラーにかかる力を知ることができる。


そして、速度に加える、という名前の通り、足し算を続けると…つまり、ここまでに説明したように「積分」すると、現在の速度が得られる。


さらに、速度を積分すると、今度は現在の位置が得られる。

自分の体を中心としたコントローラーの位置と考えると、「向き」と近似のものだ。


こうして、加速度センサーから得られる値を、2回積分することで、コントローラーからは直接得られない「向き」を算出しているんだ。



積分を行うと、値のもつ「意味」を変えることができる。

ここでは、加速度を速度に、速度を位置に、変えることができた。


長さを面積に、更に体積に変えることもできる。

掛け算でも同じだけど、先に書いたように、掛け算は積分の特殊な場合だから。


プログラムしていて、欲しい値が手に入らない、ということはよくある。

そうした場合でも、手元にある値を積分することで、欲しい値を作り出す事ができる。


プログラマーなら、こうしたプログラムの経験はいくらでもあるだろう。

積分というのは特別なことではなく、ごく当たり前に使われるものなのだ。




また別の例を上げる。


積分を使うと、複雑なものを単純化できる。


物を投げたときの位置は、それほど難しくない数式で示すことができる。

いわゆる放物線だ。


まぁ、人がボールを投げるくらいなら放物線の式で問題ない。

でも、高速で動く場合は空気抵抗が問題になり始める。

そこまで考慮して位置を示す式を作ろうとしても、複雑すぎて作ることができない。



そこで積分を使う。

いきなり位置を表す式を作るのではなく、まず速度の式を作るのだ。

空気抵抗は速度によって変わるので、速度をもとに空気抵抗を求め、その空気抵抗で速度が変わるようにする。


そして、その速度を積分して位置を求める。

ここで言う積分は、もちろんコンピューターの計算力で足し算を繰り返すことだ。


このように、複数の段階に分けることで、複雑すぎて手に負えない計算も行うことができる。


こちらも、プログラマーにとってはそれほど特別なことではないね。

ゲームを作る人なら、いろいろな条件で途中から動きが変わったりする、つまり「加速度」を持つプログラムは当たり前に組むだろう。


▼微分


積分の話を2つほど挙げたが、続いて微分のことを書こう。


微分は積分の逆の操作だ、と思ってだいたい間違いはない。

微分して積分したらもとに戻る。


積分がすべて足すのに対して、微分は直近の値を引く。

これによって、直近から値がどのように変わったのか、その「差」を調べることができる。




積分例として、ゲームコントローラーの話を書いた。

コントローラーには加速度センサーしか入っていないが、積分すれば位置がわかる。


逆の話として、スマホのタッチパネルのことを書こう。

タッチパネルに指を触れると、その位置がわかる。でも、位置以外はわからない。


しかし、タッチパネル操作でスクロールを行うとき、「フリック」すると、その時の速度でスクロールが続く。


ここでは、指の位置情報を微分することで、速度を求めているんだ。


フリックとは、指を動かしている最中に、急にタッチパネルから離す動作。

指が離れた直前の速度がある程度あった場合、そのままスクロールを続けるようにする。


そして、徐々にスクロールが止まるのは、速度を変化させる、逆向きの加速度を設定している。

これらの動作は、積分を行っている。




微分すると、変化がわかる。

これを多用しているのが、写真などの加工アプリだ。


ある点に注目したときに、すぐ隣の点との差を出す。

これを画像のすべての点について行い、その結果を新たな画像とする。


これが「画像を微分する」ということなのだけど、この結果得られるのは、色の変化するところを拾い出したような画像だ。

いわゆる「輪郭抽出フィルタ」だと思っていい。表示の方法によっては、レリーフ化フィルタになる。


この輪郭に対してもう一度微分すると、輪郭のすぐ隣の点を際立たせるデータが得られる。

これを元の画像に重ねると、輪郭がくっきりとする。

「シャープフィルタ」とか「ピンぼけ補正フィルタ」と呼ばれるものだ。


ここに書いたのは単純な原理だけで、実際の画像処理ではもっと工夫された処理が使われている。

しかし、微分の応用範囲の広さはわかってもらえると思う。



▼微分積分とは


これ以上書いても同じような話ばかりになりそうなので、少し話を変えよう。


微分積分というのは難しいものだ、と思っている人は多そうだ。


でも、コンピューターで計算するときは、ただの足し算引き算だ。

特に難しい処理ではない。


じゃぁ、なんで高校ではあんなにややこしい教え方するのさ、という話。


これにはもちろん意味がある。

微分積分学は19世紀に大きく発展したのだけど、コンピューターの登場は 20世紀なのだ。


だから、学問としてはコンピューターのほうが新しく、難しい。

高校でやるのは積分の「基礎」で、コンピューターを使うのは「応用」なのだ。


今回書いた話も、概念としては「微分積分」なのだけど、数学的な妥当性はちょっと怪しい。

わざと簡単な話だけやっていて、ややこしい話は避けたからね。

真面目に書こうとすると、高校レベルの数学では収まらない話になる。


でも、今回僕が示したかったのは、数学的な妥当性ではない。

難しいと思って避けている人が多い「微分積分」が、案外身近に使われているし、考え方自体は簡単なものだと知ってほしかったのだ。


▼最後に


微分積分の話、もっと書きたいことはたくさんある。

でも、何でもかんでも盛り込むと話が横道にそれ過ぎて、わかりづらくなる。


今回も、これでも泣く泣く削った話が多数あるのだ。


諦めきれないネタを2つ、概要だけ示す。

説明は長くなるからしない。書きたいから書きっぱなしにする、というだけ。


・太陽の位置と季節の話


12月の冬至と6月の夏至が「昼と夜の長さ」のピークなのに、寒さと暑さのピークは2月と8月だ。

なんでピークがずれるのか気になったことはないだろうか?


太陽の運動を正弦波、太陽エネルギーを気温に変えるのに積分が必要だと考えると、大体理解できる。


・フーリエ変換


異世界転移の魔法。

ネイピア数を虚数乗することで複素空間に円形の魔法陣を描き、そこに波動をぶつけて積分すると「周波数空間」という異世界に転移できる。

もちろん、異世界に行ったら無双できるのがお約束。


…と、与太話を書いてから真面目に解説したかったのだけど、そもそもこの与太話がフーリエ変換を理解していないとわからないし、解説もすげー長くなるからやめた。




同じテーマの日記(最近の一覧)

コンピュータ

数学

関連ページ

異世界転移の方法【日記 21/04/01】

別年同日の日記

05年 大忙し

09年 辻堂海浜公園

15年 ドットリ君

17年 タネンバウム教授(1944) ストールマン(1953) 誕生日

20年 ソフトウェアリリース


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -