Граф странного греха [x] в Математике - PullRequest
35 голосов
/ 31 декабря 2010

Я случайно нарисовал функцию Sin [x] в Mathematica 7, и вот что она показывает:

http://i.stack.imgur.com/hizGw.png

Обратите внимание на видимый дефект приблизительно при x = -100.

Вот увеличение дефектной части, ясно показывающее, что Mathematica по какой-то причине использует гораздо меньшее разрешение между точками там:

mesh

Кто-нибудь знает, почему это происходит, ипочему только в x = -100?

Примечание: то же самое происходит в Wolfram Alpha , кстати.

1 Ответ

62 голосов
/ 31 декабря 2010

Краткий ответ: точность построения графика по умолчанию недостаточна для этой функции, поэтому увеличьте ее следующим образом:

Plot[Sin[x], {x, -42 Pi, 42 Pi}, PlotPoints -> 100]

Длинный ответ: Plot работает, оценивая функцию в конечном наборе точек и соединяяэти точки по прямым линиям.Вы можете увидеть точки, используемые Plot, используя следующую команду

Plot[Sin[x], {x, -42 Pi, 42 Pi}, Mesh -> All, PlotStyle -> None, 
 MeshStyle -> Black]

plot

Это можно увидеть для вашегофункция, точки, где функция была оценена, «пропустили пик» и ввели большую погрешность аппроксимации.Алгоритм, используемый для выбора местоположения точек, очень прост, и такая ситуация может возникнуть, когда два пика расположены ближе друг к другу, чем PlotRange / PlotPoints.

Plot начинается с 50 одинаково разнесенных точек, а затем вставляет дополнительные точки вдо MaxRecursion этапов.Вы можете видеть, как выглядит эта «дыра», если вы строите область для различных настроек MaxRecursion.

plot1 = Plot[Sin[x], {x, -42 Pi, 42 Pi}, PlotPoints -> 100, 
   PlotStyle -> LightGray];
Table[plot2 = 
   Plot[Sin[x], {x, -42 Pi, 42 Pi}, Mesh -> All, MeshStyle -> Thick, 
    PlotStyle -> Red, MaxRecursion -> k]; 
  Show[plot1, plot2, PlotRange -> {{-110, -90}, {-1, 1}}, 
   PlotLabel -> ("MaxRecursion " <> ToString[k])], {k, 0, 
   5}] // GraphicsColumn

plot

В соответствии с книгой Стэна Вагона Mathematica Plot решает, добавлять ли дополнительную точку на полпути между двумяпоследовательные точки, если угол между двумя новыми отрезками будет больше 5 градусов.В этом случае сюжету не повезло с позиционированием начальной точки, и подразделение не соответствует этому критерию.Вы можете видеть, что при вставке одной точки оценки в центр отверстия будет получаться почти идентично выглядящий график.

Способ увеличения угла, используемый для определения момента деления с помощью опции Refinement (я понялиз книги, но, кажется, это не документировано в продукте)

plot1 = Plot[Sin[x], {x, -42 Pi, 42 Pi}, PlotPoints -> 100, 
   PlotStyle -> LightGray];
Show[plot1, 
 Plot[Sin[x], {x, -42 Pi, 42 Pi}, Mesh -> All, MeshStyle -> Thick, 
  PlotStyle -> Red, MaxRecursion -> 3, 
   Method -> {Refinement -> {ControlValue -> 4 \[Degree]}}], 
 PlotRange -> {{-110, -90}, {-1, 1}}]

Здесь вы можете видеть, что увеличение его на 1 градус по умолчанию 5 исправляет дыру.

plot

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