plot::Density

График плотности

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

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

Синтаксис

plot::Density(f, x = xmin .. xmax, y = ymin .. ymax, <a = amin .. amax>, options)
plot::Density(A, <x = xmin .. xmax, y = ymin .. ymax>, <a = amin .. amax>, options)
plot::Density(L, <x = xmin .. xmax, y = ymin .. ymax>, <a = amin .. amax>, options)

Описание

plot::Density(f(x, y), x = `x_{min}`..`x_{max}` , y = `y_{min}`..`y_{max}` ) генерирует регулярную 2D сетку прямоугольного расширения от левого нижнего угла (xminymin ) к правому верхнему углу (xmaxymax ). Прямоугольник со средней точкой (x, y) окрашен согласно цветовой схеме на основе значения “плотности” f (x, y).

plot::Density подачи для визуализации 3D данных (x, y, f (x, y)) 2D графиком. Примерно разговор, это соответствует цветному 3D функциональному графику функции плотности f (x, y) просматриваемый сверху. Однако в отличие от 3D функционального графика, plot::Density не использует сплайн-интерполяцию (“штриховка”) цвета между смежными прямоугольниками.

Если данные о плотности обеспечиваются массивом или матричным A или списком L, количество прямоугольников в графике плотности дано автоматически форматом A или L, соответственно.

Если данные о плотности даны выражением или функциональным f, атрибут Mesh = [m, n] подачи для уведомления plot::Density создать сетку m ×n прямоугольники. В качестве альтернативы можно установить XMesh = m, YMesh = n.

С FillColorType по умолчанию = Dichromatic, прямоугольник со значением плотности f (x, y) в средней точке (x, y) окрашен с цветом

,

где минимальные/максимальные значения плотности в графике и fillcolor, fillcolor2 RGB значения атрибутов FillColor и FillColor2, соответственно. Таким образом, fillcolor указывает на значения высокой плотности тогда как fillcolor2 указывает на низкие значения плотности.

Если f min = f max, плоская окраска с fillcolor используется.

С FillColorType = Monochrome, прямоугольник со значением плотности f (x, y) в средней точке (x, y) окрашен с цветом

.

Пользователь может задать функцию цвета заливки через FillColorFunction = mycolorfunction заменять окраску плотности, описанную выше. Процедура mycolorfunction будет вызван аргументами

mycolorfunction(x, y, f(x, y, a ) a ),

где (x, y) средние точки прямоугольников, и a является параметром анимации. Функция управления цветом должна возвратить RGB или RGBa значение цвета.

Когда значения плотности заданы массивом или матричным A, низкие индексы соответствуют левому нижнему углу графики. Высокие индексы соответствуют правому верхнему углу.

Массивы/матрицы не должны быть индексированы от 1. Например,

A = array( `i_{min}` .. `i_{max}` , `j_{min}` .. `j_{max}` , [..density values..])

дает к графическому массиву с

XMesh = jmax - jmin + 1, YMesh = imax - imin + 1.

Если никакая область значений графика `x_{min}` .. `x_{max}`, `y_{min}` .. `y_{max}` задан,

xmin = jmin - 1, xmax = jmax, ymin = imin - 1, ymax = imax

используется.

Когда значения плотности заданы списком списков L, первые записи в списке соответствуют левому нижнему углу графики. Последние записи соответствуют правому верхнему углу.

Если никакая область значений графика `x_{min}` .. `x_{max}`, `y_{min}` .. `y_{max}` задан,

xmin = 0, xmax = m, ymin = 0, ymax = n

используется, где n является длиной L, и m является (общей) длиной подсписков в L. Все подсписки (“строки”) должны иметь ту же длину.

Анимации инициированы путем указания диапазона a = `a_{min}` .. `a_{max}` для параметра a это отличается от переменных xY. Таким образом, в анимациях, оба области значений x = `x_{min}` .. `x_{max}`, y = `y_{min}` .. `y_{max}` а также анимация располагается a = `a_{min}` .. `a_{max}` должен быть задан.

Связанная стандартная программа графика plot::Raster обеспечивает схожую функциональность. Однако plot::Raster не использует автоматическую цветовую схему на основе значений плотности. Пользователь должен обеспечить RGB или RGBa значения вместо этого.

Атрибуты

