Matlab графік матриці. Написи та пояснення до графіків

3. Тривимірна графіка .

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

Високорівнева графічна підсистема MATLAB автоматично реалізує тривимірну графіку без спеціальних зусиль з боку користувача. Нехай у точці з координатами x1, y1 обчислено значення функції z = f (x, y) і воно дорівнює z1. У деякій іншій точці (тобто за іншого значення аргументів) x2,y2 обчислюють значення функції z2. Продовжуючи цей процес, отримують масив (набір) точок (x1, y1, z1), (x2, y2, z2), (xN, yN, zN) у кількості N штук, розташованих у тривимірному просторі. Спеціальні функції системи MATLAB проводять через ці точки гладкі поверхніта відображають їх проекції на плоский дисплей комп'ютера.

Найчастіше точки аргументів розташовані в області визначення функції регулярно у вигляді прямокутної сітки (тобто матриці). Така сітка точок породжує дві матриці однієї й тієї структури: перша матриця містить значення перших координат цих точок (x - координат), а друга матриця містить значення других координат (y - координат). Позначимо першу матрицю як X, а другу - як Y. Є ще третя матриця - матриця значень функції z = f (x, y) при цих аргументах. Цю матрицю позначимо буквою Z.

Найпростішою функцією побудови графіка функції двох змінних у системі MATLAB є функція

plot3(X, Y, Z)

де X, Y і Z - матриці однакових розмірів, зміст яких ми щойно пояснили.

У системі MATLAB є спеціальна функція отримання двовимірних масивів X і Y по одномірним масивам x, y.

Нехай по осі x заданий діапазон значень у вигляді вектора

u = -2: 0.1: 2

а по осі у цей діапазон є

v = -1: 0.1: 1

Для отримання матриць X і Y, що представляють перші і другі координати прямокутної сітки точок, що виходить використовують спеціальну функціюсистеми MATLAB:

[ X , Y ] = meshgrid(u, v)

Як ми бачимо, ця функція отримує на вході два одновимірні масиви (вектори), що представляють масиви точок на осях координат, і повертає відразу два шуканих двовимірних масиву. На прямокутній сітці точок обчислюємо значення функції, наприклад функції exp:

Z = exp (- X. ^ 2 - Y. ^ 2)

Нарешті, застосовуючи описану вище функцію plot3, отримуємо наступне зображення тривимірного графіка цієї функції:

З цього малюнка видно, що функція plot3 будує графік у вигляді набору ліній у просторі, кожна з яких є перерізом тривимірної поверхні площинами, паралельними площині yOz. Інакше можна сказати, що кожна лінія виходить з відрізків прямих, що з'єднують набір точок, координати яких беруться з однакових стовпців матриць X, Y та Z. Тобто, перша лінія відповідає першим стовпчикам матриць X, Y Z; друга лінія - другим стовпцям цих матриць і таке інше.

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

plot3(x, y, z)

де x, y і z є одновимірними масивами координат точок, які потрібно послідовно з'єднати відрізками прямих. Наприклад, наступний фрагмент коду

t = 0: pi/50: 10 * pi;

x = sin(t);

y = cos(t);

plot3(x, y, t);

grid on

де застосовано відому за плоскими графіками команду

grid on

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

Крім цієї найпростішої функціїсистема MATLAB має ще ряд функцій, що дозволяють досягати більшої реалістичності в зображенні тривимірних графіків. Це функції mesh, surf та surfl.

Функція mesh з'єднує обчислені сусідні точкиповерхні графіка відрізками прямих і показує у графічному вікні системи MATLAB плоску проекцію такого об'ємного "каркасно-ребристого" (англійською зветься wireframe mesh) тіла. Замість раніше показаного за допомогою функції plot3 графіка функції

exp(- X.^2 - Y.^2)

можна отримати ось таке зображення

Для кращого сприйняття "об'ємності" зображення різні ребраавтоматично фарбуються в різні кольори. З іншого боку (на відміну функції plot3) здійснюється видалення невидимих ​​ліній. Якщо ви вважаєте, що зображене ребристе тіло є прозорим і не повинно приховувати задніх ліній, можна ввести команду hidden off , після чого такі лінії з'являться на зображенні. Більш щільного зображення поверхні можна досягти, якщо замість

функції mesh застосувати функцію surf(X, Y, Z).

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

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

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

