Материал: Лабораторна робота №5

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Лабораторна робота №5

Тема: Графіка і візуалізація даних.

MatLab володіє широким набором засобів для побудови графіків функцій одній і два змінних і відображення різних типів даних. Всі графіки виводяться в графічні вікна зі своїми меню і

панелями інструментів. Вид графіків визначається аргументами графічних команд і потім може бути змінений за допомогою інструментів графічного вікна. Важливо розуміти, що для побудови графіків функцій на деякій області зміни аргументів слід обчислити значення функції в точках області, часто для отримання хороших графіків слід використовувати достатньо багато точок. Розберемо спочатку, як отримати графік функції однієї змінної, наприклад:

f(x) = ех sin πx + х2 на відрізку [-2,2].

Перший крок полягає в завданні координат крапок по осі абсцис. Заповнення вектора х елементами з постійним кроком за допомогою двокрапки дозволяє просто вирішити цю задачу. Далі необхідно поелементно обчислити значення/ (х) для кожного елементу вектора х і записати результат у векторf. Для побудови графіка функції залишилося використовувати яку-небудь з графічних функцій MatLab. Достатньо універсальною графічною функцією plotє . У найпростішому випадку вона викликається з двома вхідними аргументами— парою х і f (тобто plot виводить залежність елементів одного вектора від елементів іншого). Послідовність команд, записана нижче, приводить до появи графічного вікна Figure No.1 з графіком функції (мал. 5.1).

>> х=[-2:0.05:2];

>> f=ехр(х).*sin(pi*x)+x.^2; >> plot(х,f)

Мал. 5.1

Тип лінії, колір і маркери визначаються значенням третього додаткового аргументу функції plot. Цей аргумент указується в апострофах, наприклад, виклик plot(x,f,'ro:') приводить до побудови графіка червоною пунктирною лінією, розміченою круглими маркерами. Звернете увагу, що абсциси маркерів визначаються значеннями елементів вектора. Всьогох в додатковому аргументі може бути заповнене три позиції, відповідні квітну, типу маркерів і стилю лінії. Позначення для них приведені в табл. 4.1. Порядок позицій може бути довільний, допустимо

указувати

тільки

один або

два параметри, наприклад,

колір і тип маркерів. Подивитеся на

результат

виконання

наступних

: командplot

(x,f,'g'), plot(x,f,'ro'),

plot(x,f':').

 

 

 

 

Функція plot має достатньо універсальний інтерфейс, вона, зокрема, дозволяє відображати графіки декількох функцій на одних осях. Нехай потрібний вивести графік не тільки

f (x), але g(x) = e- x 2 ×sin 5p × x на відрізку [-2; 2]. Спочатку необхідно обчислити значення g(x):

»g=exp(-х.^2).*sin(5*pi*x);

а потім викликати plot, вказавши через кому пари х, f і х, g і, за бажання, властивості кожної з ліній:

>> plot(x,f,'ко-', х,g,'к:')

Допускається побудова довільного числа графіків функцій, властивості всіх ліній можуть бути різними. Крім того, області побудови кожною з функцій не обов'язково повинні співпадати,

але тоді слід використовувати різні вектори для значень аргументів і обчислювати значен функцій від відповідних векторів. Для отримання графіка кусочно-заданої функції:

досить виконати послідовність команд:

Зверніть увагу, що графіки гілок функції відображаються різними квітами. Можна було поступити і по-іншому, а саме: після заповнення x1,y1,x2,y2,x3 і y3 зібрати вектор x для значень аргументу і вектор для значень у(x) і побудувати залежність від x:

Нескладно

здогадатися, як

побудувати

графік

параметрично

заданої ,

ф

використовуючи ту обставину, що

plot відображає

залежність

одного вектора

від

другого.

 

Нехай треба отримати графік астроїди:

 

.

Слід

задати

 

вектор t, потім у вектори x, у занести значення x(t), у(t) і скористатися plot для відображення залежності у від х:

