Побудова поверхонь 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

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

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.

Урок №3.

Основи графічної візуалізації обчислень

    Особливості графіки системи MATLAB

    Побудова графіка функцій однієї змінної

    Стовпцеві діаграми

    Побудова тривимірних графіків

    Обертання графіків мишею

    Контекстне меню графіків

    Управління форматом графіків

Особливості графіки системи MATLAB

Починаючи з версії MATLAB 4.0, вперше орієнтованої на Windows, графічні засоби системи MATLAB були значно покращені. Основні відмінні риси графіки нової версії MATLAB 6:

    Істотно покращений інтерфейс графічних вікон;

    Введення нової панелі інструментів Camera для інтерактивної зміни умов видимості об'єкта;

    Розширені можливості форматування графіки;

    Можливість створення графіки в окремих вікнах;

    Можливість виведення кількох графічних вікон;

    Можливість переміщення вікон по екрану та зміни їх розмірів;

    Можливість переміщення області графіки усередині графічного вікна;

    Завдання різних координатних системта осей;

    Висока якість графіки;

    Широкі можливості використання кольорів;

    Легкість встановлення графічних ознак – атрибутів;

    Зняття обмежень на кількість кольорів;

    Різноманітність параметрів команд графіки;

    Можливість отримання тривимірних фігур, що природно виглядають, та їх поєднань;

    Простота побудови тривимірних графіків зі своїми проекцією на площину;

    Можливість побудови перерізів тривимірних фігур та поверхонь площинами;

    Функціональне багатобарвне та напівтонове забарвлення;

    Можливість імітації світлових ефектів під час освітлення фігур точковим джерелом світла;

    Можливість створення анімаційної графіки;

    Можливість створення об'єктів типового інтерфейсу користувача.

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

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

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

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

Побудова графіка функцій однієї змінної

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

Візьмемо спочатку найпростіший приклад - побудова графіка синусоїди. Слід пам'ятати, що MATLAB (як і інші СКМ) будує графіки функцій ряду точок, з'єднуючи їх відрізками прямих, тобто здійснюючи лінійну інтерполяцію функції в інтервалі між суміжними точками. Задамо інтервал зміни аргументу хвід 0 до 10с кроком 0.1. Для побудови графіка досить спочатку задати вектор х = 0: 0.1: 10, а потім використовувати команду побудови графіків plot (sin (x)). Це показано на рис. 3.1.

Вектор x задає інтервал зміни незалежної змінної від 0 до 10 з кроком 0.1. Чому взято такий крок, а чи не, скажімо, 1? Справа в тому, що plot будує не істинний графік функції sin (x), а лише задане числом елементів вектора число точок. Ці точки потім просто з'єднуються відрізками прямих, тобто здійснюється шматково-лінійна інтерполяція графіка даних. При 100 точках отримана крива оком сприймається як цілком плавна, але при 10-20 точках вона виглядатиме з відрізків прямих.

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

Мал. 3.1. Приклад побудови графіка синусоїди

Побудова в одному вікні графіків кількох функцій

Більше докладний описграфічного вікна буде дано в уроці 5. А поки що підемо далі і спробуємо побудувати графіки відразу трьох функцій: sin(x), cos(#) і sin (x)/г.Перш за все відзначимо, що ці функції можуть бути позначені змінними, які не мають явної вказівки аргументу у вигляді у(х):

»yl = sin (x): y2 = cos (x): y3 = sin (x) / x;

Така можливість обумовлена ​​тим, що це змінні є векторами - як і змінна x. Тепер можна використовувати одну із низки форм команди

plot: plot(al.fl.a2.f2.a3.f3,...).

де al, а2, аЗ,.„ - вектори аргументів функцій (у разі всі вони - х), a f1, f2, f3,... -вектори значень функцій, графіки яких будуються одному вікні. У нашому випадку для побудови графіків зазначених функційми маємо записати наступне:

» plot(x,yl,x,y2,x.y3)

Очікується, що MATLAB у разі побудує, як завжди, точки графіків цих функцій і з'єднає їх відрізками ліній. Але, на жаль, якщо ми виконаємо ці команди, то жодного графіка не отримаємо взагалі. Не виключено навіть збій Броботу програми. Причина цього казусу вже обговорювалася в попередньому уроці - при обчисленні функції y3 = sin (x) / x, якщо х є масивом (вектор), то не можна використовувати оператор матричного поділу /.

Цей приклад ще раз наочно вказує на те, що чисто поверхове застосування навіть такої потужної системи, як MATLAB, іноді призводить до прикрих зривів. Щоб все ж таки отримати графік, треба обчислювати ставлення sin(x) до хсдопомогою оператора поелементного поділу масивів./. Цей випадок пояснює рис. 3.2.


Мал. 3.2. Побудова графіків трьох функцій

Хоча цього разу MATLAB побудував графіки всіх трьох функцій, у вікні командного режиму з'явилося попередження про поділ на 0 – у момент, коли х=0. Це говорить про те, що pi ot «не знає» про те, що невизначеність sin(x)/x=0/0 усувається і дає 1. Це недолік практично всіх систем чисельних обчислень.

Графічна функція fplot

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

fplot: fplott "f(x)". )

Вона дозволяє будувати функцію, задану в символьному вигляді, в інтервалі зміни аргументу від xmin до xmax без фіксованого кроку зміни х. Один із варіантів її застосування демонструє рис. 3.3. Хоча у процесі обчислень попередження про помилку (розподіл на 0) виводиться, але графік будується правильно, при х=0 sinx/x=l. Зверніть також увагу на дві команди: clear (очистити) - очищення графічного вікна і grid on (сітка) - включення відображення сітки, яка будується пунктирними лініями.