АтрибутЦельЗначение по умолчанию
AffectViewingBoxвлияние объектов на ViewingBox из сценыTRUE
AntiAliasedсглаженные линии и точки?FALSE
Colorосновной цветRGB::Red
DensityDataзначения плотности для графика плотности 
DensityFunctionфункция плотности для графика плотности 
FillColorцвет областей и поверхностейRGB::Red
FillColor2второй цвет областей и поверхностей для цветных смешенийRGB::CornflowerBlue
FillColorTypeтипы заполнения поверхностиDichromatic
FillColorFunctionфункциональная область / поверхностная окраска 
Framesколичество систем координат в анимации50
Legendделает запись легенды 
LegendTextкороткий объяснительный текст для легенды 
LegendEntryдобавить этот объект в легенду?FALSE
LineColorцвет линийRGB::Blue
LineWidthширина линий0.35
LineStyleтело, подчеркнутые штриховой линией или пунктирные линии?Solid
LinesVisibleвидимость линийFALSE
Meshколичество точек выборки[25, 25]
Nameимя объекта графика (для браузера и легенды) 
ParameterEndзакончите значение параметра анимации 
ParameterNameимя параметра анимации 
ParameterBeginначальное значение параметра анимации 
ParameterRangeобласть значений параметра анимации 
TimeEndвремя окончания анимации10.0
TimeBeginвремя начала анимации0.0
TimeRangeоперативный промежуток анимации0.0.. 10.0
Titleобъектный заголовок 
TitleFontшрифт объектных заголовков[" sans-serif ", 11]
TitlePositionположение объектных заголовков 
TitleAlignmentвыравнивание по горизонтали заголовков w.r.t. их координатыCenter
TitlePositionXположение объектных заголовков, x компонент 
TitlePositionYположение объектных заголовков, y компонент 
VisibleвидимостьTRUE
VisibleAfterобъект, видимый после этой временной стоимости 
VisibleBeforeобъект, видимый до этой временной стоимости 
VisibleFromToобъект, видимый в это время, располагается 
VisibleAfterEndобъект, видимый после его законченного времени анимации?TRUE
VisibleBeforeBeginобъект, видимый перед его временем анимации, запускается?TRUE
XMaxокончательное значение параметра “x” 
XMeshколичество точек выборки для параметра “x”25
XMinначальное значение параметра “x” 
XNameимя параметра “x” 
XRangeобласть значений параметра “x” 
YMaxокончательное значение параметра “y” 
YMeshколичество точек выборки для параметра “y”25
YMinначальное значение параметра “y” 
YNameимя параметра “y” 
YRangeобласть значений параметра “y” 

Примеры

Пример 1

Мы генерируем график плотности:

p := plot::Density(cos(x^2 + y^2), x = -3..3, y = -2..2, 
                   Mesh = [60, 40]):

Объект графика представляется:

plot(p, Axes = Frame):

Это превращается в черно-белую графику, когда подходящие цвета заданы:

plot(plot::Scene2d(p, FillColor = RGB::White, 
                      FillColor2 = RGB::Black),
     plot::Scene2d(p, FillColor = RGB::Black, 
                      FillColor2 = RGB::White),
     Width = 120*unit::mm, Height = 45*unit::mm,
     Layout = Horizontal, Axes = Frame):

delete p:

Пример 2

Мы демонстрируем использование пользовательской функции управления цветом:

mycolor := proc(x, y, f)
begin
   if   f >=  2/3 then RGB::Red
   elif f >=  1/3 then RGB::Orange;
   elif f >=   0  then RGB::Yellow;
   elif f >= -1/3 then RGB::BlueLight;
   elif f >= -2/3 then RGB::Blue;
   else RGB::SlateBlueDark;
   end_if;
end_proc:
plot(plot::Density(cos(x^2 + y^2), x = -3..3, y = -2..2, 
                   Mesh = [60, 40], 
                   FillColorFunction = mycolor),
     Axes = Frame):

delete mycolor:

Пример 3

В этом примере мы демонстрируем как plot::Density может использоваться, чтобы отобразить серые данные на графике из внешнего источника. Примите, существует внешний текстовый файл PortableGrayMap Norton.pgm содержа данные такой как

P2
240 180
255
249 237 228 231 245 218 229 195 ...
      
Первая линия содержит “волшебное значение” P2 указание, что это - текстовый файл PGM. Вторая линия содержит пиксельную ширину и пиксельную высоту изображения. Номер 255 в третьей линии шкала следующих уровней яркости.

Остающиеся данные состоят из целых чисел между 0 (черными цветами) и 255 (белыми) цветами, каждый представляющий уровень яркости пикселя (строка строкой).

Мы импортируем текстовые данные через import::readdata:

graydata := import::readdata("Norton.pgm", NonNested):

Это - длинный список всех элементов данных в файле. Мы извлекаем эти 4 элемента в первых трех линиях:

[magicvalue, xmesh, ymesh, maxgray] := graydata[1..4]

Мы удаляем заголовок из пиксельных данных. (Если существуют комментарии в файле PGM, они должны быть удалены, также).

for i from 1 to 4 do
  delete graydata[1];