Функція comet дозволяє простежити за рухом крапки по траєкторії параметрично заданої лінії. Виклик comet(x,y) приводить до появи графічного вікна, на осях якого малюється переміщення точки у вигляді руху комети з хвостом. Управління швидкістю руху здійснюється зміною кроку при визначенні вектора значень параметра.

Рух точки на площині

Для відображення руху крапки по траєкторії використовується командаcomet. При цьому рухома крапка нагадує ядро комети з хвостом. Використовуються наступні форми представлення цієї команди:

·comet (Y) — відображає рух «комети» по траєкторії, заданій вектором Y;

·comet (X,Y) — відображає рух «комети» по траєкторії, заданою парою векторів Y і X;

·comet (X,Y,p) — аналогічна попередній команді, але дозволяє задавати довжину хвоста комети (відрізання траєкторії, виділеного кольором) як p*1ength(Y), де length(Y) - розмір вектора Y, а р<1. За умовчанням р = 0.1 [Звернете увагу, що якщо Ви використовуєте лупу, якось інакше намагаєтеся змінити розмір Вашого малюнка або використовуєте вкладку Copy Figure меню Edit, то графік, отриманий при використанні comet або cometS, зникає. ]

Мал. 5.2. Стоп-кадр зображення, отриманий з прикладу використання команди comet

Наступний приклад ілюструє застосування команди comet:

»Х=0:0.01:15;

»comet(X.sin(X).0.15)

Стоп-кадр зображення показаний на мал. 5.2. «Хвіст комети» на чорно-білому малюнку відмітити важко, оскільки він є відрізком лінії з кольором, що відрізняється від кольору лінії основної частини графіка.

Рух точки в просторі Є ще одна команда, яка дозволяє спостерігати рух крапки, але вже в тривимірному просторі.

Це команда comet3:

·comet3(Z) — відображає рух крапки з кольоровим «хвостом» по тривимірній кривій, визначеній масивом Z;

·comet3 (X.Y.Z) — відображає рух точки «комети» по кривою в просторі, заданою крапками

[X(i),Y(i),Z(i)];

·comet3(X,Y,Z,p) — аналогічна попередній команді із завданням довжини «хвоста комети»

як p*1ength(Z). За умовчанням параметр р рівний 0.1. Нижче представлений приклад застосування команди cometS:

»W=0:pi/500:10*pi;

»comet3(cos(W).sin(W)+W/10.W)

На мал. 5.3 показаний стоп-кадр зображення, створеного командою cometS.

Мал. 5.3. Стоп-кадр зображення, створеного командою comet3

Зрозуміло, рух njxrb по заданій траєкторії як в двовимірному, так і в тривимірному просторі є найпростішим прикладом анімації. Проте ці засоби істотно розширюють можливості графічної візуалізації при вирішенні ряду завдань динаміки.

У MatLab є графічні функції, призначені для відображення графіків в логарифмічному і напівлогарифмічному масштабах:

. loglog (логарифмічний масштаб по обох осях);

. semilogx (логарифмічний масштаб тільки по осі абсцис);

. semilogy (логарифмічний масштаб тільки по осі ординат).

Вхідні аргументи цих функцій задаються так само, як і при використанніplot. Для порівняння поведінки двох функцій із значеннями різних порядків зручно застосовуватиplotyy. Функція plotyy викликається від двох пар вхідних аргументів (векторів) і приводить до появи двох ліній графіків, кожною з яких відповідає своя вісь ординат.

Графіки оформляються в MatLab спеціальними командами і функціями. Сітка наноситься на осі командою grid on, а зникає за допомогоюgrid off. Заголовок розміщується в графічному вікні за допомогою функції title, вхідним аргументом якої є рядок, увязнена в апострофи:

За наявності декількох графіків потрібно розташувати легенду звернувшись до legend. Написи легенди, розміщені між апострофами указуються у вхідних аргументах функції legend, їх число повинне співпадати з числом ліній графіків. Крім того, останній додатковий вхідний аргумент визначає положення легенди:

