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

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

Елементи того самого класу часто можуть бути об'єднані в масиви (з кількома рідкісними винятками, наприклад, за допомогою функцій). Числові скаляри, за умовчанням класу 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

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

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

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

Масив – упорядкована, пронумерована сукупність однорідних даних. У масиву має бути ім'я. Масиви розрізняються за кількістю розмірностей чи вимірів: одномірні, двовимірні, багатовимірні. Доступ до елементів здійснюється за допомогою індексу. У MatLab нумерація елементів масивів починається з одиниці. Це означає, що індекси повинні бути більшими або рівними одиниці.

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

Введення додавання та віднімання векторів

Роботу з масивами почнемо з простого прикладу - обчислення суми векторів:
, .

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

» a =
a =
1.3000
5.4000
6.9000

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

»b =;

Для знаходження суми векторів використовується знак +. Обчисліть суму, запишіть результат до масиву і виведіть його елементи в командне вікно:

» с = а + b
с =
8.4000
8.9000
15.1000

Дізнайтеся розмірність і розмір масиву, а за допомогою вбудованих функцій ndims і size:

» ndims(a)
ans =
2
» size(a)
ans =
3 1

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

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

» s1 =
s1 =
3 4 9 2
» s2 =
s1 =
5 3 3 2
» s3 = s1 + s2
s3 =
8 7 12 4

Зауваження 1

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

Природно, для знаходження різниці векторів слід застосовувати знак мінус, з множенням справа трохи складніша.
Введіть два векторні рядки:

»v1 =;
»v2 =;

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

» u = v1.
u =
14 -15 -24 9

За допомогою. здійснюється поелементне зведення в ступінь:

» р = v1.
p =
4 9 16 1

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

» p = vl.
Р =
128.0000 -243.0000 0.0002 1.0000

Розподіл відповідних елементів векторів однакової довжини виконується з використанням операції.

» d = v1./v2
d =
0.2857 -0.6000 -0.6667 0.1111

Зворотний поелементний поділ (розподіл елементів другого вектора на відповідні елементи першого) здійснюється за допомогою операції.\

» dinv = vl.
dinv =
3.5000 -1.6667 -1.5000 9.0000

Отже, точка MatLab використовується не тільки для введення десяткових дробів, але і для вказівки того, що поділ або множення масивів однакового розміру має бути виконано поелементно.
До поелементних відносяться операції з вектором і числом. Складання вектора та числа не призводить до повідомлення про помилку. MatLab додає число кожного елемента вектора. Те саме справедливо і для віднімання:

»v =;
» s = v + 1.2
s =
5.2000 6.2000 9.2000 11.2000
»r = 1.2 - v
r =
-2.8000 -4.8000 -6.8000 -8.8000
»r1 = v - 1.2
r1 = 2.8000 4.8000 6.8000 8.8000

Помножувати вектор на число можна як праворуч, так і зліва:

»v =;
» p = v * 2
р =.
8 12 16 20
» pi = 2 * v
pi =
8 12 16 20

Ділити за допомогою знака / вектор можна на число:

» р = v/2
p =
2 3 4 5

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

» р = 2/v
??? Error using ==> /
Matrix dimensions must agree.

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

» w =;
»d = 12./w
d =
3 6 2

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

» d = sin(с)
d =
0.8546
0.5010
0.5712

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

» sqrt(-d)
ans =
0 + 0.9244i
0+0.7078i
0+0.7558i

Оператор присвоєння не використовувався, тому пакет MatLab записав відповідь до стандартної змінної ans.

Для визначення довжини вектор-стовпців або вектор рядків служить вбудована функція length:

» length(s1)
ans =
4

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

»v1 =;
»v2 =;
» v =
v =
1
2
3
4
5

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

»v1 =;
»v2 =;
» v =
v =
1 2 3 4 5

Робота з елементами векторів

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

»v =;

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

» v(4)
ans =
8.2000

Поява елемента масиву в лівій частині оператора присвоєння призводить до зміни масиву

» v (2) = 555
v =
1.3000 555.0000 7.4000 8.2000 0.9000

З елементів масиву можна формувати нові масиви, наприклад

»u =
u =
7.4000
555.0000
1.3000

Для розміщення певних елементів вектора до іншого вектора в заданому порядку служить індексація за допомогою вектора. Запис до масиву wчетвертого, другого та п'ятого елементів vпровадиться наступним чином:

» ind =;
» w = v (ind)
w =
8.2000 555.0000 0.9000

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

» w =;
» w (2: 6) = 0;
» w
w =
0.1000 0 0 0 0 0 9.8000

Привласнення w(2:6) = 0 еквівалентно послідовності команд
w(2) = 0; w(3)=0; w(4)=0; w(5)=0; w(6)=0.
Індексація за допомогою двокрапки виявляється зручною при виділенні частини з великого обсягу даних до нового масиву:

»w -;
» wl = w(3:5)
wl =
3.3000 5.1000 2.6000

Складіть масив w2, що містить елементи w крім четвертого. У цьому випадку зручно використовувати двокрапку та зчеплення рядків:

» w2 =
w2 =
0.1000 2.9000 3.3000 2.6000 7.1000 9.8000

Елементи масиву можуть входити до виразів. Знаходження, наприклад, середнього геометричного з елементів масиву u, можна виконати так:

