Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПР_КТіООР.doc
Скачиваний:
37
Добавлен:
11.05.2015
Размер:
9.89 Mб
Скачать

Практична робота №4 Основи роботи з matlab

Мета: Ознайомлення з системою MATLAB

Теоретичні питання

Середовище MATLAB включає інтерпретатор команд на мові високого рівня, графічну систему, пакети розширень і реалізована на мові С. Вся робота організовується через командне вікно (Command Window), яке з'являється при запуску програми matlab.exe. В процесі роботи дані розташовуються в пам'яті (Workspace), для зображення кривих, поверхонь і інших графіків створюються графічні вікна.

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

Всі значення змінних, обчислені протягом поточного сеансу роботи, зберігаються в спеціально зарезервованій області пам'яті комп'ютера, яка називається робочим простором системи MATLAB (Workspace). Командою clc можна стерти вміст командного вікна, проте це не торкнеться вмісту робочого простору. Коли зникає необхідність в зберіганні ряду змінних в поточному сеансі роботи, їх можна стерти з пам'яті комп'ютера командою clear або clear(имя1, имя2). Перша команда видаляє з пам'яті всі змінні, а друга - змінні з іменами имя1 і имя2. Командою who можна вивести список всіх змінних, що входять в даний момент в робочий простір системи. Для огляду значення будь-якої змінної з поточного робочого простору системи достатньо набрати її ім'я і натискувати клавішу Enter.

Після закінчення сеансу роботи з системою MATLAB всі раніше обчислені змінні втрачаються. Щоб зберегти у файлі на диску комп'ютера вміст робочого простору системи MATLAB, потрібно виконати команду меню File I Save Workspace As. По замовчуванню розширення імені файлу mat, тому такі файли прийнято називати mat-файлами. Для завантаження в пам'ять комп'ютера раніше збереженого на диску робочого простору потрібно виконати команду меню: File/Load Workspace .

Дійсні числа і тип даних double. Система MATLAB представляє на машинному рівні всі дійсні числа задані мантисою і показником ступеня, наприклад, 2.85093Е+11. Цей основний тип даних носить назву double. MATLAB за умовчанням використовує формат short для виводу дійсних чисел, при якому показуються тільки чотири десяткові цифри після коми.

Введіть з клавіатури приклад:

» res=5.345*2.868/3.14-99.455+1.274

Отримайте результат обчислення:

» res = -93.2990

Якщо потрібне повне представлення дійсного числа res, введіть з клавіатури команду:

» format long

і далі наберіть ім'я змінної

» res

натисгіть клавішу Enter і отримайте більш докладну інформацію:

» res = -93.29900636942675

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

Над дійсними числами і змінними типу double проводяться арифметичні операції: складання +, віднімання -, множення *, ділення / і зведення в ступінь ^ .

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

В системі MATLAB присутні всі основні елементарні функції для обчислень з дійсними числами. Будь-яка функція характеризується своїм ім'ям, списком вхідних аргументів (перераховуються через кому і стоять всередині круглих дужок, наступних за ім'ям функції) і обчислюваним (що повертається) значенням. Список всіх в системі елементарних математичних функцій може бути отриманий по команді help elfun. Обчисліть вираз, включаючи обчислення функції арксинус:

» 2*asin(1)

Переконайтеся, що вийшов наступний результат:

» ans = 3.1416

відповідне числу π.

В системі MATLAB для обчислення числа π є спеціальне позначення: pi.

MATLAB має також логічні функції, функції, пов'язані з цілочисельною арифметикою (округлення до найближчого цілого: round, усікання дробової частини числа: fix). Є ще функція mod – залишок від ділення з урахуванням знака, sign – знак числа, lcm – якнайменше загальне кратне, реrms – обчислення числа перестановок і nchoosek – числа поєднань і багато інших. 1

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

Символьні позначення операцій відношення

<

<=

>

>=

~=

==

Менше

Менше або рівно

Більше

Більше або рівно

Не рівно

Рівно

