Благодаря за этот отличный анализ алгоритма Plot
Ярослава Булатова, Теперь я понимаю причину, по которой Plot3D
и ContourPlot
не могут плавно рисовать функции с разрывами и разрывами.
Например, в следующем случае ContourPlot вообще не может нарисовать контур x ^ 2 + y ^ 2 = 1:
ContourPlot[Abs[x^2 + y^2 - 1], {x, -1, 1}, {y, -1, 1}, Contours -> {0}]
Это потому, что алгоритм не углубляется в область около x ^ 2 + y ^ 2 = 1. Он «сбрасывает» этот регион на начальном этапе и не пытается исследовать его дальше. Увеличение MaxRecursion
в этом смысле ничего не делает. И даже недокументированная опция Method -> {Refinement -> {ControlValue -> .01 \ [Degree]}}
не помогает (но делает Plot3D
немного более плавным).
Вышеупомянутая функция представляет собой простой пример. В реальной жизни я работаю с очень сложными неявными функциями, которые невозможно решить аналитически.
Есть ли способ заставить ContourPlot
углубиться в такие области вблизи разрывов и разрывов?