Так як різні матеріалипо-різному відбивають падаючі промені, можна підібрати деякий матеріал, щоб отримати найкраще (з погляду користувача) зображення. Зокрема, можна використати функцію

colormap(copper)

за допомогою якої для зображення графіка вибирається набір кольорів (англійською – colormap), який характерний для світла, що відображається від мідної поверхні (мідь англійською – copper). Після цього застосування функції

surfl(X, Y, Z)

замість surf(X,Y,Z) призводить до отримання дуже реалістично виглядає і дуже наочного графіка:

Можна з такого графіка прибрати чорні лінії, що зображають ребра, а також добитися ще більш плавного переходу освітлення поверхні, якщо виконати команду

shading interp

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

Особливо наочне уявлення про поверхні дають сітчасті графіки, що використовують функціональне забарвлення осередків. Наприклад, колір фарбування поверхні z(x, у)може бути поставлений у відповідність до висоти zповерхні з вибором для малих висот темних тонів, а великих - світлих. Для побудови таких поверхонь використовуються команди класу surf (…):

  • surf (X, Y, Z. С)- будує кольорову параметричну поверхнюза даними матриць X, Y і Z з кольором, що задається масивом;
  • surf(X.Y.Z)- аналогічна попередній команді, де C = Z, так що колір задається висотою тієї чи іншої осередку поверхні;
  • surf(x.y.Z)і surf(x.y.Z.C)з двома векторними аргументами х і у - вектори х і у замінюють перші два матричні аргументи і повинні мати довжини length(x)=n та length(y)=m, де =size(Z). І тут вершини областей поверхні представлені трійками координат (x(j), yd), Z(1,j)). Зауважимо, що х відповідає стовпцям Z, а відповідає рядкам;
  • surf(Z)і surf(Z.C)використовують х = 1: n та у = 1: m. У цьому випадку висота Z – однозначно певна функція, Задана геометрично прямокутною сіткою;
  • h=surf (…)- будує поверхню та повертає дескриптор об'єкта класу surface.

Команди axis, caxis, color-map, hold, shadingі viewзадають координатні осі та властивості поверхні, які можуть використовуватися для більшої ефектності показу поверхні або фігури.

Нижче наведено простий приклад побудови поверхні - параболоїда:

> > = meshgrid([ - 3: 0.15: 3 ]);

> > Z = X. ^ 2 + Y. ^ 2 ;

> > Surf(X,Y,Z)

Відповідний цьому прикладу графік показано на рис. 6.25.

Мал. 6.25. Графік параболоїда з функціональним забарвленнямосередків

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

У наступний прикладвикористовується функціональне забарвлення відтінками сірого кольоруз висновком шкали колірних відтінків:

> > = meshgrid([ - 3: 0.1: 3 ]);

> > Z = sin (X). / (X. ^ 2 + Y. ^ 2 + 0.3);

> > surf(X.Y.Z)

> > colormap(gray)

> > shading interp

> > colorbar

У цьому прикладі команда colormap(gray)задає фарбування тонами сірого кольору, а команда shading Interpзабезпечує усунення зображення сітки та задає інтерполяцію для відтінків кольору об'ємної поверхні. На рис. 6.26 показаний вид графіка, побудованого у цьому прикладі.


Мал. 6.26. Графік поверхні з функціональним забарвленням сірим кольором

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

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

Функція plot

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

Припустимо, що потрібно вивести графік функції синуса в діапазоні від 0 до . Для цього задамо вектор (безліч) точок по осі Ox, в яких відображатимуться значення функції синуса:

В результаті вийде вектор стовпець з безліччю значень від 0 до кроку 0,01. Потім обчислимо безліч значень функції синуса в цих точках:

і виведемо результат на екран

В результаті отримаємо графік, поданий на рис. 3.1.

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

Мал. 3.1. Відображення функції синусу за допомогою функції plot().

Функцію plot() можна записати і з одним аргументом x чи y:

plot(x);
plot(y);

в результаті отримаємо два різні графіки, представлені на рис. 3.2.

Аналіз рис. 3.2 показує, що у разі одного аргументу функція plot() відображає безліч точок по осі Oy, а осі Оx відбувається автоматична генерація безлічі точок з одиничним кроком. Отже, для простої візуалізації вектора як двомірного графіка досить скористатися функцією plot() з одним аргументом.