У разі істинності операції відношення її величина рівна 1, а у разі помилковості – 0. Операції відношення мають більш низький пріоритет, ніж арифметичні операції.

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

» a=1; b=2; c=3;

» res=(a<b)+(c~=b)+(b==a)

Ви отримаєте наступний результат:

» res = 2

Логічні операції над дійсними числами позначаються знаками:

Символьні позначення логічних операцій

&

|

~

І

АБО

НІ

Перші дві з цих операцій є бінарними (двооперандними), а остання – унарна (однооперандна). Логічні операції трактують свої операнди як «істинні» (не рівні нулю) або «помилкові» (рівні нулю). Якщо обидва операнди операції «І» істинні (не рівні нулю), то результат цієї операції рівний 1 («істина»); у всій решті випадків операція «І» виробляє значення 0 («не істина»). Операція «АБО» виробляє 0 («не істина») тільки у разі, коли є помилковими (рівними нулю) обидва операнди. Операція «НІ» інвертує «не істина» на «істину». Логічні операції мають найнижчий пріоритет.

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

» 2+3i;

» -6.789+0.834e-2*i;

» 4-2j;

» x+y*i;

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

» res=sin(2+3i)*atan(4i)/(1-6i)

Вийде результат: 10 -1.8009 - 1.9190i

