MATLAB Language Пористі масиви. Числові масиви Двовимірний масив матлаб

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

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

формує масив чисел, який на екрані відобразиться так:

Числові масиви є елементами типу double. Як елементи масиву можна використовувати будь-які змінні типу double, тобто. речові чи комплексні числа, і навіть змінні, які є масивами. Для доступу до конкретного елементу або компоненту масиву потрібна деяка додаткова інформація. Така інформація надається індексним виразом масиву. Для звернення до якогось елементу масиву використовується операція індексації, що позначається круглими дужками:

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

Тепер масив a матиме такий вигляд:

Виконавши функцію length (ім'я), можна дізнатися, скільки елементів складається масив із зазначеним ім'ям. Наприклад:

>> length(a)

Надавши неіснуючому четвертому елементу, значення типу double, отримаємо масив, що збільшився на один елемент:

Якщо ж присвоїти значення типу double, наприклад, восьмому елементу, всі елементи з номерами в діапазоні від 4 до 8 будуть мати значення нуль.

>> a

a = 2 93 6 1 0 0 0 5

Розглянемо інший спосіб створення масивів за допомогою функцій ones і zeros, які одразу створюють масив потрібного розміру, заповнений відповідно одиницями (ones) або нулями (zeros). Наприклад, для створення масиву а можна спочатку викликати функцію ones:

>> a=ones(1,3)

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

>> a(2)=93;

Зрештою, останній спосібстворення одновимірних мас заснований на застосуванні операції ":". Ця операція застосовується у тому випадку, коли необхідно створити масив чисел, що змінюються із заданим крокам у міру збільшення індексу. Наприклад, необхідно створити масив чисел в інтервалі від 3 до 17 з кроком 0,7. Вираз матиме такий вигляд:

>> b=3:0.7:17

b = Columns 1 through 7

3.0000 3.7000 4.4000 5.1000 5.8000 6.5000 7.2000

Columns 8 through 14

7.9000 8.6000 9.3000 10.0000 10.7000 11.4000 12.1000

Columns 15 through 21

12.8000 13.5000 14.2000 14.9000 15.6000 16.3000 17.0000

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

>> c=

Цю ж матрицю можна сформувати горизонтальною конкатенацією векторів - стовпців;

>> c=[,]

Елементи матриці можна також ставити за допомогою функції cat, аргументи якої полягають у круглі дужки. Для вертикальної конкатенації її перший аргумент дорівнює 1:

>> c=cat(1,,,)

а для горизонтальної - дорівнює 2:

>> c=cat(2,,)

Розмір створеного масиву можна дізнатися за допомогою функції size:

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

Звідси видно, що у системі MATLAB всі змінні типу double представляються як двомірних масивів, саме: вектори - як двомірних масивів, розмір яких у одному з напрямів дорівнює одиниці; матриці - як двомірних масивів розміру m x n; скаляри - як двомірних масивів розміром 1x1.

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

>> A=

A = 1 2 3 4 5 6 7 8 9

>> A(3,:)=

Інформацію про всі створені масиви в поточному робочому просторі можна отримати, виконавши команду whos, наприклад:

Name Size Bytes Class

A 2x3 48 double array

a 1x4 32 double array

ans 1x2 16 double array

b 1x21 168 double array

c 3x2 48 double array

d 1x1 8 double array

У системі MATLAB існує операція транспонування, яка позначається знаком """ (апостроф). Нижче наведено приклад транспонування заданої матриціА:

>> A=

A =1 2 34 5 67 8 9

ans =1 4 7 2 5 8 3 6 9

В результаті застосування операції транспонування до вектор-рядку виходить вектор-стовпець, і навпаки. У наведеному нижче прикладі ці дії наочно проілюстровані:

>> a=

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

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

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

Малюнок - Схематичне зображення тривимірного масиву

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

Для формування в системі MATLAB необхідно спочатку виконати функцію ones або zeros:

>> T1=ones(M,N,L)

де М,N,L - розміри тривимірного масиву за трьома напрямками.

У цьому прикладі М=12 (кількість місяців на рік), N=31 (максимальна кількість днів на місяці), L=10 (кількість років, протягом яких виробляються: виміри). Тобто. функція матиме вигляд:

>> T1=ones(12,31,10)

>> T1 = zeros (12,31,10);

Потім за допомогою операцій індексації та привласнення можна задати значення кожного елемента

>> T1(1,1,1)=-5;T1(2,1,1)=-20;...T1(12,31,10)=-9;

Слід зазначити, що з допомогою функцій ones і zeros можна формувати лише одно-, двух- і тривимірні масиви.

Нехай у тривимірному масиві Т2 зібрані дані такого ж типу, що й у Т1, але для іншого міста. Після об'єднання даних обох масивів в одне ціле можна отримати чотиривимірний масив Т. Для створення слід використовувати другий спосіб виконання операції конкатенації - за допомогою функції cat:

T = cat (4, T1, T2)

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

Для конкатенації вздовж п'ятого напрямку (вимірювання), наприклад, якщо зібрані дані по містах з різних країн, треба спочатку створити чотиривимірний масив C (для міст з іншої країни), а потім об'єднати його з масивом Т:

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

reshape (X, m, n) – формує матрицю розміру m x n з елементів об'єкта X. Приклад.

>> X=

X = 1 2 3 4 5 6 7 8 9 10 11 12

>> B=reshape(X,3,4)

B = 1 10 8 6 4 2 11 9 7 5 3 122

rref(X) – наводить матрицю X до трикутної форми методом Гауса. приклад.

>> X=;

>> R=ref(X)

R = 1 0 -1 0 1 2 0 0 0 0 0 0

Операція двокрапка

У попередньому розділі ця операція використовувалася для створення масиву із заданим кроком:

<НЗМ>:<Шаг>:<КЗМ>

де<НЗМ>- Початкове значення масиву;<КЗМ>- Кінцеве значення масиву.

За такого завдання масивів діють такі правила:

Якщо крок не заданий, він приймається рівним 1 чи -1, відповідно до зазначеними правилами. Наприклад:

>> 1:7

ans = 1 2 3 4 5 6 7

>> 11:-3:2

ans = 11 8 5 2

Висловлювання з оператором «;» можуть також використовуватися як аргументи функцій для отримання безлічі значень цих функцій. Наприклад, наведений нижче приклад обчислено функції Бесселя порядку від 0 до 3 зі значенням аргументу х = 0.5.

>> B = bessel (0:3, x)

0.9385 0.2423 0.0306 0.0026

У цьому прикладі показано, як створити матрицю розміром 2x3, використовуючи оператор «;».

>> A=

Цей оператор також можна використовувати для індексації елементів наявного масиву, наприклад:

Таким чином, операція ";" є дуже зручним засобом завдання послідовності чисел і індексації масивів.

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

Нижче показаний приклад завдання вектора з ім'ям a, що містить значення 1, 2, 3, 4:

a =; % вектор-рядок

Для доступу до того чи іншого елемента вектора використовується така конструкція мови:

disp(a(1)); % відображення значення 1-го елемента вектора
disp(a(2)); % відображення значення 2-го елемента вектора
disp(a(3)); % відображення значення 3-го елемента вектора
disp(a(4)); % відображення значення 4-го елемента вектора

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

a(2) = 10; % зміна значення 2-го елемента на 10

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

N = length (a); % (N=4) кількість елементів масиву а

Якщо потрібно задати вектор-стовпець, це можна зробити так

a =; % вектор-стовпець

b = '; % вектор-стовпець

при цьому доступ до елементів векторів здійснюється як і для векторів-рядків.

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

a =; % Початковий вектор a =
b =; % другий вектор b =

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

a =; % збільшення вектора на один елемент

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

a1 = zeros (1, 100); % вектор-рядок, 100 елементів з
% нульовими значеннями
a2 = zeros (100, 1); % вектор-стовпець, 100 елементів з
% нульовими значеннями
a3 = ones (1, 1000); % вектор-рядок, 1000 елементів з
% одиничними значеннями
a4 = ones (1000, 1); % вектор-стовпець, 1000 елементів з
% одиничними значеннями
a5 = rand (1000, 1); % вектор-стовпець, 1000 елементів з
% випадковими значеннями

Матриці в MatLab задаються аналогічно векторам з тією різницею, що вказуються обидві розмірності. Наведемо приклад ініціалізації одиничної матриці розміром 3х3:

E =; % одинична матриця 3х3

E =; % одинична матриця 3х3

Аналогічно можна задавати будь-які інші матриці, а також використовувати наведені вище функції zeros(), ones() і rand(), наприклад:

A1 = zeros (10,10); % нульова матриця 10х10 елементів

A2 = zeros (10); % нульова матриця 10х10 елементів
A3 = ones (5); % матриця 5х5, що складається з одиниць
A4 = rand (100); % матриця 100х100, із випадкових чисел

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

A =; % матриця 3х3
disp(A(2,1)); % виведення на екран елемента, що стоїть у
% другий рядок першого стовпця, тобто. 4
disp(A(1,2)); % виведення на екран елемента, що стоїть у
% першому рядку другого стовпця, тобто. 2

Також можливі операції виділення зазначеної частини матриці, наприклад:

B1 = A(:,1); % B1 = – виділення першого стовпця
B2 = A(2,:); % B2 = – виділення першого рядка
B3 = A(1:2,2:3); % B3 = - Виділення перших двох
% рядків та 2-го та 3-го стовпців матриці А.

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

a = 5; % змінна а
A =; % вектор-рядок
B =; % матриця 2х3
size(a) % 1х1
size(A) % 1х3
size(B) % 2х3

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

Функція ndims(A)повертає розмірність масиву А (якщо вона більша або дорівнює двом). Але якщо вхідний аргумент - масив Java або масив Java, то незалежно від розмірності масиву ця функція поверне 2. Наступний приклад ілюструє застосування функції ndims:

> > M = rand(2: 3: 4: 5):

> > ndims(M)

Ans =

Обчислення розміру розмірності масиву

Для обчислення розміру кожної розмірності масиву використовується функція size:

  • М = size(A.DIM)повертає розмір розмірності, зазначеної скаляром DIM, у вигляді вектора-рядка розміром 2. Для двовимірного або одновимірного масиву А size(A.l) повертає число рядів, a size (А, 2) - число стовпців;

Для N-вимірних масивів А при n>2 size(A) повертає N-вимірний вектор-рядок, що відображає сторінкову організацію масиву, остання складова цього вектора дорівнює N. У векторі відсутні дані про одиничні розмірності (тих, де розташовані вектор-рядок або вектор-стовпець, тобто size (A, DIM) = = l). Виняток представляють N-мірні масиви Java масивів javaarray, які повертають розмір масиву найвищого рівня.

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

  • = size(A)повертає розмір перших N розмірностей масиву А;
  • D = size (А)для mxn матриці А повертає двоелементний вектор-рядок, в якому перша складова - число рядків т, а друга складова - число стовпців n;
  • = size(A)повертає число рядів та стовпців у різних вихідних параметрах (вихідних аргументах у термінології MATLAB) тип.

Перестановки розмірів масивів

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

  • permute (A, ORDER)- Переставляє розмірності масиву А в порядку, що визначається вектором перестановок ORDER. Вектор ORDER - одне з можливих перестановок всіх цілих чисел від 1 до N, де N - розмірність масиву А;
  • ipermute(A, ORDER)- операція, зворотна permute: permute(permute(A. ORDER), ORDER)=A

Нижче наводяться приклади застосування цих функцій та функції size:

> > A = [ 1 2: 3 4 ]:

> > B = [5 6; 7 8];

> > C = [ 9 10; 11 12];

> > D = cat(3 .A,B.C)

D(:,:, 1) =

1 2

3 4

9 10

11 12

> > size(D)

Ans =

2 2 3

> > size(permute(D.[ 3 2 1 ]))

Ans =

3 2 2

> > size(ipermute(D.[ 2 1 3 ]))

Елементи того самого класу часто можуть бути об'єднані в масиви (з декількома рідкісними винятками, наприклад, за допомогою функцій). Числові скаляри, за замовчуванням класу double можуть зберігатися в матриці.

>> A = A = 1.0e+04 * 0.0001 -0.0002 0.0003 0.0001 1.5625 0.0003 Inf Inf NaN -Inf

Символи, які мають клас char в MATLAB, можуть зберігатися в масиві з використанням аналогічного синтаксису. Такий масив подібний до рядка в багатьох інших мовах програмування.

>> s = ["MATLAB","is","fun"] s=MATLAB is fun

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

>> whos Name Size Bytes Class Attributes A 2x5 80 double s 1x13 26 char

Насправді масив s не є масивом рядків "MATLAB", "is" і "fun", це лише один рядок - масив з 13 символів. Ви отримаєте ті самі результати, якби вони були визначені одним із таких:

>> s = ["MAT","LAB","is f","u","n"]; >> s = ["M","A","T","L","A","B," ","i","s"," ","f","u", "n"];

Звичайний вектор MATLAB не дозволяє зберігати поєднання змінних різних класів або кілька рядків. Тут масив cell знадобиться. Це масив осередків, кожен з яких може містити певний об'єкт MATLAB, клас якого може бути різним у кожному осередку, якщо це необхідно. Використовуйте фігурні дужки ( та ) навколо елементів для зберігання у масиві осередків.

>> C = (A; s) C = "MATLAB is fun" >> whos C Name Size Bytes Class Attributes C 2x1 330 cell

Стандартні об'єкти MATLAB будь-яких класів можуть зберігатися разом у масиві осередків. Зверніть увагу, що масиви осередків вимагають більше пам'яті для зберігання вмісту.

Доступ до вмісту осередку здійснюється за допомогою фігурних дужок (і).

>> C(1) ans = 1.0e+04 * 0.0001 -0.0002 0.0003 0.0001 1.5625 0.0003 Inf Inf NaN -Inf

Зауважимо, що C(1) відрізняється від C(1). Беручи до уваги, що останній повертає вміст осередку (і має приклад із double прикладом), перший повертає масив осередків, який є підматрицею C Точно так само, якщо D було масивом з 10 на 5 осередків, тоді D(4:8,1: 3) поверне підматрицю D, розмір якої дорівнює 5 на 3, а клас - cell. І синтаксис C(1:2) не має одного поверненого об'єкта, але rater він повертає 2 різних об'єкти (аналогічно функції MATLAB з декількома значеннями, що повертаються):

>> = C(1:2) x = 1 -2 3.14 0.8 15625 3.14159265358979 Inf Inf NaN -Inf y = MATLAB is fun

Мова технічних обчислень

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

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

Початок роботи

Вивчіть основи MATLAB

Основи мови

Синтаксис, індексація та обробка масиву, типи даних, оператори

Імпорт та аналіз даних

Імпорт та експорт даних, у тому числі і великих файлів; попередня обробка даних, візуалізація та дослідження

Математика

Лінійна алгебра, диференціювання та інтегрування, перетворення Фур'є та інша математика

Графіка

2D та 3D графіки, зображення, анімація

Програмування

Скрипти, функції та класи

Створення додатків

Розробка програм за допомогою App Designer, програмованого робочого процесу або GUIDE

Інструменти розробки програмного забезпечення

Налагодження та тестування, організація великих проектів, інтеграція із системою контролю версій, упаковка тулбоксів