» gm = (u (l) * u (2) * u (3)) ^ (l / 3)
gm =
17.4779

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

Застосування функцій обробки даних до векторів

Перемноження елементів вектора-стовпця або вектора рядка здійснюється за допомогою функції prod:

» z = ;
» р = prod(z)
p = 720

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

» sum(z)/length(z)
ans =
3.5000

У MatLab є спеціальна функція mean для обчислення середнього арифметичного:

» mean(z)
ans =
3.5000

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

» m1 = max(z)
m1 =
6
» m2 ​​= min(z)
m2 =
1

Часто необхідно знати як значення мінімального чи максимального елемента в масиві, а й його індекс (порядковий номер). У цьому випадку вбудовані функції min та max необхідно використовувати з двома вихідними аргументами, наприклад

» = min(z)
m =
1
k =
3

В результаті змінної m буде надано значення мінімального елемента масиву z, а номер мінімального елемента занесений до змінної k.
Для отримання інформації про різні способи використання функцій слід набрати командний рядок help та ім'я функції. MatLab виведе у командне вікно всілякі методи звернення до функції з додатковими поясненнями.
До основних функцій для роботи з векторами входить функція впорядкування вектора за зростанням його елементів sort.

»r =;
» R = sort(r)
R =

Можна впорядкувати вектор за спаданням, використовуючи цю ж функцію sort:

» R1 = -sort(-r)
R1 =
9.4000 7.1000 1.3000 0.8000 -2.3000 -5.2000

Упорядкування елементів у порядку зростання їх модулів здійснюється із залученням функції abs:

» R2 = sort(abs(r))
R2 =
0.8000 1.3000 2.3000 5.2000 7.1000 9.4000

Виклик sort з двома вихідними аргументами призводить до утворення масиву індексів відповідності елементів упорядкованого та вихідного масивів:

» = sort(r)
rs =
-5.2000 -2.3000 0.8000 1.3000 7.1000 9.4000
ind =
3 2 5 6 4 1

ТЕМА 5. ПРОГРАМНА РЕАЛІЗАЦІЯ МАТЕМАТИЧНИХ МОДЕЛЕЙ
Сучасні математичні моделі є складними й у виконання розрахунків із них потрібно використовувати ЕОМ. Тому алгоритми або методи розрахунку, наведені в попередньому розділі, слід перекласти будь-якою мовою програмування. В даний час для наукових розробок популярними є мови типу ФОРТРАН, СІ, ПАСКАЛЬ. Але для широкого кола користувачів ці мови вважаються складними і тому велике поширення набули більш зрозумілі фахівцям предметної галузі системи типу EXCEL, MATLAB, MATHCAD, MAPLE тощо. Ми орієнтуватимемося на систему MATLAB, яка використовується на лабораторних роботах цього навчального курсу.
^ 5.1 Коротка характеристика MATLAB
Система MATLAB (скорочення від MATrix LABoratory – МАТРична ЛАБораторія) розроблена фірмою The MathWorks, Inc. (США, м. Нейтик, штат Массачусетс) та є інтерактивною системою для виконання інженерних та наукових розрахунків, яка орієнтована на роботу з масивами даних, дозволяє звернення до програм, написаних мовами Fortran, C++. Система підтримує виконання операцій з векторами, матрицями та масивами даних, підтримує роботу з алгебраїчними поліномами, розв'язання диференціальних та різницевих рівнянь, розв'язання нелінійних рівнянь та задач оптимізації тощо, а також побудова різних видів графіків, тривимірних поверхонь та ліній рівня.

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

Для створення нової програми у меню ^ Fileвибираються опція Newі потім M-File;у результаті відкривається вікно редактора М-файлів. У цьому вікні набирається текст програми. Після того як цей текст набраний, слід зберегти програму з якимось ім'ям (для цього в меню Fileвибирається опція Save as).

Для виконання програми слід перейти у командне вікно та в командному рядку, що позначається на екрані символами >> набрати ім'я М-файлу.

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

^

Формування масивів у системі MATLAB

У системі MATLAB основним об'єктом є масиви (матриці та вектора), для яких не потрібно явно вказувати розмірності. Для формування числового масиву числа вказуються всередині квадратних дужок, роздільник між числами – прогалини. Для відокремлення рядків матриць використовується символ ; . приклад.

Матриця А = із 3 ліній і 2 стовпців записується як: А = .

Для формування масивів використовується символ : . приклад.

Задати вектор З, Що складається з чисел від 0 до 0,5 з кроком 0,1: = 0: 0.1: 0.5. На екрані з'явиться рядок:

З = 0 0.1 0.2 0.3 0.4 0.5

Якщо крок дорівнює 1, то він не задається, наприклад, для завдання вектора, що складається з чисел 3, 4, 5, 6, 7, можна записати: В = 3: 7. Тоді на екрані з'явиться:

В = 3 4 5 6 7
Символ : використовується також виділення підблоки масиву. приклад. Виділити у матриці А = перший стовпець: А ( : , 1).
Масиви можна поєднувати. Нехай x= 1, 2, 3, 4, а y= 5, 6, 7, 8. Тоді фрагмент програми формування об'єднаного масиву zбуде наступний:

x = 1:4;

y = 5:8;

z = [x; y]

