Основы графической визуализации вычислений

Основы графической визуализации вычислений

Во многих областях науки и техники численное решение задач недостато-чно для анализа результатов. Необходима еще графическая интерпретация в виде эпюр параметров напряженно-деформированного состояния элемен-тов упругих систем, формы колебаний и потери устойчивости, поведение решений на заданном интервале и т. п. MATLAB позволяет решать эти за-дачи достаточно простыми процедурами. Вначале необходимо задать ин-тервал изменения аргумента х от начального значения х0 до конечного хк с шагом Dх, что осуществляется оператором двоеточие : х0 :Dх : хк . Далее используется команда построения графика какой-либо функции у = f(x), которая носит имя plot.

Plot строит не истинный график функции f(x), а лишь заданное числом элементов вектора х число точек. Эти точки затем соединяются отрезками прямых, т. е. выполняется кусочно - линейная интерполяция данных графика. Если число точек достаточно велико, то полученная кривая воспринимается как вполне истинный график функции у = f(x), при 10 – 20 точках получается ломаная кривая.

Построение графиков отрезками прямых

b = 3 4 5 6 8 6 5 6 7

plot(b)

grid on

Основы графической визуализации вычислений - student2.ru

plot(b,'*')

axis([0 10 0 10])

Основы графической визуализации вычислений - student2.ru

Для построения графика функции у = f(x) необходимо задать совокупность точек х и у. Для аргумента х это выполняется оператором двоеточие, для у – надлежащим программированием выражения для функции, т. е. необходимо применить знаки арифметических операций над массивами:

: . * ; . / ; . L.

Для отображения таких функций используется декартовая прямоугольная система координат. Команда построения графика функции у = f(x) plot имеет ряд параметров, которые рассмотрим ниже.

рlot(х, у) – строит график функции у = f(x), координаты точек (х, у) которой берутся из векторов одинакового размера х, у.

рlot(х, у, s) – аналогична команде рlot(х, у), но тип линии графика можно задавать с помощью строковой константы s, значения которой представлены в таблице 1.

Таблица 1

Цвет линии Тип точки Тип линии
s = y – желтый m – фиолетовый c – голубой r – красный g – зеленый b – синий w – белый k – черный s = · – точка О – окружность х – крест + – плюс * – звездочка s – квадрат d – ромб Ú – треугольник (вниз) Ù – треугольник (вверх) < – треугольник (влево) > – треугольник (вправо) p – пятиугольник h – шестиугольник s = -– сплошная :– двойной пунктир - .– штрихпунктир - -– штриховая  

Таким образом, с помощью строковой константы s можно менять цвет линии, представлять узловые точки различными отметками и менять тип линии графика. Рассмотрим пример построения графиков трех функций y1 = sin x; y2 = sin2 x; y3 = sin3 x с различным стилем:

>> x = 0.2*pi:0.01*pi:2*pi;

>> y1 = sin(x); y2=sin(x).^2; y3=sin(x).^3;

>> plot(x,y1,'-m', x,y2,'-.+r',x,y3,'--ok' )

>> grid on

>> Здесь график функции у1 строится сплошной фиолетовой линией, график у2 строится штрихпунктирной линией с точками в виде знака “+” красного цвета, график у3 строится штриховой линией с кружками черного цвета.

Line plot of a chirp

x=0:0.05:5;

y=sin(x.^2);

plot(x,y);

Основы графической визуализации вычислений - student2.ru

3. Графики дискретных отсчетов функции

В сопротивлении материалов и строительной механике принято графики параметров напряженно-деформированного состояния закрашивать (штриховать). Для построения подобных графиков используется команда stem( … ).

stem(x, y) – строит график с закрашенными частями между нулевой линией и кривой у = f(x).

stem( … , ¢ LINESPEC¢ ) – аналогична команде stem(x, y), но имеет спецификацию линий ¢ LINESPEC ¢ , подобную строковой константе s команды plot(х, у, s).

Stem( … , ¢ filled ¢) – строит график функции у = f(x) с закрашенными маркерами.

>> stem(x,y3)

Логарифмический масштаб

>> x=logspace(-1,3);

>> loglog(x,exp(x)./x)

>> grid on

>> x=0:0.5:10;

>> semilogy(x,exp(x))

>> grid on

FPLOT

fplot: fplott'f(x)'. [xmin xmax]

1) >> fplot('sin(1 ./ x)', [0.01 0.1],1e-3)

2) >> fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1 -1 1])

3)>> f = @(x)abs(exp(-j*x*(0:9))*ones(10,1));

