AdaptiveMesh

Адаптивная выборка

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Сводные данные значения

НаследованныйНеотрицательное целое число

Графические примитивы

Описание

AdaptiveMesh = n управляет адаптивной выборкой в численной оценке функций, кривых и поверхностей. С n = 0, отключена адаптивная выборка. С n> 0, включена адаптивная выборка.

“Глубина” n адаптивной выборки должна быть маленьким целым числом такой как 0, 1, 2, или 3.

Непрерывные графические объекты, такие как функциональные графики, параметризованные кривые и поверхности аппроксимированы дискретной сеткой числовых точек.

Этой mesh может управлять пользователь через атрибуты Mesh, Submesh и AdaptiveMesh. (В зависимости от объекта атрибут Mesh разделяет в более определенные версии такой нас UMesh и VMesh для кривой и объемных поверхностных диаграмм, или XMesh, YMesh, ZMesh для функции и неявных графиков.)

Во-первых, объект оценен численно на равноотстоящей “начальной mesh” набор через атрибут Mesh (или более определенные упомянутые выше версии).

С AdaptiveMesh = 0 числовые данные по начальной mesh используются, чтобы представить объект без дальнейшего адаптивного улучшения.

С AdaptiveMesh = n, n> 0, далее вычисляются числовые данные, прежде чем средство отображения называется. В частности, данные соседних точек на начальной mesh исследованы. Если точка обоснованно не представлена прямой линией, соединяющей соседние точки, соответствующие интервалы начальной mesh подразделены рекурсивно. Адаптивный механизм убывает на подынтервалы начальной mesh, если последовательные линейные сегменты дискретизированного объекта графика отклоняются от прямой линии “углом изгиба” больше чем 10 градусов. Интервалы, вовлеченные в такую ситуацию, разделены в половины, рекурсивно.

Значение n должно быть маленьким целым числом, которое определяет рекурсивную глубину адаптивного улучшения. В каждом направлении до 2n - 1 дополнительная точка помещается между точками начальной mesh.

Если объект выглядит гладко на начальном наборе mesh через атрибут Mesh или его более подробные варианты, адаптивный механизм не убывает на интервалы начальной mesh. Если существуют микроструктуры, скрытые в этих интервалах, указывая, что AdaptiveMesh = n с n> 0 не поможет улучшить график. В таком случае начальная mesh должна быть усовершенствована через соответствующий атрибут для начальной mesh.

С другой стороны, если начальная mesh достаточно прекрасна, чтобы указать на более прекрасные внутренние структуры через “макс. угловой критерий” изгиба, часто более эффективно использовать AdaptiveMesh = n, чем совершенствовать начальную mesh, потому что адаптивный механизм совершенствовал только те части объекта, которым действительно нужно улучшение. Этот эффект виден в Примере 3.

Примечание

Обратите внимание на то, что увеличивая рекурсивную глубину n 1 может увеличить время выполнения фактором 2 для объектов линии (2D функциональные графики и кривые) и фактором 4 для объектов подложки (3D функциональные графики и поверхности). В большинстве случаев маленькое значение, такое как n ∈ {1, 2, 3} достаточно, чтобы получить довольно сглаженный объект графика.

Примечание

Обратите внимание на то, что адаптивный алгоритм для объектов подложки в 3D является очень дорогим! Как альтернатива значениям n> 0 в AdaptiveMesh = n, можно экспериментировать с AdaptiveMesh = 0, Submesh = [2n- 1, 2n- 1] в 3D функциональных графиках или поверхностях. Гранулярность “начальной mesh”, сгенерированной с этими значениями атрибута, приблизительно одного размера как адаптивная mesh, сгенерированная с AdaptiveMesh = n, Submesh = [0, 0]. Неадаптивная оценка на усовершенствованной регулярной mesh может все еще быть более эффективной, чем оценка на (неправильной) неадаптивной mesh.

Примеры

Пример 1

Следующий график функций содержит области высокого изменения. Без спецификации AdaptiveMesh режим по умолчанию используется AdaptiveMesh = 0, и мы ясно видим артефакты, вызванные оценкой на дискретной mesh:

plot(plot::Function2d(
     sin(x) + exp(-5*(x - PI/2)^2)*sin(110*x)/10, x = 0..PI)):

Мы активируем адаптивное улучшение высоким уровнем 3:

plot(plot::Function2d(
     sin(x) + exp(-5*(x - PI/2)^2)*sin(110*x)/10, x = 0..PI, 
     AdaptiveMesh = 3)):

Мы устанавливаем атрибут PointsVisible = TRUE так, чтобы точки адаптивной mesh стали видимыми:

plot(plot::Function2d(
     sin(x) + exp(-5*(x - PI/2)^2)*sin(110*x)/10, x = 0..PI, 
     AdaptiveMesh = 3, PointsVisible = TRUE)):

Пример 2

Значение по умолчанию Mesh не обеспечивает достаточное разрешение для следующей спирали:

plot(plot::Curve2d([x*cos(x), x*sin(x)], x = 0..50*PI)):

Увеличение значения Mesh улучшает график:

plot(plot::Curve2d([x*cos(x), x*sin(x)], x = 0..50*PI,
                   Mesh = 1000)):

Также адаптивный графический вывод может использоваться:

plot(plot::Curve2d([x*cos(x), x*sin(x)], x = 0..50*PI,
                   AdaptiveMesh = 3)):

Пример 3

В 3D типичные артефакты, вызванные прямолинейной начальной mesh, являются “вмятинами” на поверхностных функциях, которые не параллельны оси параметра. Без спецификации AdaptiveMesh режим по умолчанию используется AdaptiveMesh = 0:

f := plot::Function3d(sin(x*y)/(abs(x*y) + 1), 
                      x = -4 .. 4, y = -4 .. 4):
plot(f):

Активируя адаптивное улучшение, мы получаем намного более точный график. Однако вычисление берет намного дольше:

plot(f, AdaptiveMesh = 2):

Насколько локальный улучшение, мы устанавливаем атрибут MeshVisible = TRUE так, чтобы внутренняя триангуляция адаптивной mesh стала видимой:

plot(f, AdaptiveMesh = 2, MeshVisible = TRUE):

Мы используем неадаптивную оценку, но совершенствовали регулярную mesh значениями установки Submesh 2n - 1, которые соответствуют адаптивной глубине n = 2 используемых выше. Результат имеет подобное качество как прежде:

plot(plot::Function3d(sin(x*y)/(abs(x*y) + 1), 
                      x = -4 .. 4, y = -4 .. 4,
                      Submesh = [3, 3])):

delete f:

Смотрите также

Функции MuPAD