#wolfram-mathematica
#wolfram-mathematica
Вопрос:
Допустим, у меня есть 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. Маргус, спасибо за согласие. Пожалуйста, ознакомьтесь с улучшенной версией, которую я только что добавил.