元ネタ
曖昧な数値を曖昧なまま計算できるPythonのモジュール uncertainties
これを読んだときはあまりよくわからなかったけど、インストールしていざ使ってみると、これはそんなに簡単なものではないようです。
from uncertainties import ufloat from uncertainties.umath import * x = ufloat("0.0+/-3.0") print sin(x)
0.0+/-3.0
はい?
もうちょっと簡単な例で試してみましょう。
x = ufloat("0.0+/-3.0") print x * 2
0.0+/-6.0
これは簡単ですね。
print ufloat("0.0+/-3.0") + ufloat("0.0+/-3.0")
0.0+/-4.24264068712
つまり、後ろの数は標準偏差なんですね。足すと分散が和になるので、√(32 + 32) = 3√2ということです。掛け算だともう少し難しくて、
print ufloat("1.0+/-0.1") * ufloat("2.0+/-0.1")
2.0+/-0.22360679775
これは√5/10ですね。このあたりはリンク先を辿ってくと公式が載っているところがあります。
Propagation of uncertainty - Wikipedia, the free encyclopedia
ここで、上のような計算では相関係数ρは0です。
さて、最初の例はなんだったのでしょう。
print sin(ufloat((math.pi / 3, 0.1)))
0.866025403784+/-0.05
π/3で傾きが1/2だから、それで近似しているわけですね。0なら傾きが1だから、上のようになると。関数はそういう仕組みになっているようですね。
元記事を書いている人は分かっていても、読んだだけの人はあまりわかっていないんじゃないかなあ。