工学系大学院生のブログ

2人の大学院生による雑記ブログ

第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/xn
このエントリーをはてなブックマークに追加

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です