使用不确定性精度

发布于 2024-11-01 19:26:51 字数 834 浏览 1 评论 0原文

假设我有 2 个列表,包含以下元素:

  1. 值 值的不确定性

存储为精确分数,我想打印出数值的组合列表。例如,如果我有 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

Lets say I have 2 lists, containing elements:

  1. values
  2. uncertainties of the values

Values are stored as exact fractions and I want to print out combined list of numerical values. For example if i have 1 element lists:

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

I want the output to be: {5.3746 ± 0.0028, 360.13 ± 0.19}, with using Err[ExA, ExB].

Basically I want uncertainty to have a element precision of 2 digits and value to have same precision as the paired uncertainty. At the moment I have:

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

Edit:
Following almost works as I want:

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

If uncertainties second digit rounds to 0, then shorter version is used - I do not want that. For example 1.7007 ± 0.006 where I want 1.7007 ± 0.0060.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

淡淡的优雅 2024-11-08 19:26:51

更正版本:

可以对错误使用 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

Corrected version:

Can use N[...,2] on the errors, then take N[...,{Infinity,Accuracy[error]}] on the central values. THis second numericization causes the accuracy of each central value to match the accuracy of its corresponding 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

蛮可爱 2024-11-08 19:26:51

改进版本,灵感来自于大牛的回答:

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

Improved version, inspired by Daniel's answer:

SetAttributes[Err, Listable]

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

Testing

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文