なんちゃってプログラマーの勉強部屋

自分が学んだ諸々を備忘録的に公開します。

与えられた式は鵜呑みにしないほうがいい?

前回の記事から一ヶ月。もう月日が進むのが速いね・・・。

前回は、プリミティブ方程式の話をしていたわけだが、その後に気づく。それだけではいけなかったことを。

ところで、車が走っているところを想像してみてください。この車がある速度で走っている時、この車がある時間でどこかまで走ったとしましょう。

小中では、「速度×時間=道のり」などと習うわけですが、現実世界では、それがそのまま通用しないことは、なんとなくわかってもらえるのではないかと思います。なぜなら、他の車がいたら、場合によっては渋滞にハマるかもしれない。そうでなくても、信号で赤になっちゃってると、止まらないといけませんね。

時速60kmで1時間走れば、計算上は60km進むことになりますが、上記のようにそうならないことが多いはずです。だから、間に合いそうもないから猛スピードで飛ばせば速く着く、ってのも、実際そんなこともそれほど多く当てはまらないように思います。じゃあ、この式は役にたたないのか?もちろんそんなことはないはずです。では、どうしたら、できるだけ正確に進む距離を知ることができるだろうか、というのが今回の備忘録。説明は簡単のために、1次元で考えてみますが、実際はそうではありません。言うまでもないですが。

では、1時間を6等分して、10分ずつに分けて考えましょう。そして、そのたびに、その時の状況から改めて考え直せば、もう少し実際の所要時間に近くなるかもしれません。しかし、交通状況などでずれてしまう可能性もあります。ですが、この方法なら、最初の方法より断然確度は高くなるだろうことは予想できるのではないでしょうか。さらに言えば、その時間間隔の取り方も短いともっと確度が上がるかもしれませんね。

コンピュータで同じようなことをやってもらおうと思ったらどうでしょうか。速さ・時間・道のりの式と、1時間を小分けにして計算させたところで、うまく予想できるでしょうか。たとえば、それぞれの10分のところで速さが変わったことをプログラムはどうやって知ればいいでしょうか。人間は、暗算なり何なりでその都度臨機応変に計算して求めることができますが、コンピュータには、なんかしらの形でその情報を与えないとうまく予想してくれません。そこで、その考え方の1つにアジョイント法(もしくは四次元変分法)というのがあります。

自分は数学の専門ではなかったので、数学的な細かい話はできませんが、この方法は、計算の予想値と実測値を組み合わせて、その情報から、信頼度の高そうなデータ値を推定することでできるだけありうる値を求めるという、そういう手法です。ちなみに、上記の話は少しでもわかりやすくなるように、多少端折ったりしてるところがあります。

長くなってしまったので、ちょっとだけ実践的?な話は次回に続く。