на екрані з'явиться: z =

Арифметичні операції.Використовуються арифметичні оператори додавання + , віднімання , множення * , поділу / , зведення в ступінь ^.

p1) . ′ поелементне транспонування (рядки замінюються стовпцями, для комплексних

матриць комплексне сполучення не виконується).

Наприклад, нехай A = , тоді A . ′ = .

p1) .^ поелементне зведення в ступінь, А . ^B.

Наприклад, нехай A = , тоді A . ^2 =
.

p1) ′ - транспонування матриці. Для комплексних матриць транспонування доповнюється

комплексним поєднанням.

Наприклад, нехай A = , тоді А′ =
.

p1) ^ зведення матриці в ступінь, А^р (тільки для квадратних матриць і цілих чисел p). Наприклад, нехай матриця A =
. Тоді A^2 =

p2) .* поелементне перемноження двох масивів однакового розміру
Наприклад, нехай A =
B =
тоді А . *В =

На скаляр множаться всі елементи масиву, наприклад, хай A = . Обчислити F = 3 * A. Отримаємо F =
.
p2) * множення матриць, А*В.

Наприклад, хай A = B = . Тоді А * В =
.
p2) ./ поелементний поділ масивів. Масиви мають бути однакових розмірів або масив поділяється на скаляр. Наприклад, хай A = . Тоді B ./ 3 = .
p3) + додавання та - віднімання для скалярів, векторів та матриць.

Наприклад, нехай A =
та B =
. Тоді А - В =
.

PS: Операції типу p1 виконуються раніше ніж p2, а p2 раніше, ніж p3. Усередині кожного рівня пріоритет однаковий, обчислення виконуються ліворуч-праворуч. Можна ставити круглі дужки, щоб визначити необхідний порядок операцій

^

Деякі спеціальні символи

() - Вказівка ​​послідовності виконання операцій. Приклади:

a) задати масив xвід 0 до 3 з кроком 0.1 і подати у вигляді стовпця: x=(0: 0.5: 2)′

b) обчислити
: y=(x+0.5)/2
- формування масивів (див. розділ “Формування масивів у системі MATLAB”)
% - З цього символу починаються коментарі. Вони можуть бути у вигляді окремих рядків або слідувати після кожної з команд.
; цей символ використовується: a) для придушення виведення на екран результатів обчислень; b) відділення рядків матриць.
: - цей символ використовується для формування векторів, а також виділення рядків або стовпців масиву.
pi - Число π = 3,141592653897
ans - результат виконання операції у тому випадку, якщо вихідна змінна не вказана (у цьому випадку MATLAB використовує змінну ans).
inf - цей символ з'являється на екрані, коли при обчисленні в одному з осередків переповнюється розрядна сітка (фактична ∞). Наприклад, при виконанні операції розподілу на нуль.
NaN - спеціальна змінна для позначення невизначеного значення, результату операцій типу: 0/0, inf/infі т.д.

^

Елементарні математичні функції

abs- абсолютне значення, наприклад, нехай x= [-2 4 -8.5], тоді abs ( x) = .

sin, cos, tanі т.д. - Тригонометричні функції, аргументи (кути) задаються в радіанах. Наприклад, t= cos( x);

ехр- експоненційна функція ( e x), наприклад: y= exp ( x);

log- натуральний логарифм, наприклад: c= log ( d);

log10– десятковий логарифм, наприклад, z= log10 ( y);

sqrt -квадратний корінь, наприклад: b= sqrt( a);
Деякі графічні функції
figure- Функція для відкриття графічного вікна на екрані
xlabel, ylabel- функції для найменування осей x та y
title- функція розміщення заголовка над графіком
plot (x, y)- функція для побудови двовимірного графіка залежності y = f(x)у декартових координатах (тип маркера, колір та тип лінії на графіку вибирається автоматично);
plot (x1, y1, LineSpec1, x2, y2, LineSpec2,...)- функція для побудови на графічному вікні кількох залежностей із завданням для кожної лінії маркера, кольору та типу лінії.
polar(x,y)- функція для побудови залежності y = f(x)у полярних координатах.
meshgrid(x, y)- функція задає прямокутну сітку на площині ( x, y) у вигляді двовимірних масивів, які визначаються заданими векторами xі y.

Приклад: [ X,Y] = meshgrid(1:0.5:2,10:14). В результаті отримуємо:

X = 1 1.5 2 Y = 10 10 10

1 1.5 2 11 11 11

1 1.5 2 12 12 12

1 1.5 2 13 13 13

1 1.5 2 14 14 14
mesh (x, y, z)- функція виводить на екран тривимірну сітчасту поверхню залежності z = f(x, y).

surf(x,y,z)- функція виводить на екран суцільну сітчасту поверхню залежності z = f(x, y).

^

Інтерактивний доступ до довідкової інформації та документації


Існують кілька способів отримання інформації про функції системи MATLAB.

1 . Команда help ім'я_функції. Набирається безпосередньо у командному вікні MATLAB Command Window. Наприклад: help sin.

