第0回 数値解析(\(\sqrt{2}\))
pythonを用いて数値解析を行っていきたいと思います。
数値解析(すうちかいせき、Numerical Analysis)は、数学および物理学の一分野で、代数的な方法で解を得ることが不可能な解析学上の問題を(通常は有限精度の)数値を用いて近似的に解く手法に関する学問である。
「数値解析」『 フリー百科事典 ウィキペディア日本語版 』. 2019年2月15日(金)12:00 UTC, URL:https://ja.wikipedia.org/wiki/数値解析.
僕たちは学校で数学を習い、当たり前のように \(\sqrt{x}\) や \(sin x\) を用いて答えを出します。
しかし、実際にものづくりをする際には「\(\sqrt{2}\) メートルの長さに切ってください」なんて言いませんし、無理数なので正確に切ることができません。
そこで今回は数値解析で \(\sqrt{2}\) を有効数字3桁で求めたいと思います。
まず、下記の式を考えます。
$$f(x)=x^2-2$$
この式の解は \(\pm\sqrt{2}\) となります。つまり上式において、 \(f(x)=0\) (\(x\geq0\) ) となる \(x\) を求めればよいわけです。
今回用いる簡易ニュートン法の式は下記のとおりです。
$$x_{n+1}=x_n-\frac{f(x)}{f'(x)}$$
\(f(x)\) がわかっていますので代入し整理します。
$$x_{n+1}=x_n-\frac{x_n^2-2}{2x_n}$$
$$x_{n+1}=\frac{x_n}{2}+\frac{1}{x_n}$$
適当な初期値 \(x_0\) からはじめ更新していきます。 \(1.0\times10^{-4}\geq{f(x_i)}\) となったら終了とします。
使用したpythonのコードは最後に張っておきます。
初期値 \(x_0=2.0\) で始めたところ、1ステップ毎の結果は下記の通りです。
2.0
1.5
1.4166666666666665
1.4142156862745097
精度の高い値と比較すると小数第5まで一致していることがわかると思います。
1.4142156862745097
1.41421356(一夜 一夜に人見ごろ)
結論
\(\sqrt{2}\) メートル は \(1.41\) メートル
これも立派な数値解析です。こんな感じで微分方程式に対していろいろやっていきたいです。
備忘録であり、コードに関しては諸々あると思いますが、ご了承ください。
pythonで書いていきます。何かの役に立てば幸いです。
よろしくお願いします。
by hide
xn = 2.0 # 初期値 while True: print(xn) if abs(2-xn**2) < 1.0*10**(-4): # 判定 break xn = xn/2 + 1/xnTweet
コメントを残す