Использование точности неопределенности

#wolfram-mathematica

#wolfram-mathematica

Вопрос:

Допустим, у меня есть 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 .

Комментарии:

1. @Mr.Wizard : Ну, если записать в научной нотации, я хочу, чтобы значение имело тот же множитель и количество знаков после запятой, что и неопределенность.

2. @Mr .Wizard : Это не сработает, если Err используется внутри списка.

3. @Mr .Wizard : Я имею в виду {Err[m, [CapitalDelta]m], Err[t, [CapitalDelta]t]} , например, не работает.

4. Маргус, я внес еще одну правку. Надеюсь, на этот раз у меня все в порядке с головой.

5. Кажется, я пропустил ваше обновление. Вернемся к чертежной доске! 🙂

Ответ №1:

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

Можно использовать N[…,2] для ошибок, затем взять N […,{Бесконечность, точность [ошибка]}] для центральных значений. Эта вторая нумерация приводит к тому, что точность каждого центрального значения соответствует точности соответствующей ошибки.

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

Out[113]= {5.3746 [Плюс-минус] 0.0028, 360.13 [Плюс-минус] 0.19}

Daniel Lichtblau

Ответ №2:

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

 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

Комментарии:

1. Маргус, спасибо за согласие. Пожалуйста, ознакомьтесь с улучшенной версией, которую я только что добавил.