Мал. 3.3. Побудова графіка sin(x)/x функцією fplot

На рис. 3.3 представлено також меню File (Файл) вікна графіки. Неважко помітити, що містить типові файлові операції. Однак вони не стосуються файлів документів, а файлів графіків. Зокрема, можна присвоювати ім'я малюнків з графіками, що записуються на диск.

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

Стовпцеві діаграми

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

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

Мал. 3.4 також дає уявлення про меню Tools (Інструменти) вікна графіки, що з'явилося починаючи з версії MATLAB 5.3.1 (випуск 11.1). Неважко помітити, що крім можливості виведення інструментальної панелі тут є цілий рядінших команд, які будуть розглянуті надалі. Це команди виведення властивостей графічних об'єктів, зміни масштабу графіка, додавання осей тощо.

Мал. 3.4. Побудова стовпцевої діаграми значень елементів вектора

Побудова тривимірних графіків

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

» =meshgrid(-5:0.1:5);

» Z = X. * sin (X + Y);

» meshc(X.Y,Z)

Вікно із побудованим графіком показано на рис. 3.5.


Мал. 3.5. Вікно з графіками поверхні та її проекції на площину під фігурою

Раніше довелося б убити багато днів на складання та налагодження потрібної для побудови такого графіка програми. У MATLAB ж можна за лічені секунди змінити функцію, що задає поверхню. Z(X, Y)і відразу отримати новий графік поверхні з забарвленням, даному випадкузаданою вектором Z і з її проекцією на площину XY. На рис. 3.5 показано також відкрите меню Help (Допомога) вікна тривимірної графіки.

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

Обертання графіків мишею

Можна повертати побудовану фігуру мишею та спостерігати її під різними кутами. Розглянемо цю можливість з прикладу побудови логотипу системи MATLAB - мембрани. Для цього, ввівши команду membrane, отримаємо вихідний графік на рис. 3.6.

Мал. 3.6. Побудова мембрани – логотипу системи MATLAB

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

Цікаво, що у версії MATLAB 6 можна обертати і двомірні графіки, спостерігаючи поворот площини, в якій вони побудовані. Жодного програмування таке обертання не вимагає.

Мал. 3.7. обертання тривимірної фігуримишею

Контекстне меню графіків

Для перемикання в режим редагування графіка потрібно натиснути кнопку Edit Plot (Редагувати графік) із зображенням курсора-стрілки. У цьому режимі можна керувати графіком за допомогою контекстного меню, що викликається клацанням правої кнопки миші. Вигляд цього меню при курсорі, розташованому в області тривимірного графіка поза побудованими тривимірними графічними об'єктами, показаний на рис. 3.8. За допомогою миші можна також виділити графік. Клацніть лівою клавішею виводить рамку навколо малюнка (див. рис. 3.8). Тепер на графік можна наносити стрілки, які пояснюють написи (кнопка з літерою А) і т.д.

Мал. 3.8. Графік у стані редагування та контекстне меню

Основи форматування двовимірних графіків

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

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

Тут розглянемо можливості форматування графіків, які, образно кажучи, лежать лежить на поверхні. Систематизований опис інтерфейсу системи MATLAB 6.0, зокрема інтерфейсу графічних вікон, дається в уроці 5.

Форматування ліній графіків

MATLAB має можливість легко налаштовувати та коригувати властивості графіків за допомогою спеціальних засобів. У новій версії MATLAB 6.0 вони суттєво змінені. Так, у попередній версії налаштування (форматування) графіків використовувався спеціальний редактор властивостей - Graphics Properties Editor (Редактор властивостей графіки). Його можна було викликати в меню File вікна командного режиму MATLAB за допомогою команди Show Graphics Properties Editor (Показати редактор властивостей графіки).

У новій версії MATLAB форматування графіків стало суворішим і зручнішим. При цьому раніше згаданий редактор властивостей графіків перестав так іменуватись, і команда Show Graphics Properties у новій версії відсутня. Її замінюють команди Figure Properties (властивості фігури) та Axis Properties (властивості осей) з усіма необхідними налаштуваннями.

Під час побудови графіків з'являється графічне вікно. Іноді воно буває приховано раніше наявними вікнами як системи MATLAB, так і інших працюючих середовищі Windows 95/98/Me/2000/NT4 додатків. Якщо ви не побачили графіка, заданого для побудови, то пошукайте його у списку відкритих вікон (додатків), натискаючи клавіші Alt+Tab, та виберіть зі списку потрібне вікно. Вікна графіки мають зображення логотипу системи Matlab. За замовчуванням вони виводяться з панеллю інструментів із низкою кнопок цілком очевидного призначення.

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

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

Мал. 3.9. Вікно графіка (праворуч) та вікно форматування ліній (ліворуч)

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

Корисно знати, що кнопка Apply дозволяє застосувати зроблені установки до графіка до закриття вікна діалогу. Кнопка ОК вводить зроблені установки та закриває вікно діалогу. Призначення інших кнопок є очевидним.

Форматування маркерів опорних точок

У нашому випадку опорні точки задаються ранжированной змінної х, має ряд значень від -15 до +15 з кроком 0.1. Ці точки з'являються на графіку, якщо в полі властивостей маркера Marker Properties (Властивості маркера) із меню Style (Стиль) вибрати стиль маркера. На рис. 3.10, наприклад, показано побудову графіка з маркерами опорних точок у вигляді кіл.

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

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

