0
1

物理量などを適切な有効数字で誤差とともに表示する

Posted at

解決したい問題

あるデータをガウシアンでフィットした場合など、得られるパラメータの値と誤差の桁はパラメータによって大きく違うことがある。
$$ p_1 \exp \left(- \frac{(x-p_2)^2}{2p_3^2} \right)$$

例えば scipy.optimizee.leastsq で得られた値を
$p_1 = 1000 \pm 20$
$p_2 = 300.3 \pm 0.4$
$p_3 = 5.05 \pm 0.06$
のように表示したくても、パラメータの桁数を指定する方法では
p1 = 1000.00 +- 20.34
p2 = 300.30 +- 0.45
p3 = 5.05 +- 0.06
と不恰好になるし、指数表示でも
p1 = 1.000+e03 +- 2.034+e01
などのように不要な桁が現れる。

お手製の解決法

def format_with_error(p, dp):
    if dp == 0:
        return f"{p}"
    
    if dp >= 1:
        return f"{p:.0f} ± {dp:.0f}"
    
    dp_str = f"{dp:.10f}"  
    decimal_places = len(dp_str.split('.')[1].rstrip('0'))
    
    return f"{p:.{decimal_places}f} ± {dp:.{decimal_places}f}"

専用のライブラリuncertainties

from uncertainties import ufloat
v = ufloat(p,dp)
print(f"{v:.1u}")

可読性が上がった

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1