Функції перетворення матриць
У системі MatLab є багато функцій для створення матриць на основі заданої та перетворення матриць. Такі матричні операції дуже часто використовують під час числових обчислень для погодження отриманих результатів між собою, Розглянемо головні матричні функції системи, наведемо формати їх запису та приклади використання.
Першою з таких важливих функцій є контанктенція, тобто об’єднання матриць. Матриці можна об’єднувати горизонтально або вертикально. Має місце, крім того, третій спосіб об’єднання, зі створенням тривимірного масиву, але багатовимірні структури числових даних і потужний апарат роботи з ними, розвинутий у системі MatLab.
Формат функції об’єднання матриць cat(dim, A, B), де
dim — специфікація розмірності масиву, а A та B — матриці, що об’єднуються. Параметри специфікації розмірності dim визначені таким чином:
dim = 1 — об’єднання матриць за рядками, кількості рядків у матрицях A та B повинні збігатися;
dim = 2 — об’єднання матриць за стовпчиками, кількості стовпчиків у матрицях A та B повинні збігатися;
dim = 3 — об’єднання матриць зі створенням тривимірного масиву, кількості матриць A та B повинні бути однакової розмірності.
Слід зазначити, що функцію об’єднання матриць легко здійснити через множинну індексацію та методи формування матриць, наявність функції cat у системі MatLab є дещо надлишковою і користуються нею рідко.
Іншими важливими функціями опрацювання матриць є функції переставлення їх елементів. Наприклад, функція fliplr(А) здійснює дзеркальне відображення елементів матриці зліва’направо відносно вертикальної осі. Функція flipud(А) здійснює дзеркальне відображення елементів матриці зверху вниз відносно горизонтальної осі. Функція reshape(A, l,k) створює з матриці A розмірності m*n іншу матрицю розмірності l*k через послідовний вибір елементів матриці А по стовпцях. Обов’язковою умовою для проведення такої операції є виконання співвідношення m•n = l•k. Але безперечною перевагою функції reshape є те, що за її допомогою можна здійснювати будь’які перетворення розмірності матриці.
Розглянемо тепер важливі функції створення трикутних матриць і матриць з відповідними діагональними елементами. Функція tril(A)створює нижню трикутну матрицю на основі матриці А через присвоєння значення «0» усім її елементам, розташованим нижче головної діагоналі. Функція triu(A) створює верхню трикутну матрицю на основі матриці А, анулюючи її елементи, розташовані вище головної діагоналі. Для створення діагональної матриці використовують функцію MatLab diag.
Можливі такі формати функції:
diag(v) — створення квадратної матриці, на головній діагоналі якої розташовані елементи вектора v;
diag(v, n) — створення прямокутної матриці, на одній із діагоналей якої розташовані елементи вектора v, у цьому разі параметр n визнає зсув діагоналі розташування елементів відносно головної діагоналі. Значення n > 0 відповідають зсуву відносно головної діагоналі вгору, а значення n < 0 — зсуву вниз.
Інша функція формування матриці на основі заданої — це функція repmat(A,m,n), яка повертає матрицю B, що є результатом розмноження матриці A m разів по стовпчиках та n разів по рядках. Розглянули два способи виконання тієї самої операції через використання множинної індексації, тому наявність функції repmat у системі MatLab теж є дещо надлишковою.
Є крім того, функція повороту елементів матриці на 90°
rot90(A, k), де A — матриця, що перетворюється, k — кількість поворотів, за замовчуванням k = 1.
Приклад
» format short
» M1=rand(2)
M1 =
0.4321 0.7660
0.2840 0.0976
» M2=rand(2)
M2 =
0.5558 0.2109
0.4483 0.1773
» cat(1,M1,M2)
ans =
0.4321 0.7660
0.2840 0.0976
0.5558 0.2109
0.4483 0.1773
» cat(2,M1,M2)
ans =
0.4321 0.7660 0.5558 0.2109
0.2840 0.0976 0.4483 0.1773
» format short
» M1=rand(2)
M1 =
0.1559 0.6852
0.2797 0.8352
» M2=rand(2)
M2 =
0.2201 0.4075
0.5674 0.7049
» C1=cat(1,M1,M2)
C1 =
0.1559 0.6852
0.2797 0.8352
0.2201 0.4075
0.5674 0.7049
» C2=cat(2,M1,M2)
C2 =
0.1559 0.6852 0.2201 0.4075
0.2797 0.8352 0.5674 0.7049
» fliplr(C1)
ans =
0.6852 0.1559
0.8352 0.2797
0.4075 0.2201
0.7049 0.5674
» flipud(C2)
ans =
0.2797 0.8352 0.5674 0.7049
0.1559 0.6852 0.2201 0.4075
» tril(C1)
ans =
0.1559 0
0.2797 0.8352
0.2201 0.4075
0.5674 0.7049
» triu(C1)
ans =
0.1559 0.6852
0 0.8352
0 0
0 0
» v=rand(3,1)
v =
0.2580
0.4546
0.3964
» diag(v)
ans =
0.2580 0 0
0 0.4546 0
0 0 0.3964
» diag(v,2)
ans =
0 0 0.2580 0 0
0 0 0 0.4546 0
0 0 0 0 0.3964
0 0 0 0 0
0 0 0 0 0
» diag(v,?2)
ans =
0 0 0 0 0
0 0 0 0 0
0.2580 0 0 0 0
0 0.4546 0 0 0
0 0 0.3964 0 0
» C1
C1 =
0.1559 0.6852
0.2797 0.8352
0.2201 0.4075
0.5674 0.7049
» rot90(C1)
ans =
0.6852 0.8352 0.4075 0.7049
0.1559 0.2797 0.2201 0.5674
» rot90(C1,2)
ans =
0.7049 0.5674
0.4075 0.2201
0.8352 0.2797
0.6852 0.1559
»
У MatLab функція норми вектора norm має такі формати:
norm(X, р) — функція повертає норму порядку р для вектора Х;
norm(X, р) — функція повертає норму другого порядку для вектора Х;
norm(X,’inf’) — функція повертає максимальне значення з абсолютних значень елементів вектора;
norm(X,’– inf’) — функція повертає мінімальне значення з абсолютних значень елементів вектора.
Наведемо приклади обчислення норми вектора.
Приклад
» format short
» S=[16,0,25,9,4,16,25,1,25]
S =
16 0 25 9 4 16 25
1 25
» norm(S)
ans =
49.8498
» norm(S,10)
ans =
27.9245
» norm(S,’inf’)
ans =
»
Наведемо стандартний приклад розв’язання системи лінійних алгебраїчних рівнянь. Запишемо систему з трьох рівнянь із трьома невідомими. Зрозуміло, можна провести аналіз сингулярних чисел матриці, яка формує нашу систему рівнянь, використати функцію обчислення оберненої матриці, або LU-розкладення. Але виявляється, що поставлена задача має простий і гарний розв’язок у межах лише елементарних матричних операцій, і звертатися до функцій лінійної алгебри у нашому випадку немає потреби.
Справді, якщо АX = B, то X = BA–1= B/A = A\B. Здається, що немає різниці, як написати: B/A або A\B, ці операції є еквівалентними. Але розмірності структур A і B у нашому випадку не збігаються, і тому порядок здійснення операції ділення має значення з точки зору часу проведення розрахунків. І зворотне ділення матриці на вектор A\B з цієї точки зору ефективніше, оскільки здійснюється воно не через складну функцію обчислення оберненої матриці, а через дуже ефективний алгоритм методу Гауса.
Тому ефективне розв’язання поставленої задачі буде таким
Приклад
» A=[10,?7,2;3,?15,32;13,?9,15]
A =
10 ?7 2
3 ?15 32
13 ?9 15
» B=[6;10;26]
B =
» X=A\B
X =
2.3274
2.8804
1.4445
» A*X
ans =
6.0000
10.0000
26.0000
»
Дата добавления: 2016-05-11; просмотров: 1643;