Форматування ліній та маркерів для графіка кількох функцій

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

» х = -6: 1:6;
» plot(x.sin(x).x.sin(x). ^ 3.x,sin(x).^5):

Мал. 3.11 показує приклад такого форматування для графіка, одержаного виконанням цих команд.

До речі, зверніть увагу, як задані ступеня синуса. Записати ці вирази у вигляді sin(x)^2 та cos(x)^2 буде грубою помилкою, оскільки х тут вектор. Оператори в даному випадку дають поелементне зведення в ступінь, що і потрібно для побудови графіків цих функцій.

Мал. 3.11. Приклад форматування для графіка трьох функцій

Форматування осей графіків

Аналогічно описаним вище правилам виконується форматування та інших об'єктів графіків. Наприклад, вказавши курсором миші на осі графіків (на них також є мітки у вигляді чорних квадратиків) і двічі клацнувши лівою клавішею миші, можна побачити появу вікна форматування об'єктів дескрипторної графіки Property Editor (Редактор властивостей, Графічний редактор властивостей) (рис. 3.12), настроєного на форматування осей.



Мал. 3.12. Приклад форматування осей графіка

Вікно графічного редактора властивостей дескрипторної графіки має безліч вкладок, налаштування яких є досить очевидними, і ніщо не заважає читачеві поекспериментувати з ними кілька хвилин. Це дозволить зрозуміти простоту та водночас високу ефективність засобів форматування об'єктів графіки. Наприклад, ви можете задати лінійний або логарифмічний масштаб осей (вкладка Scale (Масштаб), відкрита на рис. 3.12), нормальний або інверсний напрямок осей (X, У, а у разі тривимірних графіків та Z), показ сітки (параметр Grid Show) , змінити стиль осей та кольору фону (вкладка Style (Стиль)), нанести у осей написи (вкладка Label (Ярлик)) та ін.

Мал. 3.13 показує графік синусоїди після деяких операцій форматування осей. Тут (до речі, як і на рис. 3.12) задана побудова сітки Grid по осях X та Y, побудова написів (просто букви X та Y) по координатних осях та побудова титульного напису. Заодно на рис. 3.13 показано в відкритому виглядіменю розширених інструментальних засобів графічного вікна Його команди детально обговорюються на уроці 5. Словом, з об'єктами графіки можна зробити все, що завгодно! Деякі з можливостей форматування об'єктів графіки ми розглянемо пізніше, з описом типів графіків.

Мал. 3.13. Приклад побудови графіка синусоїди після форматування осей

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

Нанесення написів та стрілок прямо на графік

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

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

Мал. 3.14. Нанесення напису на відформатований графік

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

Мал. 3.15. Остаточно відформатований графік трьох функцій

На рис. 3.15 зокрема показано завдання написів різним стилем, а також завдання стрілки за допомогою відповідної кнопки панелі інструментів. Це стрілку у режимі редагування графіка можна переміщати та обертати мишею, а також змінювати її довжину. Можна також наносити на графік та звичайні лінії (без стрілки).

Побудова легенди та шкали квітів на графіку

Додатково можна змінити розміри графіка (див. меню Tools (Інструменти) та його команди Zoom In (Збільшити) та Zoom Out (Зменшити)), почати поворот графіка мишею (команда Rotate 3D), додати відрізок прямий чи інший графічний примітив (підменю Add) та підключити до графіка легенду -пояснення у вигляді відрізків ліній з довідковими написами, що розміщується всередині або біля графіка. Оскільки наш графік містить три криві, то легенда є позначення цих трьох ліній у правому верхньому куткумалюнку (рис. 3.16). Кожна лінія має той самий колір, що і на графіці (і той самий стиль).

Мал. 3.16. Остаточно сформований графік

Слід зазначити, що всі описані можливості форматування графіків доступні і програмним способом, шляхом завдання відповідних графічних команд, параметрів і примітивів. Наприклад, команда text(х,у, "legend") дозволяє задати напис "legend" з початком, що має координати (х, у). Якщо після першого апострофа перед текстом помістити параметр \leftarrow, напис (легенда) з'явиться після стрілки з вістрям, зверненим вліво. Аналогічно параметр \rightarrow після напису задає виведення стрілки після напису з вістрям, зверненим праворуч. Ця можливість дозволяє помічати як криві, а й окремі точки на них. Можливе також застосування команди legend("s1", "s2",...), що виводить легенду звичайного виду - відрізки ліній графіків з написами "si", "s2" і т.д.

Переміщення графіка у графічному вікні

Зазвичай графік займає фіксоване становище у центрі графічного вікна. Однак у режимі редагування графіків, коли курсор миші знаходиться в області графіка, у контекстному меню правої клавіші миші є команда Unlock Axes Position (Вимкнути позиціонування осей). Вона знімає фіксацію положення координатних осей графіка та дозволяє рухати його мишею разом з осями. Це ілюструє рис. 3.17.


Мал. 3.17. Приклад переміщення графіка

Цікаво, що при переміщенні графіка його легенда та колірна діаграма залишаються на колишньому місці.

Застосування графічної «лупи»

На панелі інструментів є кнопки із зображенням лупи та знаками + та -. З їх допомогою виконуються команди Zoom In (+) (Збільшити) та Zoom Out (-) (Зменшити). Це дає змогу збільшувати або зменшувати масштаб перегляду зображення. При цьому команда Zoom In цікава ще однією можливістю – за її допомогою можна виділяти частину графіка переміщенням миші з натиснутою лівою клавішею – рис. 3.18.