Для побудови декількох графіків в тих самих координатних осях, функція plot() записується наступним чином:



x = 0: 0.01: pi;
y1 = sin(x);
y2 = cos(x);
plot(x, y1, x, y2);

Результат роботи цього фрагмента програми представлений на рис. 3.3.

Мал. 3.2. Результати роботи функції plot() з одним аргументом:

а – plot(x); б – plot(y).

Мал. 3.3. Відображення двох графіків у одних координатних осях.

Аналогічно можна побудувати два графіки, використовуючи один аргумент функції plot(). Припустимо, що є два вектори значень

y1 = sin(x);
y2 = cos(x);

які потрібно відобразити на екрані. Для цього об'єднаємо їх у двовимірну матрицю

в якій стовпці складені векторів y1 і y2 відповідно. Така матриця буде відображена функцією

plot(); % апострофи переводять вектор-рядок
% у вектор-стовпець

як двох графіків (рис. 3.4).

Мал. 3.4. Відображення двовимірної матриці як двох графіків.

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

x1 = 0:0.01:2*pi;
y1 = sin(x1);

x2 = 0: 0.01: pi;
y2 = cos(x2);


figure; % створення 2-го графічного вікна

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

Незручність роботи наведеного фрагмента програми полягає в тому, що повторний виклик функції figure відобразить на екрані ще одне нове вікно і якщо програма буде виконана двічі, то на екрані виявиться три графічні вікна, але лише у двох з них будуть актуальні дані. У цьому випадку краще було б побудувати програму так, щоб на екрані завжди відображалося два вікна з потрібними графіками. Цього можна досягти, якщо при виклику функції figure як аргумент вказувати номер графічного вікна, яке необхідно створити або зробити активним, якщо воно вже створено. Таким чином, наведену вище програму можна записати так.

x1 = 0:0.01:2*pi;
y1 = sin(x1);

X2 = 0: 0.01: pi;
y2 = cos(x2);

Figure(1); %створення вікна з номером 1
plot(x1, y1); % малювання першого графіка
figure(2); % Створення графічного вікна з номером 2
plot(x2, y2); % малювання 2-го графіка у 2-му вікні

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

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

subplot(<число строк>, <число столбцов>, <номер координатной оси>)

Розглянемо приклад відображення двох графіків один під одним вищенаведених функцій синуса та косинуса.

x1 = 0:0.01:2*pi;
y1 = sin(x1);

X2 = 0: 0.01: pi;
y2 = cos(x2);

Figure(1);
subplot(2,1,1); % ділимо вікно на 2 рядки та один стовпець
plot(x1, y1); % Відображення першого графіка
subplot(2,1,2); % будуємо 2-ю координатну вісь
plot(x2, y2); % відображаємо 2-й графік у нових осях

Результат роботи програми показано на рис. 3.5.

Аналогічним чином можна виводити два і більше графіків у стовпець, як таблиці і т.п. Крім того, можна вказувати точні координати розташування графіка у графічному вікні. Для цього використовується параметр position у функції subplot():

subplot('position', );

де left - Зміщення від лівого боку вікна; bottom – усунення від нижньої сторони вікна; width, height – ширина та висота графіка у вікні. Усі ці змінні змінюються не більше від 0 до 1.

Мал. 3.5. Приклад роботи функцій subplot.

Нижче наведено фрагмент програми відображення графіка функції синуса в центрі графічного вікна. Результат роботи показано на рис. 3.6.

x1 = 0:0.01:2*pi;
y1 = sin(x1);

Subplot('position', );
plot(x1, y1);

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

Таким чином, використовуючи параметр position, можна довільно розміщувати графічні елементи в площині вікна.

Мал. 3.6. Приклад роботи функції subplot із параметром position.

Оформлення графіків

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

Функція plot() дозволяє змінювати колір і тип лінії, що відображається. Для цього, використовуються Додаткові параметри, які записуються наступним чином:

plot( , , <’цвет линии, тип линии, маркер точек’>);

Зауважте, що третій параметр записується в апострофах і має позначення, наведені в таблицях 3.1-3.3. Маркери, наведені нижче, записуються підряд один за одним, наприклад,

'ko' – на графіку відображає чорними кружками точки графіка,
'ko-' – малює графік чорною лінією та проставляє крапки у вигляді гуртків.

Табл. 3.1. Позначення кольору лінії графіка