2 . Меню HELPКомандне вікно. Це меню дає повну довідкову інформацію про систему MATLAB, містить більше подробиць та прикладів, ніж за командою help. Користувач може ознайомитися з повною документацією по системі MATLAB (підменю Contents) або відкрити список усіх функцій в алфавітному порядку (підменю Index) або організувати пошук на ім'я (підменю Search). Також є можливість відкрити список функцій за категоріями (MATLAB Functions Listed by Category), відкрити список прикладів за категоріями (Index of Documentation Examples) та інші можливості.
^

Приклади:

a) Знайти функції лінійної алгебри. Відкриваємо послідовність вікон:

HELP – MATLAB Help - Finding Functions and Properties - Matlab Functions Listed by Category – Mathematics – Linear Algebra

b) Знайти графічні функції для побудови графіків:

HELP – MATLAB Help - Finding Functions and Properties - Matlab Functions Listed by Category- Graphics – Basic Plots and Graphs.
3 . Ще один спосіб отримати інформацію про систему MATLAB – звернення до Web-сервера фірми The MathWorks.

^

5.2 Завдання лінійної алгебри, обчислення функцій та побудова графіків

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

Приклад1. Помножити вектор
на вектор
.

Як відомо при множенні векторів перший вектор повинен бути рядком, а другий вектором-стовпцем і вони повинні мати однакові розмірності. Тому рішення записується у вигляді
a =

b =

c = a*b
Або
a =

b = ′

c = a*b
% Відповідь: з = 12.
PS: Якщо записати b= , Розрахунок не виконується, т.к. bбуде інтерпретований як вектор-рядок.
Приклад2. Помножити матрицю
на матрицю
.

Для коректного виконання цієї операції число елементів у рядках матриці А має дорівнювати числу елементів у стовпцях матриці B. Програма запишеться у вигляді:
a = ;

b = ;

На екрані з'явиться:

Приклад3. Розв'язати систему лінійних рівнянь

У матричній формі ця система набуде вигляду: А*x = B, де:

Тоді рішення запишеться у вигляді:
^ A= % задаємо матрицю коефіцієнтів при невідомих

B= % задаємо вектор вільних членів

X=A\B% рішення системи (Відповідь: х 1 =5, х 2 = 3, x 3 = 2)
Символ \ застосовується для вирішення систем лінійних рівнянь АХ = В.
Приклад 4. Для матриці А(див. приклад 3) знайти детермінант та зворотну матрицю ( A-1) і порахувати твір E = A A-1. Рішення:
A=

C = det(A) %det – функція обчислює детермінант заданої матриці

D = inv(A) %inv - функція обчислює матрицю, обернену до заданої

Відповідь: З = -6; E = 1.0000 00

0.0000 1.0000 0.0000

0.0000 -0.0000 1.0000

У математичних моделях часто потрібно обчислити значення виразів типу y = f(x)при різних значеннях xа потім подати ці залежності в графічній формі. У системі MATLAB такі завдання вирішуються просто. Нижче наведено приклади.
^

Приклад 5. В інтервалі х= обчислити значення:

y = e xі z = 1 + x + x 2 /2 + x 3 /6 + x 4 /24

для рівномірно розташованих 31 пікселів. Побудувати залежності y = f(x)і z = f(x)на одному графіку (декартові координати). Значення x, y, zна екран не виводити.

Рішення запишеться у вигляді:
x = (0: 0.1: 3)"; задаємо значення хв інтервалі від 0 до 3 із кроком 0.1

y = exp (x); обчислюємо значення вектора у

z = 1.0 + x + (x. ^ 2) / 2 + (x. ^ 3) / 6 - (x. ^ 4) / 24; обчислюємо значення вектора z

figure відкриваємо графічне вікно

plot(x,y,"-g",x,z,"-k") будуємо графік функції y = cos(x)

xlabel("coordinata x") даємо назву для осі x