end_for:

Мы преобразовываем простой список данных к вложенному списку, содержащему серые данные строк как подсписки. (Вызов level не действительно необходимо, но это значительно ускоряет преобразование на интерактивном уровне.)

L := level([graydata[(i - 1)*xmesh + 1 .. i*xmesh] $ i=1..ymesh], 1):

Этот список может быть передан plot::Density:

plot(plot::Density(L, FillColor = RGB::White,
                   FillColor2 = RGB::Black),
     Width = 80*unit::mm, Height = 60*unit::mm):

Изображение перевернуто, потому что файлы PGM хранят строку пиксельных данных строкой в обычном порядке чтения начиная с левого верхнего угла изображения. Стандартная программа MuPAD® plot::Density, однако, следует за математической ориентацией осей координат, т.е. первое пиксельное значение интерпретировано как левый нижний угол изображения. Мы должны переупорядочить строки в graydata перечислите через revert:

plot(plot::Density(revert(L), FillColor = RGB::White,
                   FillColor2= RGB::Black),
     Width = 80*unit::mm, Height = 60*unit::mm):

Стандартные программы import::readbitmap и plot::Raster обеспечьте альтернативный способ импортировать и отобразить растровое изображение. Смотрите страницу справки графика:: Растр для примеров. Это, однако, берет больше памяти, потому что растровые данные импортированы как RGB значения цвета, тогда как только значения плотности (серые данные) необходимы для plot::Density.

delete graydata, magicvalue, xmesh, ymesh, maxgray, i, L:

Пример 4

Множество Мандельброта является одним из самых известных фракталов. Это возникает при считании итерации z n + 1 = z n 2 + c, z 0 = 0 в комплексной плоскости. Для достаточно больших значений |c | комплексного параметра c, последовательность z n отличается к бесконечности; это сходится для достаточно маленьких значений |c |. Контур области тех значений c, которые приводят к расхождению z n, особенно интересен: эта граница является высоко сложной и фрактальной природы.

В частности, известно, что серия z n отличается к бесконечности, каждый раз, когда одно из выполнения итерации удовлетворяет |zn |> 2. Этот факт используется следующей процедурой f как останавливающийся критерий. Возвращаемое значение предоставляет информацию, сколько выполняет итерации z 0, …, z n, который это берет, чтобы сбежать из области |z | ≤ 2 из (потенциальной) сходимости. Эти данные должны использоваться, чтобы окрасить комплексную плоскость c (т.е. (x, y) плоскостью) графиком плотности:

f := proc(x, y)
local c, z, n;
begin
   c := x + I*y:
   z := 0.0:
   for n from 0 to 100 do
       z := z^2 + c:
       if abs(z) > 2 then 
          break;
       end_if;
   end_for:
   if n < 70 then
        n mod 5;
   else n - 70;
   end_if;
end_proc:

В зависимости от вашего компьютера могут занять время следующие расчеты. На очень быстрой машине можно увеличить следующие значения xmesh, ymesh. Это израсходует более вычислительное время, но приведет к лучшим графическим результатам:

xmesh :=  100: ymesh :=  100:

Следующая область в x-y плоскость должна быть рассмотрена:

xmin[1] := -2.0: xmax[1] := 0.5:
ymin[1] := -1.2: ymax[1] := 1.2:

Область xmin 1xxmax 1, ymin 1yymax 1 разделен на xmesh ×ymesh прямоугольники. Каждый прямоугольник окрашен графиком плотности согласно “временам Escape”, вычисленным процедурой f. Эта процедура может быть передана непосредственно plot::Density:

p1 := plot::Density(f, x = xmin[1].. xmax[1],
                    y = ymin[1] .. ymax[1],
                    Mesh = [xmesh, ymesh],
                    FillColor = RGB::Black, 
                    FillColor2 = RGB::Red):

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

xmin[2] := -0.24: xmax[2] := -0.01:
ymin[2] :=  0.63: ymax[2] :=  0.92:
r1 := plot::Rectangle(xmin[2] .. xmax[2], ymin[2] .. ymax[2],
                      LineColor = RGB::White):
plot(p1, r1):

Значения плотности взрыва не вычисляются непосредственно plot::Density. Они вычисляются отдельно и хранятся в массиве A:

dx := (xmax[2] - xmin[2])/xmesh:
dy := (ymax[2] - ymin[2])/ymesh:
A := array(1..ymesh, 1..xmesh, 
           [[f(xmin[2]+ (j - 1/2)*dx, ymin[2] + (i - 1/2)*dy) 
             $ j = 1..xmesh] $ i = 1..ymesh]):
