Операції над матрицями та векторами
У системі MatLab досить просто виконуються математичні операції над матрицями та векторами. Розглянемо спочатку прості операції складання та множення матриць та векторів. Нехай дані два вектори
a = [1 2 3 4 5]; % вектор-рядок b = [1; 1; 1; 1; 1]; % вектор-стовпець
тоді множення цих двох векторів можна записати так
c = a * b; % c = 1 +2 +3 +4 +5 = 16 d = b * a; % d – матриця 5х5 елементів
Відповідно до операцій над векторами, множення вектор-рядка на вектор-стовпець дає число, а множення вектор-стовпця на вектор-рядок дає двовимірну матрицю, що і є результатом обчислень у наведеному прикладі, тобто.

Складання та віднімання двох векторів записується так
a1 = [1 2 3 4 5]; a2 = [5 4 3 2 1]; c = a1+a2; % c = [1+5, 2+4, 3+3, 4+2, 5+1]; з = a2-a1; % c = [5-1, 4-2, 3-3, 2-4, 1-5];
Слід звернути увагу, що операції складання та віднімання можна виконувати між двома векторами-стовпцями або двома векторами-рядками. Інакше MatLab видасть повідомлення помилку, т.к. різнотипні вектори складати не можна. Така справа з усіма неприпустимими арифметичними операціями: у разі неможливості їх обчислення система MatLab повідомить про помилку і виконання програми буде завершено на відповідному рядку.
Аналогічним чином виконуються операції множення та додавання між матрицями:
A = [123; 4 5 6; 7 8 9]; B = ones(3); C = A+B; % додавання двох матриць однакового розміру D = A+5; % додавання матриці та числа E = A*B; % множення матриці А на F = B*A; % множення матриці на А G = 5*A; % множення матриці на число
Операції обчислення зворотної матриці, а також транспонування матриць та векторів записуються наступним чином:
a = [1 11]; % вектор-рядок b = a'; % вектор-стовпець, утворений % транспонуванням вектора-рядка а. A = [1 2 3; 4 5 6; 7 8 9]; % матриця 3х3 елемента B = a * A; % B = [12 15 18] - вектор-рядок C = A * b; % C = [6; 15; 24] – вектор-стовпець D = a*A*a'; % D = 45 - число, сума ел-ів матриці А E = A '; % E - транспонована матриця А F = inv (A); % F – обернена матриця А G = A^-1; % G – зворотна матриця А
З наведеного прикладу видно, що операція транспонування матриць і векторів позначається символом (апостроф), який ставиться після імені вектора або матриці. Обчислення зворотної матриці можна робити шляхом виклику функції inv() або зводячи матрицю ступінь -1. Результат в обох випадках буде однаковим, а два способи обчислення зроблено для зручності використання під час реалізації різних алгоритмів.
Якщо в процесі обчислень потрібно поелементно помножити, розділити або звести в ступінь елементи вектора або матриці, для цього використовуються оператори:
.* - поелементне множення; ./ і .\ - поелементні поділки; . ^ - поелементне зведення у ступінь.
Розглянемо роботу даних операторів на прикладі.
a = [123]; % вектор-рядок b = [3 2 1]; % вектор-рядок c = a.*b; % c = [3 4 3] A = ones (3); % матриця 3х3, що складається з одиниць B = [1 2 3; 4 5 6; 7 8 9]; % матриця 3х3 C = A. * B; % матриця 3х3, що складається з D = A./B; % матриця 3х3, що складається з E = A.B; % матриця 3х3, що складається з F = A.^2; % зведення елементів матриці А квадрат
Наприкінці даного параграфа розглянемо кілька функцій корисних під час роботи з векторами і матрицями.
Для пошуку максимального значення елемента вектора використовується стандартна функція max(), яка повертаєзнайдене максимальне значення елемента та його позицію (індекс):
a = [1634]; [v, i] = max(a); % v = 6, i = 2;
Наведений приклад показує два різні способи виклику функції max(). У першому випадку визначається і максимальне значення елемента та його індекс у векторі, а у другому – лише максимальне значення елемента.
У випадку з матрицями дана функція визначає максимальні значення, що стоять у стовпцях, як показано нижче в прикладі:
A = [435; 6 7 2; 3 1 8]; [V, I] = max(A); % V=[6 7 8], I = [2 2 3] V = max(A); % V=[6 7 8]
Повний синтаксис функції max() можна дізнатися, набравши у командному вікні MatLab команду
Аналогічно працює функція min(), яка визначає мінімальне значення елемента вектора або матриці та його індекс.
Іншою корисною функцією роботи з матрицями та векторами є функція sum(), яка обчислює суму значень елементів вектора або стовпців матриці:
a = [3 5 4 2 1]; s = sum(a); % s = 3+5+4+2+1=15 A = [4 3 5; 6 7 2; 3 1 8]; S1 = sum(A); % S1=[13 11 15] S2 = sum(sum(A)); % S2=39
При обчисленні суми S2 спочатку обчислюється сума значень елементів матриці по стовпцях, а потім, по рядках. В результаті змінна S2 містить суму значень всіх елементів матриці А.
Для сортування значень елементів вектора або матриці за зростанням або зменшенням використовується функція sort() таким чином:
b1 = sort(a); % b1=[1 2 3 4 5] b2 = sort(a, ‘descend’); % b2=[5 4 3 2 1] b3 = sort(a, 'ascend'); % b3=[1 2 3 4 5]
A = [435; 6 7 2; 3 1 8]; B1 = sort(A); % B1=[3 1 2 % 4 3 5 % 6 7 8] B2 = sort(A, ‘descend’); % B2=[6 7 8 % 4 3 5 % 3 1 2]
У багатьох практичних завданнях часто потрібно знайтипевний елемент у векторі чи матриці. Це можна виконати за допомогою стандартної функції find(), яка як аргумент приймає умову, відповідно до якої і знаходяться необхідні елементи, наприклад:
a = [3 5 4 2 1]; b1 = find(a == 2); % b1 = 4 - індекс елемента 2 b2 = find (a
= 2); % b2 = [1 2 3 5] – індекси без 2 b3 = find(a > 3); % b3 = [2 3]
У наведеному прикладі символ == означає перевірку на рівність, а символ
=' виконує перевірку на нерівність значень елементів вектора. Докладніше про цих операторів буде описано у розділі умовні оператори.
Ще однією корисною функцією роботи з векторами та матрицями є функція mean() для обчислення середнього арифметичного значення, яка працює наступним чином:
a = [3 5 4 2 1]; m = mean(a); % m = 3 A = [4 3 5; 6 7 2; 3 1 8]; M1 = mean(A); % M1 = [4.333 3.667 5.000] M2 = mean (mean (A)); % M2 = 4.333
Структури в MatLab
p align="justify"> При розробці програм важливим є вибір ефективного способу подання даних. У багатьох випадках недостатньо оголосити просту змінну або масив, а потрібна гнучкіша форма подання даних. Таким елементом може бути структура, яка дозволяє включати різні типи даних і навіть інші структури. Структури задаються так:
де field1 – назва першого поля структури; VALUES1 – змінна першого поля структури і т.д.
У результаті визначається структура з трьома полями: title, author і year. Кожне поле має свій тип даних та значення.
Для того щоб записати в цю структуру конкретні значення використовується оператор '.' (точка) для доступу до того чи іншого поля структури:
S.title = 'Євгеній Онєгін'; S.author ='Пушкін'; S.year = 2000;
і таким чином, змінна S зберігає інформацію про вибрану книгу.
Однак за умовами завдання необхідно здійснювати запис не за однією, а за 100 книг. У цьому випадку доцільно використовувати вектор структур lib, який можна задати так:
та записувати інформацію про книги так:
lib(1).title = 'Євгеній Онєгін'; lib(1).author = 'Пушкін'; lib(1).year = 2000;
Цей приклад показує зручність зберігання інформації з книгам. Графічно масив структур можна у вигляді таблиці, у якій роль стовпців грають поля, а роль рядків елементи масиву структур (рис. 1.1).
Працюючи зі структурами корисними є такі функции:
isstruct( S ) – повертає істину, якщо аргумент структура isfield( S, 'name') – повертає істину, якщо є таке поле fieldnames( S ) – повертає масив рядків з іменами всіх полів
які дозволяють програмно визначити всю необхідну інформацію про ту чи іншу структуру та коректно виконувати обробку її полів.