Спеціально для роботи з комплексними числами призначені наступні функції: abs (абсолютне значення комплексного числа), conj (комплексно зв'язане число), imag (уявна частина комплексного числа), real (дійсна частина комплексного числа), angle (аргумент комплексного числа), isreal («істина», якщо число дійсне).

Числові масиви. Для створення одновимірного масиву можна використовувати операцію конкатенації, яка позначається за допомогою квадратних дужок [ ]. Елементи масиву поміщаються між дужками і відділяються один від одного пропуском або комою:

» al=[1 2 3]; d=[1+2i,2+3i,3-7i];

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

Можна змінювати елементи вже сформованого масиву шляхом застосування операцій індексації і привласнення. Наприклад, вводячи: » al(3)=789; ми змінимо третій елемент масиву. Або, після введення: » al(2)=(al(1)+al(3))/2; другий елемент масиву стане рівним середньому арифметичному першого і третього елементів. Запис неіснуючого елемента цілком допустимий – вона означає додавання нового елемента до вже існуючого масиву: » al(4)=7;

Застосовуючи після виконання цієї операції до масиву а1 функцію length, знаходимо, що кількість елементів в масиві зросла до чотирьох: » length(al) ans = 4

Туж саму дію – «подовження масиву а1» - можна виконати і за допомогою операції конкатенації: » al=[al 7];

Можна задати масив, прописуючи всі його елементи по окремості: » a3(1)=67; a3(2)=7.8; a3(3)=0.017; Проте цей спосіб створення не є ефективним.

Ще один спосіб створення одновимірного масиву заснований на застосуванні спеціальної функції, що позначається двокрапкою (операція формування діапазону числових значень). Через двокрапку слід набрати перше число діапазону, крок (приріст) і кінцеве число діапазону. Наприклад: » diap=3.7:0.3:8.974;

Якщо не потрібно виводити на екран весь масив, то в кінці набору (після кінцевого числа діапазону) слід набрати крапку з комою. Щоб взнати, скільки елементів в масиві, слід викликати функцію length (ім'я масиву).

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

Введіть з клавіатури: » a=[1 2; 3 4; 5 6],

отримаємо:

» а =

1 2

3 4

5 6

Отриману матрицю а розміром 3x2 (першим указується число рядків, другим – число стовпців) можна сформувати також вертикальною конкатенацією вектор-рядків: » a=[[1 2];[3 4];[5 6]]; або горизонтальною конкатенацією вектор-стовпців:

» a=[[1;3;5],[2;4;6]];

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

Наприклад: » а(1,1)=1; а(1,2)=2; а(2,1)=3; » а(2,2)=4; а(3,1)=5; а(3,2)=6;

Проте буде набагато ефективно, якщо до початку прописування елементів масиву, створити масив потрібного розміру функціями ones (m,n) або zeros(m,n), заповнений одиницями або нулями (m – число рядків, n – число стовпців). При виклику цих функцій заздалегідь виділяється пам'ять під заданий розмір масиву, після цього поступове прописування елементів потрібними значеннями не вимагає перебудови структури пам'яті, відведеної під масив. Використовування цих функцій можливо і при завданні масивів інших розмірів.

Якщо після формування масиву Х буде потрібно, не змінюючи елементів масиву, змінити його розміри, можна скористатися функцією reshape(Х, М, N), де M і N – нові розміри масиву Х.

Поміняти місцями рядки матриці з її стовпцям можна операцією транспортування, яка позначається знаком ' (апостроф).

Наприклад:

» A=[1 1 1; 2 2 2; 3 3 3];

» B=A' B =

1 2 3

1 2 3

1 2 3

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

Операції додавання і віднімання матриць (знайомі вам з лінійної алгебри) позначаються стандартними знаками + і -. Задайте матриці А і В і виконаєте операцію додавання матриць:

» A=[1 1 1; 2 2 2; 3 3 3]; B=[0 0 0; 7 7 7; 1 2 3];

» A+B

Якщо використовуються операнди різних розмірів, видається повідомлення про помилку, за винятком випадку, коли один з операндів є скаляром. При виконанні операції А + скаляр (А – матриця) система розширить скаляр до масиву розміру А, який і складається далі поелементно з А.

» A+5

ans = 6 6 6

7 7 7

8 8 8

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

Окрім операції ./, яка називається операцією правого поелементного ділення є ще операція лівого поелементного ділення .\. Вираз А / В приводить до матриці з елементами А (k, m) /В (k, m), а вираз А .\ В приводить до матриці з елементами В(k,m)/А(k,m).

Знак * закріплений за перемножуванням матриць і векторів в значенні лінійної алгебри. Знак \ закріплений в системі MATLAB за рішенням досить складної задачі лінійної алгебри - знаходженням коренів системи лінійних рівнянь. Наприклад, якщо вимагається вирішити систему лінійних рівнянь АX = b, де А - задана квадратна матриця розміру N x N, b - заданий вектор-стовпець довжини N, то для знаходження невідомого вектор-стовпця X достатньо обчислити вираз А \ b.

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

» u=[1 2 3]; v=[3 2 1];

» cross(u,v)

» ans =

-4 8 -4

Довжина вектора обчислюється за допомогою скалярного добутку і функції витягання квадратного кореня, наприклад: » sqrt(sum(u.*u))

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

Серед функцій, що генерують матриці із заданими властивостями, згадаємо тут функцію eye, що проводить одиничні квадратні матриці, а також широко вживану на практиці функцію rand, що генерує масив з випадковими елементами, рівномірно розподіленими на інтервалі від 0 до 1. Наприклад, вираз » F=rand(3) породжує масив випадкових чисел розміром 3х3 з елементами, рівномірно розподіленими на інтервалі від 0 до 1.

Якщо викликати цю функцію з двома аргументами, наприклад R=rand(2,3),то вийде матриця R випадкових елементів розміром 2x3. При виклику функції rand з трьома і більш скалярними аргументами проводяться багатовимірні масиви випадкових чисел.

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

Серед функцій, що проводять найпростіші обчислення над масивами, крім розглянутої вище функції sum, згадаємо ще функцію prod, яка у всьому аналогічна функції sum, тільки обчислює вона не суму елементів, а їх добуток. Функції max і min шукають відповідно максимальний і мінімальний елементи масивів. Для векторів вони повертають єдине числове значення, а для матриць вони породжують набір екстремальних елементів, обчислених для кожного стовпця. Функція sort сортує в зростаючому порядку елементи одновимірних масивів, а для матриць вона проводить таке сортування для кожного стовпця окремо.

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

» x=0:0.01:pi/2; y=sin(x);

обчислюють значення функції sin відразу в 158 крапках, формуючи два вектори x і у з 158 елементами кожний.