>> fplot(f,[0 2*pi])

BAR

· bar(x, Y) — строит столбцовый график элементов вектора Y (или группы столбцов для матрицы Y) со спецификацией положения столбцов, заданной значениями элементов вектора х, которые должны идти в монотонно возрастающем порядке;

· bar(Y) — строит график значений элементов матрицы Y так же, как указано выше, но фактически для построения графика используется вектор х=1:m;

· barU.Y,WIDTH) или BAR(Y,WIDTH) — команда аналогична ранее рассмотренным, но со спецификацией ширины столбцов (при WIDTH > 1 столбцы в одной и той же позиции перекрываются). По умолчанию задано WIDTH = 0.8.

V=[0;2;5;7;9;-2;-4;-6;-13];

bar(V);

>> bar(rand(12.3),'stacked'), colormap(cool)

>> barh(rand(5.3),'stacked'), colormap(cool)

Hist - гистограммы

· N=hist(Y) — возвращает вектор чисел попаданий для 10 интервалов, выбираемых автоматически. Если Y — матрица, то выдается массив данных о числе попаданий для каждого из ее столбцов;

· N=hist(Y,M) — аналогична вышерассмотренной, но используется М интервалов (М — скаляр);

· N=hist(Y.X) — возвращает числа попаданий элементов вектора Y в интервалы, центры которых заданы элементами вектора X;

· [N,X]=HIST(...) — возвращает числа попаданий в интервалы и данные о центрах интервалов.

>> x=[1:1:20];

>> y=[2:1:35];

>> z=[x y];

>>hist(z);

>> x=-3:0.2:3;

>> y=randn(1000,1);

>> hist(y,x)

Построение векторов

>> z1=-1+2*i;

>> z2=-2-3*i;

>> z3=2+3*i;

>> z4=5+2*i;

>> z=[z1,z2,z3,z4];

>> compass(z);

MESHGRID

>> [x,y]=meshgrid(-5:0.1:5);

>> z=x.*sin(x+y);

>> meshc(x,y,z);

Here are some examples of surface plots in MATLAB.

Contents

Mesh Plot of Peaks

Surface Plot of Peaks

Surface Plot (with Shading) of Peaks

Contour Plot of Peaks

Quiver

Slice

Mesh Plot of Peaks

z=peaks(25);

mesh(z);

colormap(hsv)

Основы графической визуализации вычислений - student2.ru

Surface Plot of Peaks

z=peaks(25);

surf(z);

colormap(jet);

Основы графической визуализации вычислений - student2.ru

Contour Plot of Peaks

z=peaks(25);

contour(z,16);

colormap(hsv)

Основы графической визуализации вычислений - student2.ru

Quiver

x = -2:.2:2;

y = -1:.2:1;

[xx,yy] = meshgrid(x,y);

zz = xx.*exp(-xx.^2-yy.^2);

[px,py] = gradient(zz,.2,.2);

quiver(x,y,px,py,2);

Основы графической визуализации вычислений - student2.ru

Slice

[x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-2:.16:2);

v = x.*exp(-x.^2-y.^2-z.^2);

xslice = [-1.2,.8,2]; yslice = 2; zslice = [-2,0];

slice(x,y,z,v,xslice,yslice,zslice)

colormap hsv

Основы графической визуализации вычислений - student2.ru

D Surface Plots

>>graf3d

Задание

1. Задать вектор x с помощью оператора “ : “ или непосредственно. Сфор-мировать матрицу y с двумя столбцами, каждый из которых представляет фу-нкцию x. На одном графике построить два графика : y1(x) и y2(x). Построить график заданного вектора в зависимости от индекса элемента.

2. Повторить задание п.1 выбрав цвет линии, тип линии, тип точек. Цвет линии – Желтый, Фиолетовый, Голубой, Красный, Зеленый, Синий, Белый, Черный; тип линии – сплошная, двойной пунктир, штрих-пунктир, штрихо-вая; тип точки – точка; окружность; крест; плюс; звуздочка; квадрат; ромб; треугольнок (вниз); треугольник (вверх); треугольник (влево); треугольник (вправо); пятиугольник; шестиугольник.

3. Задать функцию вектора x. Построить столбцовую диаграмму функции с помощью оператора bar.

4. Задать функцию вектора x. Построить ступенчатую функцию с помощью оператора stairs.

5. Задать функцию вектора x. Сформировать функцию-ошибку с помощью случайной матрицы rand, имеющей размерность вектора x (size(x)). Построить график функции-ошибки с помощью оператора errobar.

6. Построить график функции в полярных координатах.

