Точность в графиках и в N [] - PullRequest
1 голос
/ 22 ноября 2010

У меня есть хороший полином, который на самом деле является неотвеченным ответом на этот вопрос (я полагаю, что это домашняя работа, поэтому я ничего не буду публиковать, пока спрашивающий не покажет некоторую активность мозга: D) :

jj = 1 + 54 #1 + 855 #1^2 + 6300 #1^3 + 37296 #1^4 + 221706 #1^5 + 
   385782 #1^6 + 1899783 #1^7 - 713709 #1^8 - 8772909 #1^9 + 
   1718343 #1^10 + 17264169 #1^11 - 3659847 #1^12 - 20026899 #1^13 + 
   3423276 #1^14 + 13768320 #1^15 - 1610712 #1^16 - 5314050 #1^17 + 
   881651 #1^18 + 1545093 #1^19 - 151263 #1^20 - 298626 #1^21 - 
   24552 #1^22 + 21978 #1^23 + 6594 #1^24 + 792 #1^25 + 
   45 #1^26 + #1^27 &

Я хочу первый рут. Просто проверяю:

p[f_] := Plot[f[t], {t, Root[f, 1] - .003, Root[f, 1] + .003}];

p[jj]

alt text

Кажется, круто, но хорошо. Но посмотрите сейчас:

In[394]:= N[jj[Root[jj, 1]]]

Out[394]= -2.9523*10^13

Если я попрошу о точности:

In[396]:= N[jj[Root[jj, 1]], 1]

During evaluation of In[396]:= N::meprec: Internal precision limit $MaxExtraPrecision = 50.` reached while evaluating 1+<<11>>+<<18>>. >>

Out[396]= 0.*10^-49

Итак, вопрос в том, насколько отличается точность управления в Mma, когда вы запрашиваете график и когда вы запрашиваете числовой результат?

Ответы [ 3 ]

4 голосов
/ 22 ноября 2010

Проблема заключается в различении абсолютной и относительной точности. Рент ниже, но сначала решение:
Согласно документам для AccuracyGoal и PrecisionGoal, Mathematica будет стремиться вернуть результат x с числовой ошибкой меньше 10^{-a} + 10^{-p} Abs[x], где a равно AccuracyGoal и p равно PrecisionGoal Это вызывает проблему, если указать PrecisionGoal для нулевого результата. Решение: укажите только AccuracyGoal.
Для N вы делаете это с помощью набора Precision,Accuracy:

In[113]:= N[jj[Root[jj,1]],{0,24}]
Out[113]= 0.*10^-24

Использование терминов «точность» и «точность» в Mathematica очень небрежно. Их действительно следует называть «абсолютной точностью» и «относительной точностью». Смотрите, например Википедия для обсуждения правильной терминологии.

2 голосов
/ 22 ноября 2010

Ну, я не думаю, что вычисления, выполняемые вашей командой plot, похожи на те, которые выполняются вашей командой N.Вы можете проверить, какие точки подключены во время построения графика, используя Reap и Sow:

p[f_] := Plot[f[t], {t, Root[f, 1] - 0.003, Root[f, 1] + 0.003},
  EvaluationMonitor -> Sow[t]];
Reap[p[jj]][[2, 1]]

Обратите внимание, что в Plot используются только числа точности машины.Это очень отличается от вашей команды N, где вы подключаете точный корень функции.Трудность с вашими вычислениями произвольной точности возникает из-за того, что вы пытаетесь оценить точный ноль, а Mathematica не может придать точность результату.Это может случиться с гораздо более простыми полиномами.

x0 = x /. First[Solve[x^5 - x - 1 == 0, x]];
N[x0^5 - x0 - 1, 9]
0 голосов
/ 22 ноября 2010

Точность графика примерно (приблизительно) равна размеру / разрешению графика.Это оптимизация в Mathematica.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...