使用不确定性准确

时间:2011-04-13 16:16:32

标签: wolfram-mathematica

假设我有两个包含元素的列表:

  1. 值的不确定性
  2. 值存储为精确分数,我想打印出数值的组合列表。例如,如果我有1个元素列表:

    ExA = {5251/977, 19087/53};
    ExB = {53/19087, 977/5251};
    

    我希望输出为:{5.3746 ± 0.0028, 360.13 ± 0.19},并使用Err[ExA, ExB]

    基本上我希望不确定性具有2位数的元素精度,并且值具有与配对不确定性相同的精度。目前我有:

    Err[x_, \[CapitalDelta]x_]:=
      N[x] \[PlusMinus] NumberForm[N[\[CapitalDelta]x], 2];
    SetAttributes[Err, Listable];
    

    编辑: 几乎按照我的意愿行事:

    Err[x_, \[CapitalDelta]x_] := 
     PlusMinus[
      NumberForm[N[x], {10, 2 - MantissaExponent[\[CapitalDelta]x][[2]]}],
       NumberForm[N[\[CapitalDelta]x], 2]]
    SetAttributes[Err, Listable];
    

    如果不确定性的第二位数转为0,则使用更短的版本 - 我不希望这样。例如1.7007 ± 0.006,我想要1.7007 ± 0.0060

2 个答案:

答案 0 :(得分:7)

更正版本:

可以对错误使用N [...,2],然后对中心值取N [...,{Infinity,Accuracy [error]}]。这是第二次数值化导致每个中心值的准确性与其相应误差的准确性相匹配。

PlusMinus @@@ 
  Map[{N[#[[1]], {Infinity, Accuracy[#[[2]]]}], #[[2]]} &, 
   Transpose[{ExA, N[ExB, 2]}]]

Out [113] = {5.3746 [PlusMinus] 0.0028,360.13 [PlusMinus] 0.19}

Daniel Lichtblau

答案 1 :(得分:4)

改进版,灵感来自丹尼尔的回答:

SetAttributes[Err, Listable]

Err[n_, e_] := N[n, {∞, 2 - Log10@e}] ± N[e, 2]

测试

ExA = {5251/977, 19087/53, 850341/500000};
ExB = {53/19087, 977/5251, 151/25000};

Err[ExA, ExB]

Err[5251/977, 53/19087]
{5.3746 ± 0.0028, 360.13 ± 0.19, 1.7007 ± 0.0060}

5.3746 ± 0.0028