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 сетку прямоугольного расширения от левого нижнего угла (xmin
ymin
) к правому верхнему углу (xmax
ymax
). Прямоугольник со средней точкой (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
это отличается от переменных x
Y
. Таким образом, в анимациях, оба области значений 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” |
Мы генерируем график плотности:
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:
Мы демонстрируем использование пользовательской функции управления цветом:
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:
В этом примере мы демонстрируем как 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:
Множество Мандельброта является одним из самых известных фракталов. Это возникает при считании итерации 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 1 ≤ x ≤ xmax 1, ymin 1 ≤ y ≤ ymax 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
. Переопределение атрибутов XRange
YRange
, мы перемещаем 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:
|
Значения плотности: арифметическое выражение в 2 переменных x, y и параметре анимации a. В качестве альтернативы процедура, которая принимает 2 входных параметра x, y или 3 входных параметра x, y, a и возвращает действительное значение плотности.
|
|
Имя горизонтальной переменной: идентификатор или индексируемый идентификатор.
|
|
Область значений горизонтальной переменной: |
|
Имя вертикальной переменной: идентификатор или индексируемый идентификатор.
|
|
Область значений вертикальной переменной: |
|
Массив доменного типа
|
|
Список списков числовых значений плотности или выражений параметра анимации a. Каждый подсписок L представляет строку графического массива. Количество подсписков в L дает к значению атрибута
|
|
Параметр анимации, заданный как |