Табл. 3.2. Позначення типу лінії графіка

Табл. 3.3. Позначення типу точок графіка

Нижче наведено приклади запису функції plot() з різним набором маркерів.

x = 0: 0.1: 2 * pi;
y = sin(x);

Subplot(2,2,1); plot(x, y, "r-");
subplot(2,2,2); plot (x, y, "r-", x, y, "ko");
subplot(2,2,3); plot(y, "b--");
subplot(2,2,4); plot(y, "b--+");

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

Мал. 3.7. Приклади відображення графіків з різними типамимаркерів

З прикладів рис. 3.7 видно, що масштаб графіків по осі Ox дещо більший реальних значень. Справа в тому, що система MatLab автоматично масштабує систему координат для повного представлення даних. Однак таке автоматичне налаштування не завжди може задовольняти інтереси користувача. Іноді потрібно виділити окремий фрагмент графіка і лише його показати цілком. Для цього використовується функція axis() мови MatLab, яка має наступний синтаксис:

axis([ xmin, xmax, ymin, ymax ]),

де назва вказаних параметрів говорять самі за себе.

Скористаємося цією функцією для відображення графіка функції синуса в межах від 0 до :

x = 0: 0.1: 2 * pi;
y = sin(x);

Subplot(1,2,1);
plot(x, y);
axis();

Subplot(1,2,2);
plot(x, y);
axis();

З результату роботи програми (рис. 3.8) видно, що незважаючи на те, що функція синуса задана в діапазоні від 0 до , за допомогою функції axis () можна відобразити весь графік, так і його фрагмент в межах від 0 до .

Мал. 3.8. Приклад роботи функції axis()

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

Таблиця 3.4. Функції оформлення графіків

Розглянемо роботу даних функцій у наступному прикладі:

x = 0: 0.1: 2 * pi;
y = sin(x);

Plot (x, y);
axis();
grid on;
title("The graphic of sin(x) function");
xlabel("The coordinate of Ox");
ylabel("The coordinate of Oy");
text(3.05,0.16,"\leftarrow sin(x)");

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

Таким чином, використовуючи набір функцій і параметрів, можна досягти бажаного способу оформлення графіків в системі MatLab.

Мал. 3.9. Приклад роботи функцій оформлення графіка

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

У найпростішому випадку для візуалізації графіка в тривимірних координатних осях, використовується функція

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

,

при і .

Сформуємо матриці X та Y, що містять координати точок. даного графікапо осях Ox та Oy відповідно. Дані матриці потрібні у тому, щоб функція plot3() «знала» які реальні координати відповідають точці Z(i,j) матриці значень осі Oz. Для цього достатньо взяти i-ю та j-ю компоненту матриць

Формування матриць X та Y можна здійснити за допомогою функції

Meshgrid (x, y);

мови MatLab. Тут x та y – одномірні вектори значень координат по осях Ox та Oy відповідно, які можна сформувати як

x=-1:0.1:1; % координати точок по осі Ox
y=-2:0.1:2; % координати точок по осі Oy

і, потім, обчислити матриці

Meshgrid (x, y); % матриці координат точок по осях Ox та Oy

В результаті, матриці X і Y будуть містити наступні перші вісім значень рядків і стовпців:

Матриця X:

1 -0,9 -0,8 -0,7 -0,6 -0,5 -0,4 -0,3

1 -0,9 -0,8 -0,7 -0,6 -0,5 -0,4 -0,3

1 -0,9 -0,8 -0,7 -0,6 -0,5 -0,4 -0,3

1 -0,9 -0,8 -0,7 -0,6 -0,5 -0,4 -0,3

1 -0,9 -0,8 -0,7 -0,6 -0,5 -0,4 -0,3

1 -0,9 -0,8 -0,7 -0,6 -0,5 -0,4 -0,3

1 -0,9 -0,8 -0,7 -0,6 -0,5 -0,4 -0,3

Матриця Y:

2 -2 -2 -2 -2 -2 -2 -2

1,9 -1,9 -1,9 -1,9 -1,9 -1,9 -1,9 -1,9

1,8 -1,8 -1,8 -1,8 -1,8 -1,8 -1,8 -1,8

1,7 -1,7 -1,7 -1,7 -1,7 -1,7 -1,7 -1,7

1,6 -1,6 -1,6 -1,6 -1,6 -1,6 -1,6 -1,6