p2 := plot::Density(A, x = xmin[2] .. xmax[2], y = ymin[2] .. ymax[2],
                    FillColor = RGB::Black, FillColor2 = RGB::Red):

Кроме того, дальнейший прямоугольник производится, чтобы указать на необходимую область, которая будет аварийно завершена lateron:

xmin[3] := -0.045: xmax[3] := -0.015:
ymin[3] :=  0.773: ymax[3] :=  0.815:
r2 := plot::Rectangle(xmin[3] .. xmax[3], ymin[3] .. ymax[3],
                      LineColor = RGB::White):
plot(p2, r2):

Значения плотности следующего взрыва снова вычисляются отдельно и хранятся во вложенном списке L:

dx := (xmax[3] - xmin[3])/xmesh:
dy := (ymax[3] - ymin[3])/ymesh:
L := [[f(xmin[3] + (j - 1/2)*dx, ymin[3] + (i - 1/2)*dy) 
      $ j= 1..xmesh] $ i = 1..ymesh]:
p3 := plot::Density(L, x = xmin[3] .. xmax[3], y = ymin[3] .. ymax[3],
                    FillColor = RGB::Black, FillColor2 = RGB::Red):
plot(p3):

Объекты плотности состоят в том, чтобы быть помещены в одну графику. Это состоит из Множества Мандельброта p1 как вычислено выше и модификаций плотности строит p2 и p3. Переопределение атрибутов XRangeYRange , мы перемещаем p2, p3 к местам в x-y плоскость, где они не перекрываются p1. Обратите внимание на то, что это не изменяет графическое содержимое p2, p3, потому что это дано по условию A и L, соответственно, которые остаются неизменными. (Если области значений были изменены в p1, другой plot вызов p1 вызвал бы процедуру f в различных точках плоскости, приводящей к различной графике.)

p2::XRange :=  0.60 .. 1.60: p2::YRange :=  0.05 ..  1.15:
p3::XRange :=  0.60 .. 1.60: p3::YRange := -1.15 .. -0.05:

Множество Мандельброта и эти два взрыва помещаются в одну сцену. Кроме того, некоторые стрелы добавляются, чтобы указать на источник взрывов. Обратите внимание на то, что довольно важно здесь, чтобы стрелы были переданы plot команда после графиков плотности. В противном случае они были бы скрыты графиками плотности: графические объекты нарисованы в упорядоченном расположении, в котором они передаются plot:

plot(p1, p2, p3,
     plot::Arrow2d([(xmin[2] + xmax[2])/2, 
                    (ymin[2] + ymax[2])/2],
                   [(p2::XMin + p2::XMax)/2, 
                    (p2::YMin + p2::YMax)/2],
                   LineColor = RGB::Blue),
     plot::Arrow2d([1.50, 0.65],
                   [(p3::XMin + p3::XMax)/2, 
                    (p3::YMin + p3::YMax)/2],
                   LineColor = RGB::Blue)
    ):

delete f, xmesh, ymesh, xmin, xmax, ymin, ymax, 
       dx, dy, p1, p2, p3, r1, r2, A, L:

Параметры

f

Значения плотности: арифметическое выражение в 2 переменных x, y и параметре анимации a. В качестве альтернативы процедура, которая принимает 2 входных параметра x, y или 3 входных параметра x, y, a и возвращает действительное значение плотности.

f эквивалентно атрибуту DensityFunction.

x

Имя горизонтальной переменной: идентификатор или индексируемый идентификатор.

x эквивалентно атрибуту XName.

xmin .. xmax

Область значений горизонтальной переменной: xminxmax должно быть числовое действительное значение или выражения параметра анимации a.

xmin xmax эквивалентно атрибутам XRangexmin xmax .

y

Имя вертикальной переменной: идентификатор или индексируемый идентификатор.

y эквивалентно атрибуту YName.

ymin .. ymax

Область значений вертикальной переменной: yminymax должно быть числовое действительное значение или выражения параметра анимации a.

ymin ymax эквивалентно атрибутам YRangeymin ymax .

A

Массив доменного типа DOM_ARRAY или матрица категории Cat::Matrix (например, типа matrix или densematrix) введение числовых значений плотности или выражений параметра анимации a. Строки/столбцы массива, соответственно матрица, соответствуют строкам/столбцам графического массива.

A эквивалентно атрибуту DensityData.

L

Список списков числовых значений плотности или выражений параметра анимации a. Каждый подсписок L представляет строку графического массива. Количество подсписков в L дает к значению атрибута XMesh. (Общая) длина подсписков дает к значению атрибута YMesh.

L эквивалентно атрибуту DensityData.

a

Параметр анимации, заданный как a = amin..amax, где amin начальное значение параметров и amax итоговое значение параметров.

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

Функции MuPAD

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