Мал. 3.18. Приклад виділення частини графіка


Мал. 3.19.Приклад перегляду частини графіка

Область виділення відзначається прямокутником із тонких точкових ліній. Відпустивши ліву клавішу миші, можна спостерігати побудову виділеної частини графіка по всьому вікні - рис. 3.19. За допомогою команди Zoom Out можна відновити графік у попередньому масштабі. У такий спосіб реалізується графічна «лупа».

Робота з камерою 3D-графіки

На відміну від двовимірних (2D) графіків форматування тривимірних графіків містить ряд додаткових можливостей. Покажемо їх на простому прикладіпобудови 3D-графіки за допомогою наступних простих команд:

» Z = peaks (40):

»mesh (Z);


Мал. 3.20. Приклад побудови каркасного 3D-графіка

Тут перша команда створює масив точок поверхні за допомогою одного із ряду вбудованих в ядро ​​системи MATLAB готових описів таких поверхонь.

Мал. 3.21.Приклад форматування тривимірного графіка

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

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

Рис.. 3.22. Cтоп кадр обертання тривимірного графіка

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

Для керування положенням та обертанням тривимірного графіка можна використовувати клавіші переміщення курсору. Ефект обертання графіка ілюструє рис. 3.22 де показаний графік рис. 3.21 після його повороту при натиснутій клавіші ->. На відміну від повороту мишею (також можливого) переміщення та повороти за допомогою клавіш курсору при вибраному типі переміщення дають плавне переміщення або обертання фігури. Таким чином здійснюється анімація (оживлення) тривимірної графіки.

Заключні зауваження щодо графіка

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

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

Однак засоби MATLAB дозволяють досвідченим програмістам створити розширення системи з візуально-орієнтованою технологією програмування. Самим наочним прикладомЦе система моделювання динамічних об'єктів Simulink з набором моделей з готових блоків. При цьому автоматично створюється не тільки складна графічна блок-схема пристрою, що моделюється, але і система рівнянь стану, рішення якої і є основою моделювання.

Що нового ми дізналися?

У цьому уроці ми навчилися:

    Будувати графіки функцій однієї змінної.

    Будувати стовпцеві діаграми.

    Будувати тривимірні графіки.

    Обертати графіки мишею.

    Використовуйте контекстне меню графіків.

    Керувати форматом графіків.

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

у точках 0.2, 0.3, 0.5, 0.8, 1.3, 1.7, 2.5.
Завдання вирішується у два етапи.
1. Створюється вектор-рядок х,містить координати заданих точок.
2. Обчислюються значення функції y(х) від кожного елемента вектора хі записуються отримані значення у вектор-рядок у.
Значення функції необхідно знайти для кожного з елементів векторного рядка х,тому операції у виразі для функції повинні виконуватись поелементно.

» х =
х =
0.2000 0.3000 0.5000 0.8000 1.3000 1.7000 2.5000 » = sin(x).^2./(l+cos(x))+exp(-x).*log(x)
У =

Зверніть увагу, що при спробі використання операцій зведення в ступінь ^, поділу / та множення * (які не відносяться до поелементних) виводиться повідомлення про помилку вже при зведенні sin(x) у квадрат:

» у = sin(х)^2/(1+соз(х))+exp(-x)*log(x)
??? Error using ==> ^
Matrix must be square.

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

» х
х =
0.2000 0.3000 0.5000 0.8000 1.3000 1.7000 2.5000 » у
у =
-1.2978 -0.8473 -0.2980 0.2030 0.8040 1.2258 1.8764

Часто потрібно вивести значення функції в точках відрізка, що віддаляються один від одного на рівну відстань(Крок). Припустимо, що необхідно вивести таблицю значень функції y(х) На відрізку з кроком 0.2. Можна, звичайно, ввести вектор рядок значень аргументу х=з командного рядка та обчислити всі значення функції так, як описано вище. Однак, якщо крок буде не 0.2, а, наприклад 0.01, то має бути велика робота щодо введення вектора х.
У MatLab передбачено просте створення векторів, кожен елемент яких відрізняється від попереднього на постійну величину, тобто. на крок. Для введення таких векторів служить двокрапка (не плутайте з індексацією за допомогою двокрапки). Наступні два оператори призводять до формування однакових векторних рядків. Умовно можна записати

» х =
х =
» х =
х =
1.0000 1.2000 1.4000 1.6000 1.8000 2.0000

Умовно можна записати

х = [початкове значення: крок: кінцеве значення]

Необов'язково піклуватися про те, щоб сума передостаннього значення кроку дорівнювала кінцевому значенню, наприклад, при виконанні наступного оператора присвоєння

» х =
х =
1.0000 1.2000 1.4000 1.6000 1.8000

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

» х =
х =
1.9000 1.7000 1.5000 1.3000 1.1000

У разі негативного кроку для отримання непустого векторного рядка початкове значення має бути більшим за кінцевий.
Для заповнення вектор-стовпця елементами, що починаються з нуля і закінчуються 0.5 з кроком 0.1, слід заповнити вектор-рядок, а потім використовувати операцію транспонування:

» х = "
х =
0
0.1000
0.2000
0.3000
0.4000
0.5000

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

» х =
х =
1 2 3 4 5

Нехай потрібно вивести таблицю значень функції

