KNIMEST’s diary

KNIME使いがPythonも使いたくて勉強中

【Python学習帳】008_ニュートン法

初学者を対象としている京都大学の無料Python教材の学習中です。
「プログラミング演習 Python 2021」
Version2021_10_08_01.pdf

hdl.handle.net

CC-BY-NC-NDライセンスに従って引用します。

 

本教材での到達目標:

Python によるプログラムの実行についての基本操作ができるようになる.
Python プログラムを構成する基本的要素の機能と書式について説明し,例題を用いて実行例を構成できるようになる.
Python を用いて簡単なプログラムを自ら設計,実装,テストできるようになる.

第3章、「変数と演算,代入」の勉強中です。

knimest.hatenablog.com

今回は平方根の計算を例にプログラミング体験します。
ニュートン法で平均値を求めるプログラミングだそうです。教材に計算の流れや実際のコードが丁寧に説明されているのでここでは結果の確認のみとします。

そもそもこの計算式はニュートン法で導き出されたものだそうで、コラムに実際に式の導出まで解説しています。

http://hdl.handle.net/2433/265459

のもう一つの教材「Version2021_10_08_02.pdf」です。更に発展問題として

http://hdl.handle.net/2433/265459 「Version2021_10_08_02.pdf」

とあり、この式をプログラミングしてみるように薦められています。

5章まで学習を進めないとループ処理を習わないので現時点では部分的に書いてみます。

8の3乗根が2と算出されるには8回繰り返し実行しなくてはなりませんでした。

1回だけの実行だと近似値が(16 + 0.125)/3 = 5.375となります。

式は単純で,収束も速いのですが逆数を記録する必要があるので手や電卓で計算したりするときには面倒です.

とのコメントもその通りで、プログラムさえ組んでしまえば実行は数秒でしたし各ステップでの近似値の推移も一覧表示できて楽になると実感できました。

 

それにしてもニュートン法、プログラミング実習には人気の課題なのでしょうか「ニュートン法 Python」で検索したら多数ヒットしますね。一つだけ紹介してみます。

www.yakupro.info

余談となりますがこのブログの作者の方は薬剤師で、薬物動態シミュレーションなどを主目的にPythonを利用されてコードを公開して下さっています。

薬学生や薬剤師で「プログラミングに興味はあるけど何をやればいいのかわからない」とか、「始めてみたものの作るものが思い浮かばない」というような人にとって、何かのきっかけとなるようなブログを目指したい

www.yakupro.info

志が素晴らしく、また独学でここまでされていて感心しきりです。

 

さて、Python学習に戻ります。

今回の章も故意にエラーを発生させる学習課題が出ています。

演習 3-6 エラーを体験する(1).
プログラム 3-1 で 4 行目の rnew を誤って rmew と綴ってみて実行し,どのようなエラーになるかを確かめてください.
17 章「IDLE/Python でのエラーメッセージの読み方」も併せて参照すること.

下図の右のウィンドウで黒塗りしている部分を”m”と誤記すれば左ウィンドウの赤色のエラーメッセージが出ます。”n”に直せば青色表示の正しい実行結果が得られます。

17 章「IDLE/Python でのエラーメッセージの読み方」は大切な情報ですね。

システムエンジニア経験者の方にエラーが出た時にいかにうまく検索して適切な解決法に速く到達できるのかが大切なスキルですと教わったことがあります。

まだ知らないことが多すぎてこの章に記載された内容の理解は不十分ではありますが、今後も都度読むことになると思いました。

 

今回はなるほど確かに変数のNameErrorですよね。

http://hdl.handle.net/2433/265459 「プログラミング演習 Python 2021」 Version2021_10_08_01.pdf

さらにもう一つ課題があります。

演習 3-7 他の数値の平方根を求める.
1. p3-1.py を変更して,他の正の数値の平方根を求めてください.
2. また,このプログラムで 0 の平方根を求めようとすると何が生じるか確認し てください.単にエラーのメッセージを見るだけでなく,実際にプログラム をご自身で追いかけて(トレースすると言います),どこで問題が生じるかを 考えてください.

こちらの解答例の代わりに負の数値(-4)をxに入力して実行してみた結果が青色表示されています。

ある方が、プログラミングは解を与えるが正解を与えるとは限らないと言っていました。プログラムを組む側が間違っていたら正解が得られないのは当然のことなんですが、私も自分が提供したKNIMEのワークフローのエラー相談を受けた時に「えっ、なんでそんな入力するんですか?」と自分の想定の甘さを悔やんだことがあります。

次節である「3.9 割り算に注意」もまさに設計時によくよく注意しておかなくてはいけないポイントです。

プログラミングで割り算が出てきたら,「割る数」が 0 にならないか,ということを常に気にするようにしましょう.

余談が過ぎましたかね。今日はここまでとして次回は第3章の最後まで読み進めます。

knimest.hatenablog.com