Подтвердить что ты не робот

График Strange Sin [x] в Mathematica

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

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

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

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

mesh

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

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

4b9b3361

Ответ 1

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

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

Согласно книге Stan Wagon 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