на відрізку з кроком 0.05,
Для виконання цього завдання необхідно зробити такі дії:
1. Сформувати вектор-рядок хза допомогою двокрапки.
2. Обчислити значення у(х) отелементів х.
3. Записати результат у векторний рядок y.
4. Вивести хі у.

» х =;
» у = ехр (-х). * sin (10 * x);
» х
х =
Columns 1 through 7
Про 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000
Columns 8 через 14
0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500
Columns 15 through 21
0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000
» у
У =
Columns 1 through 7
0 0.4560 0.7614 0.8586 0.7445 0.4661 0.1045
Columns 8 через 14
-0.2472 -0.5073 -0.6233 -0.5816 -0.4071 -0.1533 0.1123
Columns 15 through 21
0.3262 0.4431 0.4445 0.3413 0.1676 -0.0291 -0.2001

Вектор рядки x та yскладаються з двадцяти одного елемента, і не міститься на екрані в один рядок, тому виводяться частинами. Так як хі yзберігаються у двовимірних масивах розмірністю один на двадцять один, то виводяться по стовпцях, кожен із яких складається з одного елемента. Спочатку виводяться стовпці з першого по сьоме (columns 1 through 7), потім - з восьмого по чотирнадцятий (columns 8 through 14), і, нарешті, - з п'ятнадцятого по двадцять перший (columns 15 through 21). Наочнішим і зручнішим є графічне уявлення функції.

2. Побудова графіків функції однієї змінної

2.1. Графіки функцій у лінійному масштабі

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

,