–1 — поза графіком в правому верхньому кутку графічного вікна;

0— вибирається краще положення в межах графіка так, щоб якомога менше перекривати самі графіки;

1— у верхньому правому кутку графіка (це положення використовується за умовч.);

2— у верхньому лівому кутку графіка;

3— у нижньому лівому кутку графіка;

4— у нижньому правому кутку графіка.

Функції xlabel і ylabel призначені для підписів до осей, їх вхідні аргументи так само полягають в апострофи.

Звернемося тепер до візуалізації векторних і матричних . данихНайпростіший спосіб відображення векторних даних полягає у використанні функціїplot з вектором як вхідний аргумент. При цьому графік, що виходить у вигляді ламаної лінії, символізує залежність значень елементів вектора від їх індексів. Другий додатковий аргумент може визначати колір, стиль лінії і тип маркерів, наприклад: plot(x,'ko'). Виклик функції plot від матриці приводить до декількох графіків, їх число співпадає з числом стовпців матриці, кожен з них є залежністю елементів стовпця від їх рядкових індексів. Колір і стиль ліній і тип маркерів відразу для всіх ліній так само визначається другим додатковим аргументом.

Наочним способом представлення матричних і векторних даних є різноманітні діаграми. Проста стовпчата діаграма будується за допомогою функції bar:

Додатковий числовий аргумент bar указує на ширину стовпців (за умовчанням він рівний 0.8), а значення великі одиниці, наприклад bar(x,1.2), приводять до часткового перекриття стовпців. Вказівка матриці у вхідному аргументіbar приводить до побудови групової діаграми, число груп співпадає з числом рядків матриці, усередині кожної групи стовпчиками відображаються значення елементів рядків.

Кругові діаграми векторних даних виходять за допомогою функціїpie, яка має деякі особливості в порівнянні з bar. Розрізняються два випадки:

1.якщо сума елементів вектора більше або рівна одиниці, то виводиться повна кругова діаграма, площа кожного її сектора пропорційна величині елементу вектора;

2.якщо сума елементів вектора менше одиниці, то результатом є неповна кругова діаграма, в якій площа кожного сектора пропорційна величині елементів вектора, припущенні що площа всього круга рівна одиниці.

Порівняєте, наприклад pie([0.1 0.2 0.3])і pie([1 2 3]). Можна відокремити деякі сектори від всього круга діаграми, для чого слід викликати pie з другим аргументом — вектором тієї ж довжини, що початковий. Ненульові елементи другого вектора відповідають відокремлюваним секторам. Наступний приклад показує, як відокремити від діаграми сектор, відповідний найбільшому елементу вектора х:

Підписи до секторів діаграми указуються в другому додатковому вхідному аргументі, який полягає у фігурні дужки:

Функції bar і pie мають аналоги:

barh — побудова стовпчатої діаграми з горизонтальним розташуванням стовпців;

bar3, ріе3 — побудова об'ємних діаграм.

При обробці великих масивів векторних даних часто потрібно отримати інформацію про те, яка частина даних знаходиться в тому або іншому інтервалі. Функція hist призначена для відображення гістограми даних і знаходження числа даних в інтервалах. В ідним аргументом hist є вектор з даними, а вихідним — вектор, що містить кількість елементів, що потрапили в кожен з інтервалів. За умовчанням береться десять рівних інтервалів. Наприклад, виклик hist

(randn(1,5000)) приводить до появи

на

екрані гістограми

,

данихрозподілених по

нормальному закону, а n=hist(randn(1,5000))

до заповнення вектора п довжини десять

(при цьому гістограма не будується). Число

інтервалів указується в

 

другому додатковому

аргументі hist. Можна задати інтервали, використавши як другий аргумент не число, а вектор, що містить центри інтервалів. Зручніше задавати інтервали не центрами, а межами. В цьому випадку потрібно спочатку визначити кількість елементів в інтервалах за допомогою функції histc, а потім застосувати bar із спеціальним аргументом 'histc', наприклад: