僕とpythonと針と | 大阪大学体育会水泳部のブログ

大阪大学体育会水泳部のブログ

大阪大学体育会水泳部のブログです!‍今年のスローガンは【百尺敢闘】チーム一丸となり到達しうる極限まで果敢に闘い抜きます!

 

 

 

 

 

 

 

リニがピリオドを使っているのを見て親近感が湧いています。

 

でも今日は句読点でお送りします。

 

 

 

こんにちは。3回生の川口です。

皆さんいかがお過ごしでしょうか?

 

 

 

今日も練習については書けないので、まずは最近のことについて書こうと思います。

 

 

 

 

最近、同期のみんなと過ごす時間が増えたなぁと感じています。

 

 

けいごとパソコン選びのついでにジブリの展覧会に行ったり。

  

 

竜王のアウトレットにドライブしに行ったり。

 

 

特にアウトレットは家族以外と行くのが初めてだったのですごく新鮮で楽しかったです。2時間半ぐらい待って食べたお寿司も美味しかったです。

 

コロナが落ち着いたら三田に行こうね。

 

 

 

 

部活のみんなと過ごせる時間もあと僅かだと考えると、コロナウイルスが憎いです。

 

 

コロナが落ち着いたタイミングでみんなといろんなところに行きたいなと思っています。ぜひ誘ってください。

 

 

 

コロナが落ち着いたら行きたい場所、コメントで教えてください。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

さて、3回生やこのブログを読んでくださっているOBの皆さん、こんなブログを覚えていませんか?

 

 

 

 

そうです。専門に全振りし、読んでも全く理解できなかったこのブログです。1、2回生のみんなも一度読んでみてください、面白いので。

 

 

 

以前のブログにも書きましたが、けいご曰く僕のブログは短すぎるみたいです。

 

 

ということで、今日は自分の専門に全振りして思いっきり書いてやろうと思います!

 

 

 

 

 

 

 

 

 

ここ3日ぐらい、僕はたくちゃんと一緒に、ある研究をしていました。

 

 

 

 

始まりはたくちゃんのこんなLINEでした。

 

 

 


pythonとはプログラミング言語の1つで、それを使ってある実験をしてほしいとのことでした。

 

 

 

その実験というのがこちら

 

 

めちゃめちゃ簡単に要約するとこんな感じです。

 

 

あらかじめ平面に等間隔の平行線を何本か書いておいて、その上から針を適当に落とします。

その針があらかじめ平面に書いた平行線に交わる確率は、針の長さを2倍した数字を円周率と平行線の間隔の数字をかけたもので割ったものになるというお話です。

 

 

 

確率の計算の中に円周率が入ってるなんて面白いですよね。というかなんで針を落とそうとか思ったんですかね。

 

 

 

で、たくちゃんはこんなことを考えました。

 

「針の長さと線の間隔決めて落とす実験して確率求めたら、円周率求めれるやん」

 

要するにこういうことです。

 

 

針の長さをl、平行線の間隔をdとすると、確率Pが

 

P = 2l/πd

 

だから

 

π = 2l/Pd

 

じゃないかと…

(ただし、確率は0より大きいものとする)

 

 

 

だから、針を10本から100000本ぐらいまで10本ずつ針を増やしながら落とす実験をして、それぞれ針が平行線と交わる確率を求めれば円周率を計算できるから、それをグラフにしたら円周率3.14にどんどん近づいていくんじゃないか。

 

 

ということだそうです。

 

 

言うてることはわかります。

 

 

ただ、現実世界で針を100000本落とすなんてそんなことできるわけがありません。

 

 

 

 

 

 

というわけでここからはコンピュータの出番です。

 

 

pythonを使って針を落とすシミュレーションとグラフの作成をコンピュータにしてもらうプログラムを書きます。

 

 

 

 

 

 

 

 

 

 

が、しかし…

ぼくの専攻はプログラミングですが、pythonでプログラムを書いたことはありません。プログラミング言語にも僕たちが話す言語と同じように、さまざまな言語が存在しています。

 


言うなれば、英語話せるならフランス語も話せるよね?って言われているようなものなのです。

 

 

そんな無茶な。

 

 

 

 

でも、できないって言いたくなくて、Google先生に聞いたり自分の知識を総動員したりしながらプログラムを書いていきました。

 



 

途中、コンピュータが見たこともないようなエラーを吐き出したり、グラフの縦軸を間違えたり、プログラムがひどくてシミュレーションに2時間弱もかかったりと紆余曲折ありました。

 

 



プログラムを書き始めて14時間、ついに完成しました。

 


 

プログラムは自分が参考にしたソースコードの著作権諸々の関係で載せることができないので,シミュレーションの結果を載せようと思います。

 

 

 


 

まずは平行線の間隔と針の長さ、針の本数の最小値と最大値、針の本数を何本ずつ増やしていくかと規定する平面の縦と横の長さが平行線の何倍かを入力します。

 


 

今回はたくちゃんの指示書に書かれていた通りに、針の長さを3、平行線の間隔を4、針の本数は10本から100000本まで10本ずつ増やしていき、平面の縦と横の長さは平行線の間隔の3倍にしました。

 

 


これらを入力し終えたらEnterキーを押してシミュレーション開始です。

 

 

 




 

 

こんな感じで10本、20本、30本…100本…1000本…10000本と、どんどん進んでいきます。

 

一番左の数字が現在の針の数で、真ん中の数字がその時の確率、そして一番右が算出した円周率です。



 

シミュレーションを続けることおよそ20分…

 

 





 

 

こんな感じになりました。

 

 

右がたくちゃんが言っていたグラフで、横軸が落とした針の本数、縦軸が実験の各回で算出した円周率となっています。

 

青い点がそれぞれの実験についてその結果をプロットしたもので、黄色い線が近似線です。

 

 

 

 

たしかに、落とした針が多いほど点のばらつきが減ってますね。


仮定通り、3.14に近づいているように見えます。

 


 

このあと、針の長さとか平行線の間隔とか平面の広さとかを変えてやってみましたが、ほぼ同じ結果になりました。

 


 

ということで…

 

 


たくちゃんの仮定は見事コンピュータによって正しいことが証明されました!

 

 

 

 

 

 

あぁ長かった。

 

 

こうやって、他の専攻の人と共同でやる研究も面白いですね。

 

とてもいい経験でした。

 

 

たくちゃんには後日、焼肉でも奢ってもらおうと思います。

 

 

 

けいごへ

頑張って書いたよ。

 

 

長くなってしまいました。これで終わりです。

 

 

ここまで読んでくださった方、ありがとうございました。

 

 

 

明日のブログはせいごです。