визначеної на відрізку. Виведення функції у вигляді графіка складається з наступних етапів:
1. Завдання вектора значень аргументу х.
2. Обчислення вектора узначень функції y(х).
3. Виклик команди plot для побудови графіка.
Команди для завдання вектора хі обчислення функції краще завершувати крапкою з комою для придушення виведення в командне вікно їх значень (після команди plot точку з комою ставити необов'язково, тому що вона нічого не виводить у командне вікно).

» х =;
» у = ехр (-х). * sin (10 * x);
» plot(x, у)

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

» х =;
» у = ехр (-х). * sin (10 * x);
» plot(x, у)

В результаті виходить графік функції у вигляді плавнішої кривої.
Порівняння кількох функцій зручно робити, відобразивши їх графіки на осях. Наприклад, збудуємо на відрізку [-1, -0.3] графіки функцій
,

за допомогою наступної послідовності команд:

»х = [-1:0.005:-0.3];
» f = sin (x. -2);
» g = sin (1.2 * x. ^-2);
» plot(x, f, x, g)

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

»х1 = [-1:0.005:-0.3];
» f = sin (x1. -2);
»х2 = [-1: 0.005: 0.3];
» g = sin (1.2 * x2. -2);
» plot(x1, f, x2, g)

Аналогічним чином за допомогою завдання в plot через ком пара аргументів виду: вектор абсцис, вектор ординат, здійснюється побудова графіків довільного числа функцій.

Зауваження 1

Використання plot з однією аргументом - вектором - призводить до побудови " графіка вектора " , тобто. залежності значень елементів вектора від своїх номерів. Аргументом plot може бути матриця, в цьому випадку на одні координатні осі виводяться графіки стовпців.
Іноді потрібно порівняти поведінку двох функцій, значення яких дуже відрізняються один від одного. Графік функції з невеликими значеннями практично зливається з віссю абсцис, і встановити його вигляд не вдається. У цій ситуації допомагає функція plotyy, яка виводить графіки у вікно з двома вертикальними осями, що мають відповідний масштаб.
Порівняйте, наприклад, дві функції: і

» х =;
»f = х.^-3;
» F = 1000 * (х + 0.5). -4;
» plotyy(x, f, x, F)

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

2.2. Графіки функцій у логарифмічних масштабах

Для побудови графіків у логарифмічному та напівлогарифмічному масштабах служать наступні функції:
- loglog (логарифмічний масштаб по обох осях);
- semilogx (логарифмічний масштаб лише по осі абсцис);
-Semilogy (логарифмічний масштаб тільки по осі ординат).

Аргументи loglog, semilogx та semilogy задаються у вигляді пари векторів значень абсцис та ординат так само, як для функції plot, описаної в попередньому пункті. Побудуємо, наприклад, графіки функцій і на відрізку в логарифмічному масштабі по осі х:

» х =;
» f = log (0.5 * x);
g = sin(log(x));
» semilogx (x, f, x, g)

2.3. Завдання властивостей ліній на графіках функцій

Побудовані графіки функцій мають бути максимально зручними для сприйняття. Часто потрібно нанести маркери, змінити колір ліній, а при підготовці до монохромного друку – задати тип лінії (суцільна, пунктирна, штрих-пунктирна тощо). MatLab надає можливість управляти видом графіків, побудованих за допомогою plot, loglog, semilogx і semilogy, для чого служить додатковий аргумент, що міститься за кожною парою векторів. Цей аргумент полягає в апострофі і складається з трьох символів, які визначають: колір, тип маркера та тип лінії. Використовується одна, дві чи три позиції, залежно від змін. У таблиці наведено можливі значення даного аргументуіз зазначенням результату.

Тип маркера

Тип лінії

Суцільна

пунктирна

штрих-пунктирна

знак "плюс"

штрихова

зірочка

Трикутник вершиною вниз

Трикутник вершиною вгору

Трикутник вершиною вліво

трикутник вершиною вправо

п'ятикутна зірка

шестикінцева зірка

Якщо, наприклад, необхідно побудувати перший графік червоними точковими маркерами без лінії, а другий графік - чорною пунктирною лінією, слід використовувати команду plot(x, f, "r.", х, g, "k:").

2.4. Оформлення графіків функцій

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

» time = ;
» temp1 = ;
» temp2 = ;
» plot(time, temp1, "ro-", time, temp2, "go-")
» grid on
» title("Добові температури")
» xlabel("Час (год.)")
» ylabel("Температура (С)")
» legend("10 травня, 11 травня")

При додаванні легенди слід врахувати, що порядок та кількість аргументів команди legend мають відповідати лініям на графіку. Останнім додатковим аргументом може бути становище легенди в графічному вікні:

* -1 - поза графіком у правому верхньому кутку графічного вікна;
* 0 - вибирається краще положення в межах графіка так, щоб якнайменше перекривати самі графіки;
* 1 - у верхньому правому кутку графіка (це положення використовується за умовчанням);
* 2 - у верхньому лівому кутку графіка;
* 3 - у нижньому лівому кутку графіка;
* 4 - у нижньому правому кутку графіка.

У заголовку графіка, легенді та підписах осей допускається додавання формул та зміна стилів шрифту за допомогою формату ТеХ.
MatLab виводить графіки різним кольором. Монохромний принтер надрукує графіки різними відтінками сірого кольору, що завжди зручно. Команда plot дозволяє легко встановити стиль і колір ліній, наприклад

» plot (x, f, "k-", x, g, "k:")

здійснює побудову першого графіка суцільною чорною лінією, а другого – чорною пунктирною. Аргументи "k-" та "k:" задають стиль і колір першої та другої ліній. Тут k означає чорний колір, а дефіс або двокрапка - суцільну або пунктирну лінію. Вікно з графіком можна закрити, натиснувши кнопку з хрестиком у правому верхньому кутку.

3. Побудова графіків функцій двох змінних

Побудова графіка функції двох змінних у MatLab на прямокутній області визначення змінних включає два попередні етапи:
1. Розбиття області визначення прямокутною сіткою.
2. Обчислення значень функції у точках перетину ліній сітки та запис їх у матрицю.
Побудуємо графік функції z(x,у)= х 2 + у 2 на області визначення у вигляді квадрата хналежить , y- . Необхідно розбити квадрат рівномірною сіткою(наприклад, з кроком 0.2) та обчислити значення функцій у вузлах, позначених точками.
Зручно використовувати два двовимірні масиви х і у, розмірністю шість на шість для зберігання інформації про координати вузлів. Масив х складається з однакових рядків, у яких записані координати x 1, х 2, ..., х 6, а масив умістить однакові стовпці з y1, у 2, ..., у 6. Значення функції у вузлах сітки запишемо в масив z такої ж розмірності (6 x 6), причому для обчислення матриці Zвикористовуємо вираз для функції, але з поелементнимиматричними операціями. Тоді, наприклад z(3,4) якраз дорівнюватиме значення функції z(x,y) у точці (х3, у 4). Для генерації масивів сітки хі уза координатами вузлів MatLab передбачена функція meshgrid, для побудови графіка у вигляді каркасної поверхні - функція meshgrid. Наступні оператори призводять до появи на екрані вікна з графіком функції (крапка з комою в кінці операторів не ставиться для того, щоб проконтролювати генерацію масивів):

» = meshgrid(0:0.2:1,0:0.2:1)
X =

0 0.2000 0.4000 0.6000 0.8000 1.0000
0 0.2000 0.4000 0.6000 0.8000 1.0000
0 0.2000 0.4000 0.6000 0.8000 1.0000
0 0.2000 0.4000 0.6000 0.8000 1.0000
0 0.2000 0.4000 0.6000 0.8000 1.0000
y =
0 0 0 0 0 0
0.2000 0.2000 0.2000 0.2000 0.2000 0.2000
0.4000 0.4000 0.4000 0.4000 0.4000 0.4000
0.6000 0.6000 0.6000 0.6000 0.6000 0.6000
0.8000 0.8000 0.8000 0.8000 0.8000 0.8000
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000

» Z = X. ^ 2 + Y. ^ 2

Z =
0 0.0400 0.1600 0.3600 0.6400 1.0000
0.0400 0.0800 0.2000 0.4000 0.6800 1.0400
0.1600 0.2000 0.3200 0.5200 0.8000 1.1600
0.3600 0.4000 0.5200 0.7200 1.0000 1.3600
0.6400 0.6800 0.8000 1.0000 1.2800 1.6400
1.0000 1.0400 1.1600 1.3600 1.6400 2.0000

Які вади має побудований графік? І як їх усунути? Побудований графік та новий привести в електронному звіті з лабораторної роботи.

MatLab дозволяє наносити на графік додаткову інформацію, зокрема, відповідність кольорів значенням функції. Сітка генерується за допомогою команди meshgrid, що викликається з двома аргументами. Аргументами є вектори, елементи яких відповідають сітці прямокутної області побудови функції. Можна використовувати один аргумент, якщо область побудови функції – квадрат. Для обчислення функції слід використовувати поелементні операції .

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

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

» = meshgrid(-1:0.05:1, 0:0.05:1);
» Z = 4 * sin (2 * pi * X). * cos (1.5 * pi * Y). * (1-Х. ^ 2). * Y. * (1-Y);

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

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

За допомогою команди hidden offможна зробити каркасну поверхню "прозорою", додавши приховану частину. Команда hidden on видаляє невидиму частину поверхні, повертаючи графіку колишній вигляд.

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

Команда shading flatдозволяє прибирати каркасні лінії. Для отримання поверхні, плавно залитої кольором, що залежить від значень функції, призначена команда shading interp.
За допомогою shading faceted можна повернутись до поверхні з каркасними лініями.
Тривимірні графіки, одержувані за допомогою описаних вище команд, зручні для отримання уявлення про форму поверхні, проте за ними важко судити про значення функції. У MatLab визначено команду colorbar, яка виводить поруч із графіком стовпчик, що встановлює відповідність між кольором і значенням функції. Побудуйте за допомогою surf графік поверхні та доповніть його інформацією про колір.

» surf(X,Y,Z)
» colorbar

Команду colorbar можна застосовувати у поєднанні з усіма функціями, що будують тривимірні об'єкти.

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

» surfc(X,Y,Z)
» colorbar

MatLab дозволяє побудувати поверхню, що складається з ліній рівня за допомогою функції contour3. Цю функцію можна використовувати так, як і описані вище mesh, surf, meshc і surfc з трьома аргументами. При цьому кількість ліній рівня вибирається автоматично. Є можливість задати четвертим аргументом в contour3 або число ліній рівня, або вектор, елементи якого дорівнюють значенням функції, що відображаються у вигляді ліній рівня. Завдання вектора (четвертого аргументу levels) зручне, коли потрібно досліджувати поведінку функції певної області її значень (зріз функції). Побудуйте, наприклад, поверхню, що складається з ліній рівня, що відповідають значенням функції від 0 до 0.5 з кроком 0.01:

» levels = ;
» contour3(X, Y, Z, рівні)
» colorbar

4. Побудова контурних графіків функцій двох змінних

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

Використання contour з трьома аргументами

» contour(X,Y,Z)

призводить до графіка, на якому показані лінії рівня на площині xy, але без вказівки числових значеньна них . Такий графік є малоінформативним, не дозволяє дізнатися значення функції кожної з ліній рівня. Використання команди colorbar не дозволить точно визначити значення функції. Кожну лінію рівня можна забезпечити значенням, яке набуває на ній досліджувана функція, за допомогою певної в MatLab функції clabel. Функція clabel викликається з двома аргументами: матрицею, що містить інформацію про лініях рівня та вказівником на графік, на якому слід нанести розмітку. Користувачеві не потрібно самому створювати аргументи clabel. Функція contour, викликана двома вихідними параметрами, як будує лінії рівня, а й знаходить необхідні для clabel параметри. Використовуйте contour з вихідними аргументами CMatr і h (у масиві CMatr міститься інформація про лінії рівня, а масиві h - покажчики). Завершіть виклик contour крапкою з комою для придушення виведення на екран значень вихідних параметрів та нанесіть на графік сітку:

» = Contour (X, Y, Z);
» Clabel (CMatr, h)
» grid on

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

» contourf(X, Y, Z, 20)
» colorbar

5. Оформлення графіків функцій

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

» surfc(X, Y, Z)
»colorbar
» colormap(gray)
» title("Графік функції z(x,y)")
» xlabel("x")
» ylabel("у")
» zlabel("z")

Зауважте, що команда colormap(gray) змінює палітру графічного вікна, тобто. наступні графіки будуть виводитись у цьому вікні також у сірих тонах. Для відновлення початкового значення панелі слід застосувати команду colormap("default"). Кольорові палітри, доступні MatLab, наведені в табл. 2.

Таблиця 2


Палітра

Зміна кольору

Плавна зміна червоний – помаранчевий – жовтий.

Схожа на палітру gray, але із легким відтінком синього кольору.

Кожен колір змінюється від темного до яскравого.

Відтінки блакитного та пурпурового кольорів.

Відтінки мідного кольору.

Циклічна зміна червоний – білий – синій – чорний.

Відтінки сірого.

Плавна зміна чорний – червоний – помаранчевий – жовтий – білий.

Плавна зміна як кольори веселки.

Плавна зміна синій – блакитний – червоний – зелений – жовтий – червоний.

Схожа на палітру gray, але із легким відтінком коричневого кольору

Циклічна зміна червоний – оранжевий – жовтий – зелений – синій – фіолетовий.

Відтінки пурпурового та жовтого.

Відтінки зеленого та жовтого.

Палітра Windows із шістнадцяти кольорів.

Один білий колір.

Відтінок синього та зеленого.

6. Виведення кількох графіків на одні осі

Для відображення кількох графіків функцій однієї змінної на осях використовувалися можливості функцій plot, plotyy, semilogx, semilogy, loglog. Вони дозволяють виводити графіки кількох функцій, задаючи відповідні векторні аргументи парами, наприклад plot (x, f, x, g). Однак для об'єднання тривимірних графіків їх не можна використовувати. Для поєднання таких графіків призначена команда hold on, яку потрібно задати перед побудовою графіка. У наступному прикладі об'єднання двох графіків (площини та конуса) призводить до їх перетину. Конус визначається параметрично наступними залежностями:

, , , .

Для графічного відображенняконуса спочатку необхідно згенерувати за допомогою двокрапки вектор-стовпець і вектор-рядок, що містять значення параметрів на заданому інтервалі (важливо, що u М.Вектор-стовпець і вектор-рядок є матриці, у яких один із розмірів дорівнює одиниці. Фактично, З = abT, де множення відбувається за правилом матричного твору.Для обчислення матричного твору MatLab використовується оператор "зірочка". Визначимо зовнішній твір для двох векторів:

»a =;
»b =;
» C = a * b"
C =
5 6 7
10 12 14
15 18 21

Сформуємо матриці X,Y, необхідні для графічного відображення конуса:

» X = 0.3 * u * cos (v);
» Y = 0.3 * u * sin (v);

Матриця Zмає бути того ж розміру, що і матриці Xі Y. Крім того, вона повинна містити значення, які відповідають значенням параметрів. Якби до функції входило твір іі v, то матрицю Zможна було заповнити аналогічно матрицям Xі Yза допомогою зовнішнього твору. З іншого боку, функцію z(u,v) можна у вигляді , де . Тому для обчислення Zможна застосувати зовнішній твір векторів і , де вектор рядок має ту ж розмірність, що v,але складається з одиниць:

» Z = 0.6 * u * ones (size (v));

Усі необхідні матриці для відображення конуса створені. Завдання площини виконується так:

» = meshgrid(-2:0.1:2);
» Z = 0.5 * X + 0.4 * Y;

Тепер не складно записати і повну послідовність команд для побудови конуса і площини, що перетинаються:

»u = [-2 * pi: 0.1 * pi: 2 * pi] ";
» v = [-2 * pi: 0.1 * pi: 2 * pi];
» X = 0.3 * u * cos (v);
» Y = 0.3 * u * sin (v);
» Z = 0.6 * u * ones (size (v));
» surf(X, Y, Z)
» = meshgrid(-2:0.1:2);
» Z = 0.5 * X + 0.4 * Y;
» hold on
» mesh(X, Y, Z)
» hidden off

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

» plot (x, f, x, g)

еквівалентно послідовності

» plot(х, f)
» hold on
» plot (x, g)

Результати роботи, отримані мною:

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

Через обмежений обсяг даної довідки до нього включені тільки графічні команди та функції з мінімальними елементами дескрипторної графіки. Зацікавленому читачеві слід звернутися до документації по системі MATLAB, і в першу чергу до книги "Using MATLAB Graphics" (Natick, 1996).

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

Для кожного графіка можна задати заголовок, нанести позначення осей та масштабну сітку.

Двовимірні графіки

  • PLOT - графік у лінійному масштабі
  • LOGLOG - графік у логарифмічному масштабі
  • SEMILOGX, SEMILOGY - графік у напівлогарифмічному масштабі
  • POLAR - графік у полярних координатах

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

У системі MATLAB передбачено кілька команд та функцій для побудови тривимірних графіків. Значення елементів числового масиву розглядаються як z-координати точок над площиною, що визначається координатами x та y. Можливо кілька способів з'єднання цих точок. Перший - це з'єднання точок у перерізі (функція plot3), другий - побудова сітчастих поверхонь (функції mesh і surf). Поверхня, побудована за допомогою функції mesh, - це сітчаста поверхня, комірки якої мають колір фону, а їх межі можуть мати колір, що визначається властивістю EdgeColor графічного об'єкта surface. Поверхня, побудована за допомогою функції surf - це сітчаста поверхня, у якої може бути заданий колір не тільки межі, а й осередку; останнє керується властивістю FaceColor графічного об'єкта surface. Рівень викладу цієї книжки вимагає від читача знання объектно-ориентированного програмування. Її обсяг не дозволяє повною мірою описати графічну підсистему, побудовану на такому підході. Зацікавленому читачеві рекомендуємо звернутися до документації по системі MATLAB, і в першу чергу до книги Using MATLAB Graphics (Natick, 1996).

  • PLOT3 - побудова ліній та точок у тривимірному просторі
  • MESHGRID - формування двовимірних масивів X та Y
  • MESH, MESHC, MESHZ - тривимірна сітчаста поверхня
  • SURF, SURFC - затінена сітчаста поверхня
  • SURFL - затінена поверхня з підсвічуванням
  • AXIS - масштабування осей та виведення на екран
  • GRID - нанесення сітки
  • HOLD – керування режимом збереження поточного графічного вікна
  • SUBPLOT - розбиття графічного вікна
  • ZOOM - управління масштабом графіка
  • COLORMAP - палітра кольорів
  • CAXIS - встановлення відповідності між палітрою кольорів та масштабуванням осей
  • SHADING - затінення поверхонь
  • CONTOURC - формування масиву опису ліній рівня
  • CONTOUR - зображення ліній рівня для тривимірної поверхні
  • CONTOUR3 - зображення тривимірних ліній рівня

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

  • TITLE - заголовки для дво- та тривимірних графіків
  • XLABEL, YLABEL, ZLABEL - позначення осей
  • CLABEL - маркування ліній рівня
  • TEXT - додавання до поточного графіка тексту
  • GTEXT – розміщує заданий текст на графіку з використанням миші
  • LEGEND - пояснення до графіку
  • COLORBAR - шкала палітри

Спеціальна графіка

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



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

Процвітання (Філмор Чарльз) Філмор Чарльз процвітання
Процвітання (Філмор Чарльз) Філмор Чарльз процвітання

Чарльз Філмор - ПроцвітанняПредмоваЛогічно припустити, що мудрий і компетентний Творець повинен подбати про все, що необхідно для потреб...

Юридична психологія Єнікєєв М
Юридична психологія Єнікєєв М

Єнікєєв М. І. Юридична психологія. – М.: Видавництво НОРМА, 2003. – 256 с. - (Короткі навчальні курси юридичних наук). ISВN 5-89123-550-1...

Малі сторожові кораблі пр
Малі сторожові кораблі пр

Хоча радянське надводне кораблебудування почалося з будівництва сторожів (СКР) типу «Ураган», кораблям цього класу мало уваги приділялося...