ylabel(" coordinata y ’) даємо назву для осі y

title("y=exp(x)"); даємо заголовок для графіка
Приклад 6. В інтервалі х = обчислити значення y = 0,5 ln (x + 1)для рівномірно розташованих 101 пікселів. Побудувати залежність y = f(x) у полярних координатах.
x= (0: pi/10: 10*pi)';

y = 0.5 * log ( x + 1);

polar( x, y); будуємо графік функції y = 0,5ln(x+1)
MATLAB дозволяє легко будувати тривимірні графіки, тобто. залежності типу z = f(x, y), Що показано в наступному прикладі.

Приклад 7. Побудувати поверхню
при х= -1 до +1 з кроком 0,2 та при y= -1 до +1 із кроком 0,2.

Рішення завдання:
[x, y]=meshgrid([-1:0.2:1]);

z=x.*exp(- x.^2 - y.^2);

mesh( x,y,z);

surf( x,y,z);

PS: графічні функції описані вище у розділі “Деякі графічні функції”.

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

приклад 8.Вирішити рівняння
з початковим наближенням x 0 = 5 і з виведенням ітерацій на екран:

Рішення завдання:
function ex1

options = optimset("Display", "iter");

Fzero(@f, 5, options)

function y = f(x)

y = x.^3-2*x-5;
PS: Перші 3 оператори – основна програма, 2 останні оператори – це функція, що визначає залежність
при різних значеннях х.

Нижче наведено короткі описи функцій MATLAB, які використовуються під час вирішення задачі.
fzero (@ім'я функції, x 0 , options)- Пошук нуля функції однієї змінної. Рішення шукається на околиці заданої точки x 0 шляхом пошуку інтервалу, де функція змінює знак. Якщо такий інтервал не перебуває, то повертається Infчи NaN. Параметр optionsможе задавати висновок проміжних результатів (ітерацій) на екран та точність розрахунку.
optimset("Display", "iter") – функція для виведення ітерацій на екран.
- виводить шукане рішення та значення функції, що відповідає цьому рішенню.
Докладніше ознайомитися з функціями, що використовуються, можна за HELP MATLAB.
Приклад 9. Розв'язати систему рівнянь:

(5.1)

з початковими наближеннями x 0 = 2,5; y 0 = 0,5 та c виведенням ітерацій на екран.

Для вирішення праві частини рівнянь переносимо у ліві частини

, (5.2)

так, щоб у правих частинах залишилися нулі. Потім шукаємо мінімум функції, що з суми цих рівнянь, зведених у квадрат: . Оскільки сума квадратів завжди позитивна кількість, то мінімум функції може бути менше 0, а досягнення значення f= 0 означає, що величини xі y, що відповідають цьому значенню, досягають шуканих рішень системи (5.2).

Рішення завдання:
function ex2

options = optimset ("Display", "iter");

Fminsearch (@eq1, , options)

function f = eq1(x)

f = (x(1).^2 + x(2).^2 - 9).^2 + (x(1) + sin(x(2)) - 3).^2
PS: Між невідомими в рівняннях (5.1) та змінними програми є відповідність: x = x(1), y = x(2).

Функція MATLAB, що використовується під час вирішення задачі:
fminsearch (@ім'я функції, [початкові наближення змінних ], options)– функція пошуку мінімального значення функції багатьох змінних.
^ Апроксимація функції

Апроксимація таблично заданої функції поліномом n-ого ступеня виконується методом найменших квадратів (див. пункт 2.4).
Приклад 10. Виконати апроксимацію точково заданої функції x= 0 до 0.7 з кроком 0.1, y= 0.22 0.428 0.604 0.74 0.84 0.91 0.95 0.98 поліномом другого ступеня. Побудувати графіки точково заданої функції та апроксимуючого полінома:
Рішення завдання:
x=(0:0.1:0.7)" % масив xскладається з 8 чисел

y= "% масив yскладається з 8 чисел

p=polyfit(x,y,2)

table=

plot (x, y, "k *", x, f, "-g")

xlabel("coordinata x")

ylabel("coordinata y’)

title( "Grafiki y(x), f(x)")
PS: Кількість чисел у масивах xі yмає бути однаковим; table- Ім'я масиву, сформованого з 4-х векторів: x, y, fі ( y-f). Загалом у цьому масиві 8 4 = 32 числа. Масив fтакож містить 8 чисел
polyfit (x, y,ступінь полінома) - функція знаходить коефіцієнти a iполінома p(x)ступеня n, що апроксимує задану функцію y(x):
p(x) = a 1 x n + a 2 x n – 1 + … + a n x + a n+1
polyval(p, x) - функція для обчислення значень полінома pу заданих точках x.

^ 5.4 Вирішення звичайних диференціальних рівнянь та обчислення інтегралів
У системі MATLAB за допомогою стандартних функцій легко вирішуються прості диференціальні рівняння (завдання Коші) та обчислюються певні інтеграли.

Приклад 11. Вирішити диференціальне рівняння, використовуючи стандартну функцію ode45:

(5.3)
в інтервалі x= 0 до 30 при y(0)= 2 для a = 0,24.

Попередньо представимо рівняння (5.3) системою рівнянь:

(5.4)

при початкових значеннях: y 1 (0) = 0; y 2 (0) = 2, щоб виключити з правої частини (5.3) незалежну змінну x.
Рішення завдання.
function ex_eqdif

Ode45(@dif1,,);

function dy = dif1 (t, y)

% pravie chasti difderensial. uravneniy

dy(2)=cos(y(1))-sin(y(1))-alfa*y(2);
PS: Функція dif1(t,y) визначає праві частини рівнянь (5.4). Між невідомими в рівняннях (5.4) та змінними програми є відповідність: x = y(1), y = y(2).
ode45 (@ ім'я функції , [ інтервал інтегрування ], [ початкові умови ] ) - функція служить на вирішення звичайних нежорстких диференціальних рівнянь шляхом Runge-Kutta 4-го порядку.
zeros(m,n)- функція формує масив нулів розміру
(де m- Число рівнянь, n=1).
global- Оператор оголошує глобальні змінні. Якщо замість змінної alfa в праві частини підставити число, глобальну змінну вводити не треба.
Приклад 12. Вирішити систему рівнянь Лотка-Волтерра за допомогою функції ode23:

(5.5)
при х=0 до 10 та початкових умовах: y 1 (0) = 1; y 2 (0) = 1. Параметри = 0.01 та = 0.02 поставити як світові величини. Побудувати графіки функцій y 1 (x), y 2 (x)).
Рішення завдання.
function Lotka_Volterra

global alpha beta

alpha = 0.01; beta = 0.02;

Ode23(@lotka,,);

plot(t,y); %Побудова графіків y 1 (t)і y 2 (t)

function dy=lotka(t,y)

global alpha beta

dy(1)=y(1)-alpha*y(1)*y(2);

dy(2)=-y(2)+beta*y(1)*y(2);
PS: Функція lotka(t,y) визначає праві частини рівнянь (5.5). Між невідомими в рівняннях (5.5) та змінними програми є відповідність: y 1 = y(1), y 2 = y(2).
ode23 (@ ім'я функції , [ інтервал інтегрування ], [ початкові умови ] ) - функція служить на вирішення звичайних нежорстких диференціальних рівнянь шляхом Runge-Kutta низького порядку.
^ Обчислення інтегралів
Приклад 13. Обчислити інтеграл:

(5.6)
за методом Сімпсона (стандартна функція quad) та побудувати графік підінтегральної функції в інтервалі х= з кроком 0,1.

Рішення завдання:
function int1

y=1./(x.^3-2*x-5);

plot(x, y); %Побудова графіка y(x)

Q = quad (@ myfun, 0,2)

function y = myfun(x)

y = 1./(x.^3-2*x-5);
PS: Підінтегральна функція обчислюється у функції myfun(x) при різних значеннях х
quad(@ім'я_підінтегральної_функції, a, b)- чисельне обчислення інтеграла за адаптивним методом Сімпсона, де: a та b – межі інтегрування.

Приклад 14. Обчислити інтеграл:

(5.7)
за методом Сімпсона (стандартна функція quad) при y= 10 o (перетворити градуси на радіани). Для величини yу програмі використовувати глобальну змінну.
Рішення завдання.
function int2

Q = quad (@ myfun, 0, pi / 2);

function y = myfun(x)

y=1./sqrt(1-(sin(teta)*sin(x)).^2);
PS: Величині yу програмі відповідає глобальна змінна teta. Значення інтеграла отримуємо змінної Q.

^

Контрольні питання

1. Що таке скаляр, вектор, матриця? Дайте визначення та приклади.
2. Які дії можна проводити з векторами та матрицями? Навести приклади.
3. Як у MATLABі формуються масиви: одновимірні та двовимірні? Надати приклади.
4. Дайте визначення транспонованого вектора та транспонованої матриці. Як вони формуються у MATLABі? Навести приклади.
5. Дайте визначення детермінанту та зворотній матриці. Як вони обчислюються в Matlab? Навести приклади.
6. Елементарні функції та їх запис у MATLABі. Навести приклади.
7. Виконати вручну (без допомоги комп'ютера) такі дії:

Помножити вектор P на вектор Y;

Помножити матрицю G вектор Y;

Помножити матрицю G на матрицю F,


8. Написати програму на MATLAB для виконання дій, зазначених у питанні 7.

9. Дана матриця
. Визначити без допомоги комп'ютера зворотну матрицю – A -1 .

10. Знайти без допомоги комп'ютера детермінант матриці
.

11. Дана система лінійних рівнянь:
(1P)

або в матричному вигляді Cּ X= B.

Скласти на MATLAB програму вирішення цієї системи з визначенням детермінанта матриці З.
12. Знайти за допомогою MATLABа матрицю, обернену до матриці З(З питання 11). Як за допомогою матриці З-1 знайти невідомі x 1 , x 2 , x 3 , x 4 із системи (1P)?
13. Вирішити за допомогою MATLABа систему рівнянь
(2P)

Знайти причину невдачі, якщо система (2P) не вирішується. Визначити детермінант матриці коефіцієнтів за невідомих.
14.Для умов питання 7 написати на MATLAB програму:

Розмноження 1-го рядка матриці G на 2-й стовпець матриці F;

Множення 2-го рядка матриці F на 2-й стовпець матриці G.
15. За допомогою MATLAB для залежності довжини гальмівного шляху ^ S(м) у функції від швидкості V f(м/с):

де швидкість задана в інтервалі V f= 10…40 (крок за швидкістю дорівнює 2м/с), побудувати графіки залежностей: S = f(V f ) і V f = φ(S).
16. Розв'язати графічно (за допомогою MATLABа) рівняння:

(3P)

в інтервалі x= 0 ... 10? з кроком 0,1?. Скільки коренів має рівняння (3P)?
17. За допомогою MATLABа в декартових координатах побудувати коло з центром у точці x = 1, y= 1 і радіусом, що дорівнює 1. По осі xвибрати крок Δ x= 0,05.
18. За допомогою MATLABа побудувати залежність y = ln(x + 1)у декартових координатах в інтервалі x= 0…4π з кроком 0,2π, і навіть залежність r = ln(φ + 1)у полярних координатах у тому ж інтервалі і з тим самим кроком по φ .
19. За допомогою MATLAB на одному графіку в полярних координатах з кроком
= 0,1 в інтервалі побудувати залежності (спіралі з трьома оборотами):
а) r = 0,4φ + 0,03φ 2 (4P)

b) залежність (4Р), але закручену у зворотному напрямку.
20. За допомогою MATLABа побудувати 3-мірну поверхню:

в області [ x, y] = [-1:0,1:1] [-2:0,1:2].
21. За допомогою MATLABа побудувати 3-мірну поверхню:

в області [ x, y] = .
22. За допомогою MATLABа використовуючи програму fzero
x 0 = 2км; x f= 8км.
27. Дано табличну залежність споживання пального (для легкового автомобіля) від часу експлуатації.

polyfit, polyval) знайти апроксимуючу залежність G = f(t)поліномом 3-го ступеня та визначити середню помилку апроксимації.
28. Дана таблична залежність вартості легкового автомобіля від часу експлуатації.


t(Рік)

0

1

2

3

5

7

10

C ($)

11500

8700

7200

6000

5500

5000

4600

За допомогою пакету MATLAB (функції polyfit, polyval) знайти апроксимуючі залежності C = f(t)поліномами 2-го та 3-гоступеня і порівняти максимальні помилки апроксимації.
29. За допомогою MATLAB (функція ode45

(5P)
в інтервалі x= 0…2 за початкових умов: x 0 = 0, y 0 = 1. Попередньо рівняння (5P) перетворити на систему 2-х диференціальних рівнянь.
30. За допомогою MATLAB (функція ode23) Розв'язати звичайне диференціальне рівняння:

(6P)
в інтервалі x= 0…5 за початкових умов: x 0 = 0, y 0 = 2. Попередньо рівняння (6P) перетворити на систему 2-х диференціальних рівнянь.
31. За допомогою MATLAB (функція ode45

в інтервалі t= 0…8π за початкових умов: t =0; x 0 = 1; y 0 = 1.
32. За допомогою MATLAB (функція ode45) Розв'язати систему звичайних диференціальних рівнянь:

в інтервалі = 0,3…4 за початкових умов: = 0,3; x 0 = 1; y 0 = 0.
33. За допомогою MATLAB (функція ode23) Розв'язати звичайне диференціальне рівняння:

(7P)

в інтервалі t= 0…3c за початкових умов: t = 0, r 0 = 0,
та ω = 2π (рад/с). Попередньо рівняння (7P) перетворити на систему диференціальних рівнянь першого порядку.

Урок №13.

Багатовимірні масиви

    Поняття про багатовимірні масиви

    Застосування оператора «:» у багатовимірних масивах

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

    Видалення розмірності у багатовимірному масиві

    Створення сторінок, заповнених константами та випадковими числами

    Об'єднання масивів

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

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

    Зсув розмірностей масивів

    Видалення одиничних розмірностей

У цьому уроці ми торкнемося питань, пов'язаних із складнішими типами даних, до яких належать багатовимірні масиви.

Поняття про багатовимірні масиви

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

У нашій літературі поняття «розмір» та «розмірність» масивів є майже синонімами. Однак вони мають явно різний зміст у цій книзі, як і в документації та літературі у системі MATLAB. Під розмірністюмасивів розуміється число вимірів у просторовому поданні масивів, а під розміром -число рядків та стовпців (mxn) у кожній розмірності масиву.

Застосування оператора «:» у багатовимірних масивах

При звичайному завданні масивів (за допомогою символу точки з комою «;») число рядків (рядків) масиву виходить на 1 більше, ніж число символів «:», але масив залишається двовимірним. Оператор «:» (двокрапка) дозволяє легко виконувати операції зі збільшення розмірності масивів. Наведемо приклад формування тривимірного масиву шляхом додавання нової сторінки. Нехай у нас заданий вихідний двовимірний масив розміром 3x3:

» М =

М =

1 2 3

4 5 6

7 8 9

Для додавання нової сторінки з тим самим розміром можна розширити М таким чином:

» М(:.:.2) =

M(:.:.l) =

1 2 3

4 5 6

7 8 9

М(:.:.2) =

10 11 12

13 14 15

16 17 18

Подивимося, що тепер містить масив М при його вказівці:

» М

М(:,:.1)=

1 2 3

4 5 6

7 8 9

М(:.:.2) =

10 11 12

13 14 15

16 17 18

Як можна побачити, числа у виразах М(:.:, 1) і М(:,: ,2) означають номер сторінки.

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

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

» М (2.2,1)

Ans =

» МС2.2.2)

Ans =

Таким чином, у багатовимірних масивах використовується те саме правило індексації, що і в одновимірних та двовимірних. Довільний елемент, наприклад, тривимірного масиву визначається як М(1 .j.k), де 1 - номер рядка, j - номер стовпця і k - номер сторінки. Цей елемент можна вивести, а можна присвоїти йому задане значення х: М (1, j, k) = x.

Видалення розмірності у багатовимірному масиві

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

» М(:.:.1) =

М =

10 11 12

13 14 15

16 17 18

Неважко помітити, що в цьому масиві залишилася лише друга сторінка і що розмірність масиву зменшилася на 1 – він став двовимірним.

Створення сторінок, заповнених константами та випадковими числами

Якщо після знака присвоювання стоїть чисельна константа, то відповідна частина масиву міститиме елементи, що містять константу. Наприклад, створимо з масиву М (див. приклад вище) масив, у якого друга сторінка містить одиниці:

»M(:.:..2)=1

М(:.:,1) =

10 11 12

13 14 15

16 17 18

М(:.:.2) =

1 1 1

1 1 1

1 1 1

А тепер замінимо першу сторінку масиву на сторінку з нульовими елементами:

»M(:.:.1)=0

M(:.:.1)=

0 0 0

0 0 0

0 0 0

М(:.:,2) =

1 1 1

1 1 1

1 1 1

Використання функцій ones, zeros, rand та randn

Функції ones (створення масивів з одиничними елементами), zeros (створення масивів з нульовими елементами) і rand або randn (створення масивів з елементами - випадковими числами відповідно рівномірним і нормальним розподілом) можуть також використовуватися для створення багатовимірних масивів. Приклади наводяться нижче:

» E = ones (3.3.2)

E(:.:.1)=

1 1 1

1 1 1

1 1 1

E(:.:,2) =

1 1 1

1 1 1

1 1 1

» Z=zeros(2,2,3) Z(:,:.l) =

Z(:.:.2) =

Z(:.:,3) =

» R=randn(3,2.2) R(:.:.l) =

1.6656-1.1465

0.1253 1.1909

0.2877 1.1892

R(:.:,2) =

0.0376-0.1867

0.3273 0.7258

0.1746 -0.5883

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

» A = randn (3,3,3,0)

А =

Empty array: 3-bу-3-bу-3-by-0

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

Об'єднання масивів

Для створення багатовимірних масивів служить описана раніше для матриць спеціальна функція конкатенації cat:

    cat(DIM,A,B) - повертає результат об'єднання двох масивів А і У вздовж розмірності DIM;

    cat(2.A.B) - повертає масив [А.В], у якому поєднані ряди (горизонтальна конкатенація);

    cat(1, А.В) - повертає масив [А:В], в якому об'єднані стовпці (вертикальна конкатенація);

    B=cat(DIM.Al,A2,...) - поєднує безліч вхідних масивів Al, A2,... вздовж розмірності DIM.

Функції cat(DIM,C(:)) і cat(DIM.C.FIELD) забезпечують відповідно конкатенацію (об'єднання) осередків масиву осередків (див. урок 15) або структур масиву структур (див. урок 14), що містять числові матриці, в єдину матрицю. Нижче наведено приклади застосування функції cat:

» М1 =

» М2 =

М2 =

» catd.Ml.M2)

Ans =

5 б

» cat(2.Ml.M2)

ans=

1 2 5 6

3 4 7 8

» M-cat(3.Ml.M2) M(:,:.l) =

М(:,:,2) =

Робота з розмірами

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

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

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

» ndims(M)

Ans =

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

Для обчислення розміру кожної розмірності масиву використовується функція 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.

    Si ze(A) повертає розмір перших N розмірностей масиву А;

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

    Size(A) повертає число рядів та стовпців у різних вихідних параметрах (вихідних аргументах у термінології MATLAB) тип.

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

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

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

    ipermuteCA, ORDER) - операція, зворотна permute: permute(permute(A. ORDER), ORDER)=A

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

» А =:

» В =;

»С =;

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

D(:,:,l) =

9 10

11 12

» size(D)

Ans =

2 2 3

» size(permute(D.))

ans=

3 2 2

»size(ipermute(D.))

Ans=

2 2 3

» ipermute(permute(D,),)

Ans(:. :,2) =

ans(:.:,3) =

9 10

11 12

Зсув розмірностей масивів

Зсув розмірностей реалізується функцією shiftdim:

    B=shiftdim(X,N) - зсув розмірностей в масиві X на величину N. Якщо М>0, то зсув розмірностей, розташованих праворуч, виконується вліво, а N перших зліва розмірностей згортаються в кінець масиву, тобто рух розмірностей йде по колу проти годинникової стрілки. Якщо м<0, сдвиг выполняется вправо, причем N первых размерностей, сдвинутых вправо, замещаются единичными размерностями;

    Shiftdim(X) - повертає масив з тим самим числом елементів, що й у масиву X, але з віддаленими початковими одиничними розмірностями. Вихідний параметр NSHIFTS показує кількість віддалених розмірів. Якщо X - скаляр, функція не змінює X, B, NSHIFTS.

Наступний приклад ілюструє застосування функції shiftdim:

» A = randn (1.2.3,4):

» =shiftdim(A)

B(:.:.l) =

2.1707-1.01060.5077

0.05920.6145 1.6924

B(:.:,2) =

0.5913 0.3803 -0.0195

0.6436-1.0091-0.0482

B(:.:.3) =

0.0000 1.0950 0.4282

0.3179-1.87400.8956

В(:.:,4) =

0.7310 0.0403 0.5689

0.5779 0.6771 -0.2556

Видалення одиничних розмірностей

Функція squeeze(A) повертає масив, де видалені всі одиничні розмірності. Одиничною називається розмірність, у якій size(A. dim) == 1. Але якщо

А - одномірний або двовимірний масив (матриця або вектор), то функція поверне той самий масив А. Наступний приклад пояснює роботу squeeze:

» A = randn (1.2.1.3.1):

» B = squeeze (A)

0.6145 1.6924 -0.6436

0.5077 0.5913 0.3803

Зверніть увагу на те, що п'ятивимірний масив А перетворюється на масив з розмірністю 2 та розміром 2x3.

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

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

    Створювати багатовимірні масиви.

    Застосовувати оператор «:» у багатовимірних масивах.

    Отримувати доступ до окремих елементів багатовимірних масивів.

    Видаляти розмірності у багатовимірного масиву.

    Створювати масиви, заповнені константами та випадковими числами.

    Здійснювати об'єднання масивів.

    Обчислювати число розмірностей масиву та визначати розмір кожної розмірності.

    Переставляти, зрушувати та видаляти одиничні розмірності в багатовимірних масивах.