7. Построить график в логарифмических (полулогарифмических) координатах.

8. Построение гистограммы. Задать вектор x. Сформировать случайный вектор с помощью оператора randn. Построить гистограмму с помощью функции hist(y,x).

Пояснения

1.Построение графика функций одной переменной

Команда plot служит для построения графиков функций в декартовой сис-теме координат. Эта команда имеет ряд параметров, рассматриваемых ниже. plot (X, Y) — строит график функции у(х), координаты точек (х, у) которой берутся из векторов одинакового размера Y и X. Если X или Y — матрица, то строится семейство графиков по данным, содержащимся в колонках матри-цы. Приведенный ниже пример иллюстрирует построение графиков двух фу-нкций — sin(x) и cos(x), значения функции которых содержатся в матрице Y, а значения аргумента х хранятся в векторе X:

Основы графической визуализации вычислений - student2.ru

>> x=0:pi/20:2pi;

>> Y=[sin(x);cos(x)];

>> plot(x,Y)

>>

Основы графической визуализации вычислений - student2.ru

>> x=-2*pi:0.02*pi:2*pi;

>> plot(x)

2. Построение графиков с выбором элементов управления

plot(X,Y,S) — аналогична команде plot(X.Y), но тип линии графика можно задавать с помощью строковой константы S. Значениями константы S могут быть следующие символы. Цвет линии : Y ( Желтый); М (Фиолетовый);С (Голубой); R (Красный); G (Зеленый); В (Синий); W (Белый); К (Черный).

Тип точки . (Точка); 0 (Окружность); X (Крест); + (Плюс); * (Звездочка); S (Квадрат); D (Ромб); V (Треугольник (вниз)); А (Треугольник (вверх)); <(Треугольник (влево)); > (Треугольник (вправо)); Р (Пятиугольник); H( Шестиугольник).

Тип лини – (Сплошная); ; (Двойной пунктир); -. (Штрих-пунктир); -- (Штри-ховая)

рlot (X1, Y1, S1, Х2, Y2, S2, ХЗ, Y3, S3,...) — эта команда строит на одном графике ряд линий, представленных данными вида (X..Y..S.), где X и Y — ве-кторы или матрицы, a S — строки. С помощью такой конструкции возможно построение, например, графика функции линией, цвет которой отличается от цвета узловых точек. Так, если надо построить график функции линией сине-го цвета с красными точками, то вначале надо задать построение графика с точками красного цвета (без линии), а затем графика только линии синего цвета (без точек). При отсутствии указания на цвет линий и точек он выбира-ется автоматически из таблицы цветов (белый исключается). Если линий бо-льше шести, то выбор цветов повторяется. Для монохромных систем линии выделяются стилем.

Основы графической визуализации вычислений - student2.ru

Рассмотрим пример построения графиков трех функций с различным стилем представления каждой из них:

>> x=-2*pi:0.1*pi:2*pi;

>> yl=sin(x);

>> y2=sin(x).^2;

>> y3=sin(x).^3;

>> plot(x,yl,'-m',x,y2,'-.+r',х,у3,'--ok')

Основы графической визуализации вычислений - student2.ru

3. Построение гистограммы

>> x=-2.9:0.2:2.9;

>> bar(x.*exp(-x.*x))

Основы графической визуализации вычислений - student2.ru

4.Ступенчатый график

x=0:0.25:10;

stairs(x.*sin(x));

Основы графической визуализации вычислений - student2.ru

5. График величины ошибки

>> x= - 2:0.1:2;

>> y=erf(x);

>> e=rand(size(x))/10;

>> errorbar(x,y,e);

Основы графической визуализации вычислений - student2.ru

6. Полярный

>> t=0:0.1:pi/2;

>> polar(exp(t))

>>

Построение гистограмм

>> x=-3:0.2:3;

>> y=randn(1000,1);

>> hist(y,x)

>> help randn

RANDN Normally distributed random numbers.

RANDN(N) is an N-by-N matrix with random entries, chosen from a normal distribution with mean zero, variance one and standard deviation one.

RANDN(M,N) and RANDN([M,N]) are M-by-N matrices with random entries. RANDN(M,N,P,...) or RANDN([M,N,P...]) generate random arrays. RANDN with no arguments is a scalar whose value changes each time it is referenced. RANDN(SIZE(A)) is the same size as A.

RANDN produces pseudo-random numbers. The sequence of numbers generated is determined by the state of the generator. Since MATLAB resets the state at start-up, the sequence of numbers generated will be the same unless the state is changed.

