###テスト
##目的
下記の3つの理解が目的(これは個人的な記事)
1.数式の書き方
2.Qiitaの記事の書き方
3.「2.」で理解した書き方により、pythonコードを添付
##数式の書き方
Qiitaでの数式の書き方はtexの書き方で、
$$の間に、e^{i\theta}=\cos{\theta}+i\sin{\theta}を書けば、
$e^{i\theta}=\cos{\theta}+i\sin{\theta}$
このように数式が書ける。
texの数式の書き方は以下を参照。
http://www1.kiy.jp/~yoka/LaTeX/latex.html
##Qiitaでの書き方
以降の書き方は下記のページを参考。
https://qiita.com/shizuma/items/8616bbe3ebe8ab0b6ca1
上記の添付より学んだことを活かして、以下のようにプログラムのソースコードを書いた。
内容は、「数値誤差」について。
##数値計算と誤差
数値計算する上で、避けることができないのが数値誤差である。
以下に代表的な数値誤差の例を一覧で示し、pythonコードで検証してみる。
検証例は「桁落ち」のみ示す。
項目 | 説明 |
---|---|
桁落ち | 値のほぼ等しいもの通しを減算するなどして、有効数字失われるなどによって生じる誤差。 例:$\sqrt{x+1}-\sqrt{x}$ 下にpythonのプログラムで試行してみたので参考に。 |
丸め誤差 | 有限桁数の2進数で実数を表現することにより生じる誤差。 例:10進数での0.1$\longrightarrow$2進数では0.0001100110011$\cdot\cdot\cdot$ |
情報落ち | 絶対値の大きく異なる数値同士の演算において、絶対値の小さな数値が演算に結果に反映されないために生じる誤差。 例:$10^{10}+10^{-8}+10^{-8}\cdot\cdot\cdot$ |
###桁落ち検証
$\sqrt{x+1}-\sqrt{x}=\frac{1}{\sqrt{x+1}+\sqrt{x}}$
とすることで数値計算上の桁落ち誤差を回避できる。
pythonを用いて実行してみる。
version:3.6.4
pythonは下記よりインストールする。
https://www.python.org/downloads/
PC環境:windows10(64bit)
コマンドプロンプトで以下を打てば、test.py(下に示すコード)を実行できる。
python test.py
import math
#main program
#case1:x=1e15
print("x=1e15の場合")
x=1e15
res_a=math.sqrt(x+1)-math.sqrt(x)
res_b=1/(math.sqrt(x+1)+math.sqrt(x))
#output result
print("通常通り計算した場合:",res_a)
print("式変形した場合:",res_b)
#case2:y=1e16
print("y=1e16の場合")
y=1e16
res_a=math.sqrt(y+1)-math.sqrt(y)
res_b=1/(math.sqrt(y+1)+math.sqrt(y))
#output result
print("通常通り計算した場合:",res_a)
print("式変形した場合:",res_b)
#end python
###結果
x=1e15の場合
通常通り計算した場合: 1.862645149230957e-08
式変形した場合: 1.5811388300841893e-08
y=1e16の場合
通常通り計算した場合: 0.0
式変形した場合: 5e-09
値の差が小さいもの同士(case1の場合)での減算は通常通り計算すると0になってしまう。
式変形した場合は値が出力される。
この例のように、値の差が小さいもの同士での減算は避けるべきである。
###参考文献
Pythonによる数値計算とシミュレーション