math/03
の編集
http://k.osask.jp/wiki/?math/03
[
リロード
] [
新規
|
編集
|
差分
|
添付
] [
トップ
|
一覧
|
単語検索
|
最終更新
|
バックアップ
|
ヘルプ
]
-- 雛形とするページ --
2012_09
ADSL
ADSL1
BarbaraDye@protonmail.com
Books
DVD-R
EPIA_series
EPM
FormatRule
FrontPage
Help
HomeBakery
HomeBakery2016
InterWikiName
InterWikiSandBox
InterWikiテクニカル
K
KHBIOS/0001
KHBIOS/0002
Lojban
MenuBar
OSA/imp060524
OSC_rule
PASS3
PASS3v1
PukiWiki
RecentDeleted
SandBox
SitePolicy
WattChecker
bank
banks
blogs
blogs2
boyaki_a
boyaki_a/00001
boyaki_a/00002
boyaki_a/00003
boyaki_a/00004
boyaki_a/00005
boyaki_a/00006
boyaki_a/00007
boyaki_a/00008
boyaki_a/00009
boyaki_a/00010
boyaki_a/00011
boyaki_a/00012
boyaki_a/00013
boyaki_a/00014
boyaki_a/00015
boyaki_a/00016
boyaki_a/00017
boyaki_a/00018
boyaki_a/00019
boyaki_a/00020
boyaki_a/00021
boyaki_a/00023
boyaki_a/00024
boyaki_a/00025
boyaki_a/00026
boyaki_a/00027
boyaki_a/00028
boyaki_a/00029
boyaki_a/00030
boyaki_a/00031
boyaki_a/00032
boyaki_a/00033
boyaki_a/00034
boyaki_a/00035
boyaki_a/00036
boyaki_a/00037
boyaki_a/00038
boyaki_a/00039
boyaki_a/00040
boyaki_a/00041
boyaki_a/00042
boyaki_a/00043
boyaki_a/00044
boyaki_a/00045
boyaki_a/00046
boyaki_a/00047
boyaki_a/00048
boyaki_a/00049
boyaki_a/00050
boyaki_a/00051
boyaki_a/00052
boyaki_a/00053
boyaki_a/00054
boyaki_a/00055
boyaki_a/00056
boyaki_a/00057
boyaki_a/00058
boyaki_a/00059
boyaki_a/00060
boyaki_a/00061
boyaki_a/00062
boyaki_a/00063
boyaki_a/00064
boyaki_a/00065
boyaki_a/00066
boyaki_a/00067
boyaki_a/00068
boyaki_a/00069
boyaki_a/00070
boyaki_a/00071
boyaki_a/00072
boyaki_a/00073
boyaki_a/00074
boyaki_a/00075
boyaki_a/00076
boyaki_a/00077
boyaki_a/00078
boyaki_a/00079
boyaki_a/00080
boyaki_a/00081
boyaki_a/00082
boyaki_a/00083
boyaki_a/00084
boyaki_a/00085
boyaki_a/00086
boyaki_a/00087
boyaki_a/00088
boyaki_a/00089
boyaki_a/00090
boyaki_a/00091
boyaki_a/00092
boyaki_a/00093
boyaki_a/00094
boyaki_a/00095
boyaki_a/00096
boyaki_a/00097
boyaki_a/00098
boyaki_a/00099
boyaki_a/00100
boyaki_a/00101
boyaki_a/00102
boyaki_a/00103
boyaki_a/00104
boyaki_a/00105
boyaki_a/00106
boyaki_a/00107
boyaki_a/00108
boyaki_a/00109
boyaki_a/00110
boyaki_a/00111
boyaki_a/00112
boyaki_a/00113
boyaki_a/00114
boyaki_a/00115
boyaki_a/00116
boyaki_a/00117
boyaki_a/00118
boyaki_a/00119
boyaki_a/00120
boyaki_a/00121
boyaki_a/00122
boyaki_a/00123
boyaki_a/00124
boyaki_a/00125
boyaki_a/00126
boyaki_a/00127
boyaki_a/00128
boyaki_a/00129
boyaki_a/00130
boyaki_a/00131
boyaki_a/00132
boyaki_a/00133
boyaki_a/00134
boyaki_a/00135
boyaki_a/00136
boyaki_a/00137
boyaki_a/00138
boyaki_a/00139
boyaki_a/00140
boyaki_a/00141
boyaki_a/00142
boyaki_a/00143
boyaki_a/00144
boyaki_a/00145
boyaki_a/00146
boyaki_a/00147
boyaki_a/00148
boyaki_a/00149
boyaki_a/00150
boyaki_a/00151
boyaki_a/00152
boyaki_a/00153
boyaki_a/00154
boyaki_a/00155
boyaki_a/00156
boyaki_a/00157
boyaki_a/00158
boyaki_a/00159
boyaki_a/00160
boyaki_a/00161
boyaki_a/00162
boyaki_a/00163
boyaki_a/00164
boyaki_a/00165
boyaki_a/0022
data/Clover
data/Clover/hrb_A
data/Clover/hrb_Clover
data/Clover/mail0000
data/Clover/mail0001
data/Clover/mail0002
data/Clover/mail0003
data/Clover/mail0004
data/Clover/mail0005
data/Clover/others
dev-j/THE-BBL/nanasi
ideas
ideas/s7st
ideas/tek3
ideas/tek5
impressions
index
isolations/osw_vga
k
k_in_TOMAMI
kclib1_0000
kclib1_0001
kclib1_0002
kclib1_0003
kclib1_0004
keng
khaba/memo001
khaba/memo002
khaba/memo003
khaba/memo004
khaba/memo005
khaba/memo006
khaba/memo007
klog
klog/comment03
klog/comment04
klog/comment05
klog/essay050
klog/essay051
klog/essay052
klog/essay053
klog/essay054
klog/essay055
klog/essay056
klog/essay057
klog/essay058
klog/essay059
klog/essay060
klog/essay061
klog/essay062
klog/essay063
klog/essay064
klog/essay065
klog/essay066
klog/essay067
klog/essay068
klog/essay069
klog/essay070
klog/essay071
klog/essay072
klog/essay073
klog/essay074
klog/essay075
klog/essay076
klog/essay077
klog/essay078
klog/essay079
klog/essay080
klog/essay081
klog/essay082
klog/essay083
klog/essay084
klog/essay085
klog/essay086
klog/essay087
klog/essay088
klog/essay089
klog/essay090
klog/essay091
klog/essay092
klog/essay093
klog/essay094
klog/essay095
klog/essay096
klog/essay097
klog/essay098
klog/essay099
klog/essay100
klog/essay101
klog/essay102
klog/essay103
klog/essay104
klog/essay105
klog/essays
klog/gfghh
klog/monologue0312
klog/monologue0401
klog/monologue0402
klog/monologue0403
klog/monologue0404
klog/monologue0405
klog/monologue0406
klog/monologue0407
klog/monologue0408
klog/monologue0409
klog/monologue0410
klog/monologue0411
klog/monologue0412
klog/monologue0501
klog/monologue0502
klog/monologue0503
klog/monologue0504
klog/monologue0505
klog/monologue0506
klog/monologue0507
klog/monologue0508
klog/monologue0509
klog/monologue0510
klog/monologue0511
klog/monologue0512
klog/monologue0601
klog/monologue0602
klog/monologue0603
klog/monologue0604
klog/monologue0605
klog/monologue0606
klog/monologue0607-12
klog/old1010
klog/oldk00
krdm0000
krdm0001
krdm0002
krdm0003
links
links/pc0000
links/prog0000
links/soft0000
math
math/00
math/01
math/02
math/03
math/04
math/05
math/06
math/07
math/08
math/09
math/10
mc
memo0001
memo0002
memo0003
memo0004
memo0005
memo0006
memo0011
memo0012
memo0013
memo0014
memo0015
memo0016
memo0017
memo0018
memo0019
memo0020
memo0020/old
memo0021
memo0022
memo0023
memo0024
memo0025
memo0026
memo0027
memo0028
memo0029
memo0030
memo0031
memo0032
memo0033
memo0034
memo0035
memo0036
memo0037
memo0038
memo0039
memo0040
memo0041
memo0042
memo0043
memo0044
memo0045
memo0046
memo0047
memo0048
memo0049
memo0050
memo0051
memo007
memo008
memo009
memo010
memo_dos
memo_opera
minimemo
miniquestions
nask/guide000
nask/guide001
notice
osalinks
osask_khb/memo001
osask_khb/memo002
oversampling
p2018
p20181020
p20181021a
p20181023a
p20181024a
p20181026a
p20181026b
p20181026c
p20181102a
p20181115a
p20181127a
p20181208a
p20181214a
p20190119a
p20190122a
p20190126a
p20190129a
p20190131a
p20190201a
p20190201b
p20190206a
p20190206b
p20190208a
p20190209b
p20190213a
p20190218a
p20190225a
p20190306a
p20190513a
p20190524a
p20190528a
p20190917a
p20191006a
p20191025a
p20191030a
p20191122a
p20191125a
p20191126a
p20191226a
p20200109a
p20200221a
p20200309a
p20200315a
p20200423a
p20200513a
p20200808a
p20200821a
p20211014a
p20211017a
p20211028a
p20211223a
p20220106a
pcmemo
physics
populars
prog/01
prog/02
prop/WaseiOs
quake
quake/jsedip
quake/jsedip/data
quake/jsedip/data05
rep_20061028
rep_OSC06_niigata
sam
sdk0000
sdk0001
sdk0002
sdk0003
sdk0004
spam/hrbwiki/rule
spam/kkiwi/boyaki_a
spam/oswiki/ASKA
spam/oswiki/VGA
spam/oswiki/qemu
spam/test
spysee
test_kor
travel
urls
videochips
ヘルプ
整形ルール
練習用ページ
20212021
* 円周率を求めよう! -(by [[K]], 2004.01.30) -中学生にも理解できる範囲で、円周率の計算方法を説明できないかと言われて、考えた話。 -読み物としてちょっと面白いだけで、学術的価値はありません。 *** 円周率 パイ -円周率 パイ は、中学の範囲では、おそらく次のように認識されているでしょう。 円周と直径の比。もしくは、直径が1の円の円周。 3.1415926535 8979323846 2643383279 5028841971 6939937510 ... --パイをギリシア文字で書きたかったんですが、ブラウザによってはきれいに出ないので、カタカナにしました。ご了承ください。 -ということで、普通に考えると、円周率を100桁、1万桁、・・・と計算するには、とにかく正確にまんまるの物質を探して、これの円周と直径をとにかく正確に測って、割り算すればいいと思うでしょう。 -しかしこの方法では100桁を正確に求めることはできません。そこまで精度のよい測定機器(ものさし)がまだないからです。 -仮に測定器の精度の問題が解決したとしても、まだ問題はあります。その丸い物体はきっと原子でできています。ということは、本当はまんまるではなく、拡大してみれば原子くらいの大きさの凹凸があるでしょう。 -この凹凸が円周率の計算にどのくらい影響するのか考えてみます。直径が2万kmある、非常に大きな円盤を考えます。これは地球より大きいです(!)。円周はだいたい62831853.0718mになるでしょう。一方原子の大きさは一番小さい水素原子が0.1nmくらいです。これは0.0000000001mです。 -そうなると、62831853.07179...の先はしばらく正確に続きますが、小数第10位のくらいから先は原子のでこぼこの影響のせいで、正確なまんまるとは違う結果になるでしょう。 -これだと円周率はせいぜい20桁くらいしか求められないことになります。 -いやいや、これからは宇宙の時代なんだから、星をいくつかつぶしてでも宇宙空間上に非常に大きい円盤を作って、それを測ればきっと何万桁でも計算できる、と思うかもしれません。なんたって宇宙は広いですからね。また、そのころには技術が発達して原子よりも小さな原子核で円盤を作れるようになるはずだ、と考えるかもしれません。なるほど、それはいいアイデアです。 -では円の直径を1千億光年にしましょう。これは現在考えられている宇宙の直径よりも大きいです。1千億光年は、だいたい1兆x1兆kmです。また原子核の大きさは、原子の大きさの約1万分の1です。 -そうすると、さっきの例と比べれば、小数点の下に4桁増えて、小数点の上に16桁増えることになります。結局これでも合計40桁くらいです。上に書いた50桁すら求められません。 -この先もっと小さい素粒子の利用を考えるかもしれませんし、それも可能かもしれませんが、それでも100桁の達成すらどうも無理そうです。 -そんなわけでこれ以上正確な円周率を計算するには、測定ではなくて、もっと数学的な方法を使わないといけないわけです。 *** 数学的な計算方法 -まず1辺が1メートルの正方形を考えます。 -この左下の頂点を原点として、下の辺をx軸に見立てて0.1ずつ目盛を付けるとします。同じく左の辺をy軸に見立てて0.1ずつ目盛を付けることにします。さて、こうすると、0.1*0.1な正方形が100個できたことになります。 -次に、原点を中心として、(1.0, 0.0)から(0.0, 1.0)を円弧にするような円盤を考えます。つまり半径1の円を1/4だけ切り取ったような形です。・・・さてこの円盤の中は、一体いくつの0.1*0.1のミニ正方形が含まれているでしょうか? -「仮に」78個だとしたら、この1/4円の面積は0.78平方メートルであると近似できることになります。 -そして半径1の円の面積はパイであって、この円盤はその1/4なので、 --パイ=4*0.78=3.12 -と推定できることになります。これはなかなか良い感じです。 -次に、ミニ正方形がいくつ含まれているのかを判定する方法を考えます。 -たとえば4つの頂点が A(0.4, 0.3) B(0.5, 0.3) D(0.4, 0.2) C(0.5, 0.2) -のミニ正方形ABCDは円盤の中に含まれているでしょうかいないでしょうか? -これは三平方の定理を使うと判定できるのです。 0.4*0.4+0.3*0.3=0.25 なので、A点と原点の距離は0.5ということになります。これは円の半径よりも小さいので、A点は円盤の中です。 -一般に、点(x, y)が円盤の中かどうかは、x*x+y*yを計算して、それが1以下かどうかを見ればいいのです。 -これで4点とも円盤の中であれば、そのミニ正方形は間違いなく円盤の中にあります。また4点とも円盤の外であれば、そのミニ正方形は間違いなく円盤の外にあります。 -4点のうち、一部だけが円盤の中に入っている場合は、そのミニ正方形が円弧によって分割されていることを意味します。・・・この分割された面積を0%とみなすか100%とみなすかで、円周率の推定の下限と上限を求めることができます。 -この計算方法のポイントは、円周率の推定にあたって、定規などで「測る」という作業をなくしてしまったことです。 -だから0.1ずつの目盛を0.000000001ずつの目盛とかにすれば、相応に高い精度で円周率を求められます。 -それどころか、目盛を十分に細かくすれば、どこまででも好きな精度で円周率を求められます。 *** プログラムで実験 -では、実際に計算したらどうなるかやってみましょう。 #include <stdio.h> #define N 10 int main() { int i, j, k, c[5]; double x0, y0, x1, y1; for (k = 0; k < 5; k++) c[k] = 0; for (j = 0; j < N; j++) { y0 = (double) j / N; y1 = (double) (j + 1) / N; for (i = 0; i < N; i++) { x0 = (double) i / N; x1 = (double) (i + 1) / N; k = 0; if (x0 * x0 + y0 * y0 <= 1.0) k++; if (x1 * x1 + y0 * y0 <= 1.0) k++; if (x0 * x0 + y1 * y1 <= 1.0) k++; if (x1 * x1 + y1 * y1 <= 1.0) k++; c[k]++; } } for (k = 0; k < 5; k++) printf("c[%d]=%d\n", k, c[k]); return 0; } -とても単純なプログラムです。<math.h>すら使っていません。ミニ正方形の4つの頂点が円盤の中にあるかどうかを判定して、分類して集計しているだけです。 -実行するとこんな結果になります。 c[0]=12, c[1]=5, c[2]=8, c[3]=6, c[4]=69 -これはつまり、完全に円盤の中に入っていたものが69個で、頂点が3つだけ円盤の中に入ってたのが6個で、2つ入っていたのが8個で、1つ入っていたのが5つで、完全に円盤の外にあったものが12個あった、ということです。 -c[1〜3]の面積を0とみなしてパイを推定すると、2.76にしかなりません。これはかなり3.14から遠いです。がっかりですね。・・・逆にc[1〜3]を100%のミニ正方形だと仮定してパイを推定すると、3.52となり、これも3.14から遠いです。 -でもとりあえず上限と下限は分かりました。Nを大きくすれば、より誤差を狭めることが出来そうです。 -ここでN=100へ進んでもいいのですが、c[1]を25%、c[2]を50%、c[3]を75%として計算すると、 69+5*0.25+8*0.50+6*0.75=78.75 -となって、円盤の中にはミニ正方形が78.75個相当あると推定することもできます。この推定値からパイを計算すればなんと3.15となり、N=10の計算だけでも3.14にかなり近づくことができます! ---- -ではN=100で計算してみます。 c[0]=2047, c[1]=58, c[2]=82, c[3]=59, c[4]=7754 -これを使うとパイの値は、3.1016〜3.1812だということが分かります。 -さらに先の25%〜75%の方法を使えば、パイの値の近似値は3.1415になります。 ---- -もっと先に進んでN=1000にしてみます。 c[0]=213614, c[1]=585, c[2]=828, c[3]=586, c[4]=784387 上限下限:3.137548〜3.145544, (25%〜75%で近似)=3.141547 -さらにN=1万をやってみます。 c[0]=21450238, c[1]=5857, c[2]=8284, c[3]=5858, c[4]=78529763 上限下限:3.14119052〜3.14199048, (25%〜75%で近似)=3.14159051 *** 考察 -上限下限方式は数学的な意味が一番高いと思います。いくつより大きくていくつより小さいかはっきりするからです。たとえばN=1万の結果を見れば 3.14119052〜3.14199048 なので、3.141までは確定させることができます。しかしミニ正方形を1億個も作って比較して分類したのに、たったの4桁しか分からないというのは、なかなかさみしい気もします。 -これを改善する方法としては、まず上限値と下限値を足して2で割ってみる、という単純な方法があります。もう一つは、上でやったように、25%〜75%で近似するという方法もあります。僕の直感では、単純に足して2で割るよりは、25%〜75%で近似するほうが正解に近いかなと思っているのですが、さてどうでしょうか? --推定したパイが3.14159265からどのくらいずれているのか? | |N=10 |N=100 |N=1000 |N=1万| |単純に足して2で割る|RIGHT:-0.00159265|RIGHT:-0.00019265|RIGHT:-0.00004665|RIGHT:-0.00000215| |25%〜75%で近似 |RIGHT:+0.00840735|RIGHT:-0.00009265|RIGHT:-0.00004565|RIGHT:-0.00000214| -こうして見ると、25%〜75%の近似が特に優れているとかそういうことはなくて、適当にやった上限と下限の単純平均でもそんなに悪くなさそうです。 -([[prog/01]]に、このプログラムの高速化の話題があります) *** リンク -http://www1.coralnet.or.jp/kusuto/PI/ --円周率計算記録の歴史などが紹介されています。 --16000桁、13万桁の計算結果も見られます。 *** 雑談 -小学校のゆとり教育が始まったときに、円周率を3に近似するのは円を円に内接する正六角形に近似するのに相当するという批判があった。実は愚かにも僕もそれをすっかり信じた。しかしこれは少々おかしい気がする。正六角形の面積は、正三角形x6に等しいが、斜辺が1の正三角形の面積はsqrt(3)/4であって、これを6倍しても2.6にすら届かない(半径1の円の面積は円周率に等しい)。 -いやおかしくなかった。円周で考えると、正六角形の周の長さは6だから、直径の2で割れば3なのか。なるほど。 ---- -となると日能研で紹介されていた東京大学の入試問題の、円周率が3.05以上であることを証明せよというのは、正12角形の周の長さを出せばいいのかな。それでも足りないのかな。足りなければ24角形だなあ。・・・いつか暇になったら計算しよう。 * こめんと欄 -ルール違反でページを編集する荒らしが何度もきたので、当分の間このページは凍結します。コメントを書きたい場合は[[impressions]]へ。 -- [[K]] SIZE(10){2008-04-18 (金) 17:39:07} -ちなみに凍結中でもこのようにコメントは書けますが、書き損じた場合に修正ができません。書き損じない自信があればここに書いてもいいです。 -- ''K'' SIZE(10){2008-04-18 (金) 17:42:59} -書き始めから数えてもう10年以上になるのですが、ずっと書き途中になっていました。さすがに恥ずかしくなったので、予定していた内容を最後まで書きました。 -- ''K'' SIZE(10){2015-11-10 (火) 18:41:34} #comment
タイムスタンプを変更しない
* 円周率を求めよう! -(by [[K]], 2004.01.30) -中学生にも理解できる範囲で、円周率の計算方法を説明できないかと言われて、考えた話。 -読み物としてちょっと面白いだけで、学術的価値はありません。 *** 円周率 パイ -円周率 パイ は、中学の範囲では、おそらく次のように認識されているでしょう。 円周と直径の比。もしくは、直径が1の円の円周。 3.1415926535 8979323846 2643383279 5028841971 6939937510 ... --パイをギリシア文字で書きたかったんですが、ブラウザによってはきれいに出ないので、カタカナにしました。ご了承ください。 -ということで、普通に考えると、円周率を100桁、1万桁、・・・と計算するには、とにかく正確にまんまるの物質を探して、これの円周と直径をとにかく正確に測って、割り算すればいいと思うでしょう。 -しかしこの方法では100桁を正確に求めることはできません。そこまで精度のよい測定機器(ものさし)がまだないからです。 -仮に測定器の精度の問題が解決したとしても、まだ問題はあります。その丸い物体はきっと原子でできています。ということは、本当はまんまるではなく、拡大してみれば原子くらいの大きさの凹凸があるでしょう。 -この凹凸が円周率の計算にどのくらい影響するのか考えてみます。直径が2万kmある、非常に大きな円盤を考えます。これは地球より大きいです(!)。円周はだいたい62831853.0718mになるでしょう。一方原子の大きさは一番小さい水素原子が0.1nmくらいです。これは0.0000000001mです。 -そうなると、62831853.07179...の先はしばらく正確に続きますが、小数第10位のくらいから先は原子のでこぼこの影響のせいで、正確なまんまるとは違う結果になるでしょう。 -これだと円周率はせいぜい20桁くらいしか求められないことになります。 -いやいや、これからは宇宙の時代なんだから、星をいくつかつぶしてでも宇宙空間上に非常に大きい円盤を作って、それを測ればきっと何万桁でも計算できる、と思うかもしれません。なんたって宇宙は広いですからね。また、そのころには技術が発達して原子よりも小さな原子核で円盤を作れるようになるはずだ、と考えるかもしれません。なるほど、それはいいアイデアです。 -では円の直径を1千億光年にしましょう。これは現在考えられている宇宙の直径よりも大きいです。1千億光年は、だいたい1兆x1兆kmです。また原子核の大きさは、原子の大きさの約1万分の1です。 -そうすると、さっきの例と比べれば、小数点の下に4桁増えて、小数点の上に16桁増えることになります。結局これでも合計40桁くらいです。上に書いた50桁すら求められません。 -この先もっと小さい素粒子の利用を考えるかもしれませんし、それも可能かもしれませんが、それでも100桁の達成すらどうも無理そうです。 -そんなわけでこれ以上正確な円周率を計算するには、測定ではなくて、もっと数学的な方法を使わないといけないわけです。 *** 数学的な計算方法 -まず1辺が1メートルの正方形を考えます。 -この左下の頂点を原点として、下の辺をx軸に見立てて0.1ずつ目盛を付けるとします。同じく左の辺をy軸に見立てて0.1ずつ目盛を付けることにします。さて、こうすると、0.1*0.1な正方形が100個できたことになります。 -次に、原点を中心として、(1.0, 0.0)から(0.0, 1.0)を円弧にするような円盤を考えます。つまり半径1の円を1/4だけ切り取ったような形です。・・・さてこの円盤の中は、一体いくつの0.1*0.1のミニ正方形が含まれているでしょうか? -「仮に」78個だとしたら、この1/4円の面積は0.78平方メートルであると近似できることになります。 -そして半径1の円の面積はパイであって、この円盤はその1/4なので、 --パイ=4*0.78=3.12 -と推定できることになります。これはなかなか良い感じです。 -次に、ミニ正方形がいくつ含まれているのかを判定する方法を考えます。 -たとえば4つの頂点が A(0.4, 0.3) B(0.5, 0.3) D(0.4, 0.2) C(0.5, 0.2) -のミニ正方形ABCDは円盤の中に含まれているでしょうかいないでしょうか? -これは三平方の定理を使うと判定できるのです。 0.4*0.4+0.3*0.3=0.25 なので、A点と原点の距離は0.5ということになります。これは円の半径よりも小さいので、A点は円盤の中です。 -一般に、点(x, y)が円盤の中かどうかは、x*x+y*yを計算して、それが1以下かどうかを見ればいいのです。 -これで4点とも円盤の中であれば、そのミニ正方形は間違いなく円盤の中にあります。また4点とも円盤の外であれば、そのミニ正方形は間違いなく円盤の外にあります。 -4点のうち、一部だけが円盤の中に入っている場合は、そのミニ正方形が円弧によって分割されていることを意味します。・・・この分割された面積を0%とみなすか100%とみなすかで、円周率の推定の下限と上限を求めることができます。 -この計算方法のポイントは、円周率の推定にあたって、定規などで「測る」という作業をなくしてしまったことです。 -だから0.1ずつの目盛を0.000000001ずつの目盛とかにすれば、相応に高い精度で円周率を求められます。 -それどころか、目盛を十分に細かくすれば、どこまででも好きな精度で円周率を求められます。 *** プログラムで実験 -では、実際に計算したらどうなるかやってみましょう。 #include <stdio.h> #define N 10 int main() { int i, j, k, c[5]; double x0, y0, x1, y1; for (k = 0; k < 5; k++) c[k] = 0; for (j = 0; j < N; j++) { y0 = (double) j / N; y1 = (double) (j + 1) / N; for (i = 0; i < N; i++) { x0 = (double) i / N; x1 = (double) (i + 1) / N; k = 0; if (x0 * x0 + y0 * y0 <= 1.0) k++; if (x1 * x1 + y0 * y0 <= 1.0) k++; if (x0 * x0 + y1 * y1 <= 1.0) k++; if (x1 * x1 + y1 * y1 <= 1.0) k++; c[k]++; } } for (k = 0; k < 5; k++) printf("c[%d]=%d\n", k, c[k]); return 0; } -とても単純なプログラムです。<math.h>すら使っていません。ミニ正方形の4つの頂点が円盤の中にあるかどうかを判定して、分類して集計しているだけです。 -実行するとこんな結果になります。 c[0]=12, c[1]=5, c[2]=8, c[3]=6, c[4]=69 -これはつまり、完全に円盤の中に入っていたものが69個で、頂点が3つだけ円盤の中に入ってたのが6個で、2つ入っていたのが8個で、1つ入っていたのが5つで、完全に円盤の外にあったものが12個あった、ということです。 -c[1〜3]の面積を0とみなしてパイを推定すると、2.76にしかなりません。これはかなり3.14から遠いです。がっかりですね。・・・逆にc[1〜3]を100%のミニ正方形だと仮定してパイを推定すると、3.52となり、これも3.14から遠いです。 -でもとりあえず上限と下限は分かりました。Nを大きくすれば、より誤差を狭めることが出来そうです。 -ここでN=100へ進んでもいいのですが、c[1]を25%、c[2]を50%、c[3]を75%として計算すると、 69+5*0.25+8*0.50+6*0.75=78.75 -となって、円盤の中にはミニ正方形が78.75個相当あると推定することもできます。この推定値からパイを計算すればなんと3.15となり、N=10の計算だけでも3.14にかなり近づくことができます! ---- -ではN=100で計算してみます。 c[0]=2047, c[1]=58, c[2]=82, c[3]=59, c[4]=7754 -これを使うとパイの値は、3.1016〜3.1812だということが分かります。 -さらに先の25%〜75%の方法を使えば、パイの値の近似値は3.1415になります。 ---- -もっと先に進んでN=1000にしてみます。 c[0]=213614, c[1]=585, c[2]=828, c[3]=586, c[4]=784387 上限下限:3.137548〜3.145544, (25%〜75%で近似)=3.141547 -さらにN=1万をやってみます。 c[0]=21450238, c[1]=5857, c[2]=8284, c[3]=5858, c[4]=78529763 上限下限:3.14119052〜3.14199048, (25%〜75%で近似)=3.14159051 *** 考察 -上限下限方式は数学的な意味が一番高いと思います。いくつより大きくていくつより小さいかはっきりするからです。たとえばN=1万の結果を見れば 3.14119052〜3.14199048 なので、3.141までは確定させることができます。しかしミニ正方形を1億個も作って比較して分類したのに、たったの4桁しか分からないというのは、なかなかさみしい気もします。 -これを改善する方法としては、まず上限値と下限値を足して2で割ってみる、という単純な方法があります。もう一つは、上でやったように、25%〜75%で近似するという方法もあります。僕の直感では、単純に足して2で割るよりは、25%〜75%で近似するほうが正解に近いかなと思っているのですが、さてどうでしょうか? --推定したパイが3.14159265からどのくらいずれているのか? | |N=10 |N=100 |N=1000 |N=1万| |単純に足して2で割る|RIGHT:-0.00159265|RIGHT:-0.00019265|RIGHT:-0.00004665|RIGHT:-0.00000215| |25%〜75%で近似 |RIGHT:+0.00840735|RIGHT:-0.00009265|RIGHT:-0.00004565|RIGHT:-0.00000214| -こうして見ると、25%〜75%の近似が特に優れているとかそういうことはなくて、適当にやった上限と下限の単純平均でもそんなに悪くなさそうです。 -([[prog/01]]に、このプログラムの高速化の話題があります) *** リンク -http://www1.coralnet.or.jp/kusuto/PI/ --円周率計算記録の歴史などが紹介されています。 --16000桁、13万桁の計算結果も見られます。 *** 雑談 -小学校のゆとり教育が始まったときに、円周率を3に近似するのは円を円に内接する正六角形に近似するのに相当するという批判があった。実は愚かにも僕もそれをすっかり信じた。しかしこれは少々おかしい気がする。正六角形の面積は、正三角形x6に等しいが、斜辺が1の正三角形の面積はsqrt(3)/4であって、これを6倍しても2.6にすら届かない(半径1の円の面積は円周率に等しい)。 -いやおかしくなかった。円周で考えると、正六角形の周の長さは6だから、直径の2で割れば3なのか。なるほど。 ---- -となると日能研で紹介されていた東京大学の入試問題の、円周率が3.05以上であることを証明せよというのは、正12角形の周の長さを出せばいいのかな。それでも足りないのかな。足りなければ24角形だなあ。・・・いつか暇になったら計算しよう。 * こめんと欄 -ルール違反でページを編集する荒らしが何度もきたので、当分の間このページは凍結します。コメントを書きたい場合は[[impressions]]へ。 -- [[K]] SIZE(10){2008-04-18 (金) 17:39:07} -ちなみに凍結中でもこのようにコメントは書けますが、書き損じた場合に修正ができません。書き損じない自信があればここに書いてもいいです。 -- ''K'' SIZE(10){2008-04-18 (金) 17:42:59} -書き始めから数えてもう10年以上になるのですが、ずっと書き途中になっていました。さすがに恥ずかしくなったので、予定していた内容を最後まで書きました。 -- ''K'' SIZE(10){2015-11-10 (火) 18:41:34} #comment
テキスト整形のルールを表示する