Pythonの勉強をしている。本来、私はプログラミングをやったことはあるので、勉強していない人よりはわかりが速いはずと思っている。
しかし、よる年波には勝てず、記憶力が衰えてきており、Pythonで使用されている関数とか、いろいろのことが覚えられない。
そこで、簡単なプログラムを作りながら、Pythonを覚えていこうと思っている。まずは、平方根を求めるプログラム。
-------------------------------------
# X の平方根を求める
x = 3
#
rootnew = x
#
for i in range(10):
root1 = rootnew
root2 = x/root1
rootnew = (root1 + root2)/2
print(root1, rootnew, root2)
---------------------------------------------
平方根を求める方法では、学生時代にニュートン法という方法で平方根を求めた。詳しい説明はここでは省く。「ニュートン法」で検索するといくつかの説明のサイトが出てくるので見てもらいたい。
今回利用したのは京都大学の学生用Python教育の資料である。
「プログラミング演習 Python 2019」で検索するとでてくる。喜多一先生が作らたものである。私は資料の最初の部分はよく知っていることなので、読み飛ばして、早速プログラムが書かれているところを読むことにした。コンピュータの理解が乏しい人は読んでおくと良い。
プログラムを入力して、走らせると以下のような結果が出てくる。
xの値を色々変えてみると、それぞれの平方根が求まる。
======================= RESTART: C:\Work\kkex2.py ====================
3 2.0 1.0
2.0 1.75 1.5
1.75 1.7321428571428572 1.7142857142857142
1.7321428571428572 1.7320508100147274 1.7319587628865978
1.7320508100147274 1.7320508075688772 1.7320508051230272
1.7320508075688772 1.7320508075688772 1.7320508075688774
1.7320508075688772 1.7320508075688772 1.7320508075688774
1.7320508075688772 1.7320508075688772 1.7320508075688774
1.7320508075688772 1.7320508075688772 1.7320508075688774
1.7320508075688772 1.7320508075688772 1.7320508075688774
上のリストから見て、4回ぐらいループさせると、1.7320508という値が表示される。手書きで計算すると大変なところだが、Pythonを使えば瞬時に解が出てくる。
もちろん、Pythonは
3**(1/2)
ですぐに 「3」 の平方根を計算してくれるので、いちいちPythonでプログラムを作る必要はないのだが。
>>> 3**(1/2)
1.7320508075688772
私はプログラミングが面白いのは、結果を表示するための理屈を理解して、それをプログラムするところだと考えている。だから、どうして平方根が計算されるのかというのを理解するのも一つのプログラミング学習だ。
以下、それぞれの行に説明を入れてみた。
-------------------------------------
# X の平方根を求める
x = 3 まず、xを3にする。
#
rootnew = x rootnew を xと同じ値にする。
#
for i in range(10): 以下の4行の操作を10回繰り返す。
root1 = rootnew root1 を rootnewと同じ値にする。
root2 = x/root1 x を root1 で割って其の結果をroot2 に入れる
rootnew = (root1 + root2)/2 rootnew は root1 と root2の平均値にする
print(root1, rootnew, root2) root1、rootnew、 root2 を印刷する
---------------------------------------------
リストの下の4行の操作を繰り返していくと、root1 と root2 の間隔がだんだん狭まってくる。その感覚の中に rootnew はあるので、rootnew の値も正しい 3 の平方根の値に近づいてくる。 もちろん、root1 も root2 も平方根の値に近づく。
つまり、root1 と root2 の値も、rootnew の値に近づいてくる。
root2 = x/root1
の式を見れば良い。限りなく root1 と root2 が近づいてくるので、
x = rootnew**2
という結果に rootnew の値が近づいてくるのだ。
3の平方根は小数点以下無限に続く無理数なので、永遠に算出することはできないのだが、実用上は意味のある小数点以下の数字を得ることが出来る。
面白いことに x = 4 の場合でも、root1, rootnew、root2 の値はすぐに 2.0 にならず、数回の繰り返しで値が固定する。
==================== RESTART: C:\Work\kkex2.py ======================
4 2.5 1.0
2.5 2.05 1.6
2.05 2.000609756097561 1.9512195121951221
2.000609756097561 2.0000000929222947 1.9993904297470284
2.0000000929222947 2.000000000000002 1.9999999070777095
2.000000000000002 2.0 1.9999999999999978
2.0 2.0 2.0
2.0 2.0 2.0
2.0 2.0 2.0
2.0 2.0 2.0
>>>
2020年5月16日土曜日
登録:
コメントの投稿 (Atom)
持ち帰りOKの子授け地蔵、3年ぶりに祠へ
丹波新聞によると、持ち帰り自由の子授け地蔵が3年ぶりに戻ってきたそうです。 (https://tanba.jp/) このお地蔵様は「子授地蔵」と呼ばれ、子授けの御利益があるとされています。 持ち帰って願いが叶えば、元の場所に戻すという風習があります。 2021年4月頃、このお地...
-
昨日、11月8日の毎日新聞には辛口数独が出ていた。唐辛子のマークが5つついており、たいへん難しい問題という表示である。上の問題である。 この問題を簡単に数字が推測できるところは、考えて入れていくと下のような画面になる。 ここで右下隅の9つの数字に注目する。「1」と「6」が入る...
-
Gmailを使用している友人から質問が届いた。 Gmailでメールを発信したのだが、以下のようなエラーメッセージが届いたという。 もともと、このエラーメッセージの意味がよくわからない。 「local-part of envelope RCPT address co...
-
今週の週刊新潮の3月28日号の「文殊のストレッチ」をやってみた。今週は漢字四文字を54個探し出して、残った漢字から四文字熟語を作るというものだ。かなり難しい。 結局下のような結果になった。54個の漢字四文字かどうかは確認していない。考えつくままに四字の熟語などを探し出して、消...
0 件のコメント:
コメントを投稿