Краткий ответ: точность построения графика по умолчанию недостаточна для этой функции, поэтому увеличьте ее следующим образом:
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]
Это можно увидеть для вашегофункция, точки, где функция была оценена, «пропустили пик» и ввели большую погрешность аппроксимации.Алгоритм, используемый для выбора местоположения точек, очень прост, и такая ситуация может возникнуть, когда два пика расположены ближе друг к другу, чем 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
В соответствии с книгой Стэна Вагона 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 исправляет дыру.