S = RANDN('state') is a 2-element vector containing the current state of the normal generator. RANDN('state',S) resets the state to S. RANDN('state',0) resets the generator to its initial state. RANDN('state',J), for integer J, resets the generator to its J-th state.

RANDN('state',sum(100*clock)) resets it to a different state each time.

MATLAB Version 4.x used random number generators with a single seed. RANDN('seed',0) and RANDN('seed',J) cause the MATLAB 4 generator to be used. RANDN('seed') returns the current seed of the MATLAB 4 normal generator. RANDN('state',J) and RANDN('state',S) cause the MATLAB 5 generator to be used.

See also RAND, SPRAND, SPRANDN, RANDPERM.

Основы графической визуализации вычислений - student2.ru
 

Errorbar plot

x=-2:0.1:2;

y=erf(x);

e = rand(size(x))/10;

errorbar(x,y,e);

Основы графической визуализации вычислений - student2.ru

Polar plot

t=0:.01:2*pi;

polar(t,abs(sin(2*t).*cos(2*t)));

Основы графической визуализации вычислений - student2.ru

Stem plot

x = 0:0.1:4;

y = sin(x.^2).*exp(-x);

stem(x,y)

Основы графической визуализации вычислений - student2.ru

XYZ plots in MATLAB.

D Surface Plots

>> graf3d

Demonstrate Handle Graphics for surface plots in MATLAB. This window allows you to assemble a string of MATLAB commands that results in a plot in

the axis in the upper left corner.

By playing with the popup menus on the right side of the window, you can adjust the type of plot, the type of shading, the color map,

and so on.

The MiniCommand Window in the lower

right shows the list of commands that create

the plot. If you like, you can even directly edit

the commands in the MiniCommand Window.

Type control-return to execute code in the

MiniCommand Window.

Line Plotting

>> hndlgraf

Demonstrates Handle Graphics for line plots in MATLAB. This window allows you to assemble a string of MATLAB commands that results in a plot in

the axis in the upper left corner.

By playing with the popup menus on the right side of the window, you can adjust the line style of the plot, the line width, the marker size, and the color using Handle Graphics.

The MiniCommand Window in the lower right shows the list of commands that create the plot. If you like, you can even directly edit the commands in the MiniCommand Window. Type control-return to execute code in the

MiniCommand Window.

Axes Properties

>> hndlaxis

Demonstrates Handle Graphics for axes in MATLAB.

This window allows you to assemble a string

of MATLAB commands that results in a plot in

the axis in the upper left corner.

By playing with the popup menus on the right

side of the window, you can adjust the scaling

for the axes, the grid lines, the direction of the

plot and the color of the axes using Handle

Graphics.

The MiniCommand Window in the lower

right shows the list of commands that create

the plot. If you like, you can even directly edit

the commands in the MiniCommand Window.

Type control-return to execute code in the

MiniCommand Window.

P = round(poly(A)) % The characteristic polynomial of a matrix

P =

1 -5 5 -1

R = roots(P) % Roots of a polynomial

R =

3.7321

1.0000

0.2679

Q = conv(P,P) % Convolve two vectors

R = conv(P,Q)

Q = 1 -10 35 -52 35 -10 1

R = 1 -15 90 -278 480 -480 278 -90 15 -1

stem(R); % Plot the result

Основы графической визуализации вычислений - student2.ru

Inverses of Matrices

This demo shows how to visualize matrices as images and uses this to illustrate matrix inversion.

This is a graphic representation of a random matrix. The RAND command creates the matrix, and the IMAGESC command plots an image of the matrix, automatically scaling the color map appropriately.

n = 100;

a = rand(n);

imagesc(a);

colormap(hot);

axis square;

Основы графической визуализации вычислений - student2.ru

This is a representation of the inverse of that matrix. While the numbers in the previous matrix were completely random, the elements in this matrix are anything BUT random. In fact, each element in this matrix ("b") depends on every one of the ten thousand elements in the previous matrix ("a").

b = inv(a);

imagesc(b);

axis square;

Основы графической визуализации вычислений - student2.ru

But how do we know for sure if this is really the correct inverse for the original matrix? Multiply the two together and see if the result is correct, because just as 3*(1/3) = 1, so must a*inv(a) = I, the identity matrix. The identity matrix (almost always designated by I) is like an enormous number one. It is completely made up of zeros, except for ones running along the main diagonal.

This is the product of the matrix with its inverse: sure enough, it has the distinctive look of the identity matrix, with a band of ones streaming down the main diagonal, surrounded by a sea of zeros.

imagesc(a*b);