1,5 -1,5 -1,5 -1,5 -1,5 -1,5 -1,5 -1,5

1,4 -1,4 -1,4 -1,4 -1,4 -1,4 -1,4 -1,4

1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3

Використовуючи дані матриці, можна обчислити значення матриці Z, таким чином:

Z = exp (-X. ^ 2-Y. ^ 2);

та відобразити результат на екрані

Мал. 3.10. Приклад відображення графіка за допомогою функції plot3()

З наведеного малюнка видно, що функція plot3() відображає графік у вигляді набору ліній, кожна з яких відповідає перерізу графіка функції вздовж осі Oy.

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

mesh (X, Y, Z); % відображення графіка у вигляді сітки

В результаті отримаємо наступний виглядтривимірного графіка (рис. 3.11).

Завдяки використанню функції mesh() виходить графік, утворений інтерполяцією точок масивів X, Y та Z лініями по осях Ox та Oy. Крім того, кольором вказується рівень точки по осі Oz: від найменшого значення (синього) до найбільшого (червоного) і проводиться видалення "невидимих" ліній. Це дозволяє краще візуально оцінювати структуру тривимірного графіка, порівняно з функцією plot3(). Якщо необхідно відобразити «прозорий» графік, слід вимкнути режим видалення «невидимих» ліній:

hidden off; % приховані лінії малюються

У системі MatLab передбачено функцію візуалізації безперервної поверхні в тривимірних осях

surf (X, Y, Z); % відображення безперервної поверхні

В результаті виходить графік, поданий на рис. 3.12.

Мал. 3.11. Результат роботи функції mesh()

Мал. 3.12. Результат роботи функції surf()

Функція surf() може використовуватись у режимі

shading interp; % інтерполяція тіні на гранях графіка

яка інтерполює колір на гранях для отримання гладкішого зображення поверхні (рис. 3.13). Також існує можливість змінювати колірну карту відображення графіка за допомогою функції

colormap(<карта>); % встановлення колірної картки

Наприклад, картка з ім'ям hot, яка використовується за умовчанням, може бути замінена на будь-яку іншу доступну (hot, hsv, gray, pink, cool, bone copper) або створену самостійно.

Мал. 3.13. Результат роботи функції surf() у режимі shading interp

Слід зазначити, що всі три функції plot3(), mesh() і surf() можуть бути використані з одним аргументом Z, який інтерпретується як матриця зі значеннями точок по осі Oz.

Для масштабування окремих ділянок тривимірних графіків, як і у випадку з двовимірними графіками, використовується функція

axis();

із очевидним набором параметрів.

Для оформлення тривимірних графіків можна користуватися описаними раніше функціями: text, xlabel, ylabel, zlabel, title, grid, subplot.

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

де az - Кут азимуту; el – кут піднесення. Зміна першого кута означає обертання площини xOy навколо осі Oz проти годинникової стрілки. Кут піднесення є кут між напрямком на камеру та площиною xOy.

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

3.1. Функція plot

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

Припустимо, що потрібно вивести графік функції синуса в діапазоні від 0 до . Для цього задамо вектор (безліч) точок по осі Ox, в яких відображатимуться значення функції синуса:

В результаті вийде вектор стовпець з безліччю значень від 0 до кроку 0,01. Потім обчислимо безліч значень функції синуса в цих точках:

і виведемо результат на екран

В результаті отримаємо графік, поданий на рис. 3.1.

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

Мал. 3.1. Відображення функції синусу за допомогою функції plot().

Функцію plot() можна записати і з одним аргументом x чи y:

plot(x);
plot(y);

в результаті отримаємо два різні графіки, представлені на рис. 3.2.

Аналіз рис. 3.2 показує, що у разі одного аргументу функція plot() відображає безліч точок по осі Oy, а осі Оx відбувається автоматична генерація безлічі точок з одиничним кроком. Отже, для простої візуалізації вектора як двомірного графіка досить скористатися функцією plot() з одним аргументом.

Для побудови декількох графіків в тих самих координатних осях, функція plot() записується наступним чином:

x = 0: 0.01: pi;
y1 = sin(x);
y2 = cos(x);
plot(x, y1, x, y2);

Результат роботи цього фрагмента програми представлений на рис. 3.3.

Мал. 3.2. Результати роботи функції plot() з одним аргументом:

а – plot(x); б – plot(y).

