Используя точность неопределенности - PullRequest
4 голосов
/ 13 апреля 2011

Допустим, у меня есть 2 списка, содержащие элементы:

  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 ]

7 голосов
/ 13 апреля 2011

Исправленная версия:

Можно использовать 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}

Даниэль Лихтблау

4 голосов
/ 13 апреля 2011

Улучшенная версия, вдохновленная ответом Даниэля:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...