axis square;

Основы графической визуализации вычислений - student2.ru

Graphs and Matrices

This demo gives an explanation of the relationship between graphs and matrices and a good application of SPARSE matrices.

A graph is a set of nodes with specified connections between them. An example is the connectivity graph of the Buckminster Fuller geodesic dome (also a soccer ball or a carbon-60 molecule).

In MATLAB, the graph of the geodesic dome can be generated with the BUCKY function.% Define the variables.

[B,V] = bucky;

H = sparse(60,60);

k = 31:60;

H(k,k) = B(k,k);

% Visualize the variables.

gplot(B-H,V,'b-');

hold on

gplot(H,V,'r-');

hold off

axis off equal

Основы графической визуализации вычислений - student2.ru

A graph can be represented by its adjacency matrix.

To construct the adjacency matrix, the nodes are numbered 1 to N. Then element (i,j) of the matrix is set to 1 if node i is connected to node j, and 0 otherwise. % Define a matrix A.

A = [0 1 1 0 ; 1 0 0 1 ; 1 0 0 1 ; 0 1 1 0];

% Draw a picture showing the connected nodes.

cla

subplot(1,2,1);

gplot(A,[0 1;1 1;0 0;1 0],'.-');

text([-0.2, 1.2 -0.2, 1.2],[1.2, 1.2, -.2, -.2],('1234')', ...

'HorizontalAlignment','center')

axis([-1 2 -1 2],'off')

% Draw a picture showing the adjacency matrix.

subplot(1,2,2);

xtemp=repmat(1:4,1,4);

ytemp=reshape(repmat(1:4,4,1),16,1)';

text(xtemp-.5,ytemp-.5,char('0'+A(:)),'HorizontalAlignment','center');

line([.25 0 0 .25 NaN 3.75 4 4 3.75],[0 0 4 4 NaN 0 0 4 4])

axis off tight

Основы графической визуализации вычислений - student2.ru

Here are the nodes in one hemisphere of the bucky ball, numbered polygon by polygon.subplot(1,1,1);

gplot(B(1:30,1:30),V(1:30,:),'b-')

for j = 1:30,

text(V(j,1),V(j,2),int2str(j),'FontSize',10);

end

axis off equal

Основы графической визуализации вычислений - student2.ru

To visualize the adjacency matrix of this hemisphere, we use the SPY function to plot the silhouette of the nonzero elements.

Note that the matrix is symmetric, since if node i is connected to node j, then node j is connected to node i.

spy(B(1:30,1:30))

title('spy(B(1:30,1:30))')

Основы графической визуализации вычислений - student2.ru

numbering of one hemisphere into the other.

[B,V] = bucky;

H = sparse(60,60);

k = 31:60;

H(k,k) = B(k,k);

gplot(B-H,V,'b-');

hold on

gplot(H,V,'r-');

for j = 31:60

text(V(j,1),V(j,2),int2str(j), ...

'FontSize',10,'HorizontalAlignment','center');

end

hold off

axis off equal

Основы графической визуализации вычислений - student2.ru

Finally, here is a SPY plot of the final sparse matrix.

spy(B)

title('spy(B)')

Основы графической визуализации вычислений - student2.ru

In many useful graphs, each node is connected to only a few other nodes. As a result, the adjacency matrices contain just a few nonzero entries per row.

This demo has shown one place where SPARSE matrices come in handy.gplot(B-H,V,'b-');

axis off equal

hold on

gplot(H,V,'r-')

hold off

Основы графической визуализации вычислений - student2.ru

Основы графической визуализации вычислений

Во многих областях науки и техники численное решение задач недостато-чно для анализа результатов. Необходима еще графическая интерпретация в виде эпюр параметров напряженно-деформированного состояния элемен-тов упругих систем, формы колебаний и потери устойчивости, поведение решений на заданном интервале и т. п. MATLAB позволяет решать эти за-дачи достаточно простыми процедурами. Вначале необходимо задать ин-тервал изменения аргумента х от начального значения х0 до конечного хк с шагом Dх, что осуществляется оператором двоеточие : х0 :Dх : хк . Далее используется команда построения графика какой-либо функции у = f(x), которая носит имя plot.

Plot строит не истинный график функции f(x), а лишь заданное числом элементов вектора х число точек. Эти точки затем соединяются отрезками прямых, т. е. выполняется кусочно - линейная интерполяция данных графика. Если число точек достаточно велико, то полученная кривая воспринимается как вполне истинный график функции у = f(x), при 10 – 20 точках получается ломаная кривая.

Наши рекомендации