Мал. 3.3. Відображення двох графіків у одних координатних осях.

Аналогічно можна побудувати два графіки, використовуючи один аргумент функції plot(). Припустимо, що є два вектори значень

y1 = sin(x);
y2 = cos(x);

які потрібно відобразити на екрані. Для цього об'єднаємо їх у двовимірну матрицю

в якій стовпці складені векторів y1 і y2 відповідно. Така матриця буде відображена функцією

plot(); % апострофи переводять вектор-рядок
% у вектор-стовпець

як двох графіків (рис. 3.4).

Мал. 3.4. Відображення двовимірної матриці як двох графіків.

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

x1 = 0:0.01:2*pi;
y1 = sin(x1);

x2 = 0: 0.01: pi;
y2 = cos(x2);


figure; % створення 2-го графічного вікна
plot(x2, y2); % малювання 2-го графіка у 2-му вікні

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

Незручність роботи наведеного фрагмента програми полягає в тому, що повторний виклик функції figure відобразить на екрані ще одне нове вікно і якщо програма буде виконана двічі, то на екрані виявиться три графічні вікна, але лише у двох з них будуть актуальні дані. У цьому випадку краще було б побудувати програму так, щоб на екрані завжди відображалося два вікна з потрібними графіками. Цього можна досягти, якщо при виклику функції figure як аргумент вказувати номер графічного вікна, яке необхідно створити або зробити активним, якщо воно вже створено. Таким чином, наведену вище програму можна записати так.

x1 = 0:0.01:2*pi;
y1 = sin(x1);

x2 = 0: 0.01: pi;
y2 = cos(x2);

figure(1); %створення вікна з номером 1
plot(x1, y1); % малювання першого графіка
figure(2); % Створення графічного вікна з номером 2
plot(x2, y2); % малювання 2-го графіка у 2-му вікні

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

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

subplot(<число строк>, <число столбцов>, <номер координатной оси>)

Розглянемо приклад відображення двох графіків один під одним вищенаведених функцій синуса та косинуса.

x1 = 0:0.01:2*pi;
y1 = sin(x1);

x2 = 0: 0.01: pi;
y2 = cos(x2);

figure(1);
subplot(2,1,1); % ділимо вікно на 2 рядки та один стовпець
plot(x1, y1); % Відображення першого графіка
subplot(2,1,2); % будуємо 2-ю координатну вісь
plot(x2, y2); % відображаємо 2-й графік у нових осях

Результат роботи програми показано на рис. 3.5.

Аналогічним чином можна виводити два і більше графіків у стовпець, як таблиці і т.п. Крім того, можна вказувати точні координати розташування графіка у графічному вікні. Для цього використовується параметр position у функції subplot():

subplot('position', );

де left - Зміщення від лівого боку вікна; bottom – усунення від нижньої сторони вікна; width, height – ширина та висота графіка у вікні. Усі ці змінні змінюються не більше від 0 до 1.

Мал. 3.5. Приклад роботи функцій subplot.

Нижче наведено фрагмент програми відображення графіка функції синуса в центрі графічного вікна. Результат роботи показано на рис. 3.6.

x1 = 0:0.01:2*pi;
y1 = sin(x1);

subplot('position', );
plot(x1, y1);

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

Таким чином, використовуючи параметр position, можна довільно розміщувати графічні елементи в площині вікна.

Мал. 3.6. Приклад роботи функції subplot із параметром position.



Останні матеріали розділу:

Найкращі тексти в прозі для заучування напам'ять (середній шкільний вік) Поганий звичай
Найкращі тексти в прозі для заучування напам'ять (середній шкільний вік) Поганий звичай

Чингіз Айтматов. "Материнське поле". Сцена швидкоплинної зустрічі матері з сином біля поїзда. Погода була, як і вчора, вітряна, холодна. Недарма...

Чому я така дура Я не така як усі або як жити в гармонії
Чому я така дура Я не така як усі або як жити в гармонії

Про те, що жіноча психологія - штука загадкова і малозрозуміла, здогадувалися чоловіки всіх часів та народів. Кожна представниця прекрасного...

Як змиритися з самотністю
Як змиритися з самотністю

Лякає. Вони уявляють, як у старості сидітимуть на кріслі-гойдалці, погладжуватимуть кота і споглядатимуть захід сонця. Але як змиритися з самотністю? Стоїть...