Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Операции ARRAY и MATRIX



Лабораторная работа № 2. Матричные операции в MATLAB

 

На первом занятии вам уже пришлось познакомиться с тем, как задаются вектора и матрицы. Были рассмотрены некоторые матричные операции и функции (plot, linspace). Однако возможности MATLAB’а в этом отношении гораздо шире. И для эффективной работы необходимо уверенно владеть хотя бы основными из этих возможностей. Поэтому вопросу работы с матрицами посвящается отдельное занятие.

 

Операции ARRAY и MATRIX

 

Задайте две матрицы второго порядка. Например, такие

 

>> A = [ 2 -1; -1 2]

A =

2 -1

-1 2

>> B = [ 1 3; -1 1]

B =

1 3

-1 1

 

Что произойдет, если мы попробуем вычислить выражение A+B?

 

>> A+B

ans =

3 2

-2 3

 

Результатом, как и следовало ожидать, будет матрица того же размера, что и матрицы слагаемые, а элементы представляют собой суммы соответствующих элементов матриц A и B. Не забывайте, что складывать можно только матрицы одинаковых размеров. Если же вы по ошибке попытаетесь сложить матрицу A (размера 2х2), например, с вектором-строкой (матрицей размера 1х2)

 

>> A + [ 1 2]

??? Error using ==> +

Matrix dimensions must agree.

 

то MATLAB не только откажется выполнить невозможную операцию, но и выдаст красным шрифтом поясняющее сообщение: Matrix dimensions must agree – размеры матриц должны быть согласованы.

Если же вы умножите матрицы,

 

>> C=A*B

C =

3 5

-3 -1

 

то результат – матрица C ‑ будет вычислен в точном соответствии с правилами матричной алгебры. То есть элемент C(1,1) получается в результате умножения первой строки матрицы А на первый столбец матрицы В; элемент С(1,2) – в результате умножения первой строки матрицы А на второй столбец матрицы В и т.д.:

 

 

C(1,1) = A(1,1)*B(1,1) + A(1,2)*B(2,1) = 2*1 + (-1)*(-1) = 3;

C(1,2) = A(1,1)*B(1,2) + A(1,2)*B(2,2) = 2*3 + (-1)*1 = 5;

C(2,1) = A(2,1)*B(1,1) + A(2,2)*B(2,1) = (-1)*1 + 2*(-1) = -3;

C(2,2) = A(2,1)*B(2,1) + A(2,2)*B(2,2) = (-1)*3 + 2*1 = -1;

 

Умножая матрицу на матрицу, следует следить за тем, чтобы эта операция была возможна, то есть количество столбцов первого сомножителя должно быть равно количеству строк второго.

В обычных языках программирования для выполнения матричных операций используются подпрограммы (либо стандартные, либо написанные собственноручно). В MATLAB’е эти операции выполняется с использованием обычной записи, принятой в математической литературе. На самом деле MATLAB, конечно тоже использует для подобных операций собственные подпрограммы, но культурно скрывает от вашего взгляда ненужные подробности.

Такая запись матричных выражений, конечно, очень полезное усовершенствование. Однако иногда это свойство может оказаться помехой. Поэтому помимо рассмотренных выше матричных операций (matrix operation) в MATLAB’е есть, так называемые операции над массивами (array operation). Запись такой операции отличается от матричной тем, что перед знаком операции ставится точка. А действие операции рассмотрим выполнив array-умножение матриц А и В:

 

>> D = A.*B

D =

2 -3

1 2

 

Как видите, MATLAB получает результат, просто выполняя арифметическую операцию над соответствующими элементами матриц А и В:

 

D(1,1) = A(1,1)*B(1,1) = 2*1 = 2;

D(1,2) = A(1,2)*B(1,2) = (-1)*3 = -3;

D(2,1) = A(2,1)*B(2,1) = (-1)*(-1) = 1;

D(2,2) = A(2,2)*B(2,2) = 2*1 = 2;

 

Деление. Операции деления следует уделить чуть большее внимание, чем операциям сложения, вычитания и умножения. Array-деление не должно вызвать затруднений. Понятно, что в результате вычисления

 

>> A./B

ans =

2.0000 -0.3333

1.0000 2.0000

 

элементы матрицы А делятся на соответствующие элементы матрицы В. А что же получится в результате матричного деления?

 

>> A/B

ans =

0.2500 -1.7500

0.2500 1.2500

 

Как вы можете легко проверить, здесь вычислено . Полезная возможность, однако, как вы хорошо знаете, чаще в матричных выражениях обратные матрицы оказываются первым сомножителем, то есть чаще встречаются выражения вида . Для такого действия в MATLAB’е предусмотрена специальная операция – деление слева.

 

>> B\A

ans =

1.2500 -1.7500

0.2500 0.2500

 

Транспонирование. Это одна из немногих операций линейной алгебры, с которой у студентов, как правило, нет трудностей. Для обозначения этой операции в MATLAB’е используется символ апостроф (’).

 

Упражнения.

  1. Задайте какую-либо матрицу A размера 3х3 и вектор-столбец x из трех элементов. Вычислите вектор b, являющийся произведением .
  2. Используя операцию деления слева, решите систему линейных уравнений . Проверьте, что полученное решение совпадает с заданным ранее вектором .
  3. Вычислите произведение . Результат должен быть симметричной матрицей.

 

 

Операция двоеточие

 

В MATLAB’е имеется очень удобное средство для работы не только с матрицами, но и их частями – блоками. При этом используется операция двоеточие (:), которая для большинства из вас является новой. Выполните следующую команду:

 

>> 1:5

ans =

1 2 3 4 5

 

То есть результатом операции двоеточие является вектор-строка целых чисел, изменяющихся от значения левого операнда команды до значения правого.

Эта операция позволяет выделить из массива или матрицы часть – блок. Задайте матрицу и вектор, например, такие:

С помощью операции двоеточие мы можем создать новый вектор, содержащий элементы вектора , например, со второго по четвертый:

>> c = b(2:4)

c =

Также легко можно извлечь из матрицы блок, включающий элементы первых четырех строк и последних трех столбцов:

 

>> D = A(1:4,3:5)

D =

3 4 5

3 2 1

0 1 2

1 1 1

Можно извлечь из матрицы любую строку:

 

>> x = A(2,1:5)

x =

5 4 3 2 1

 

или столбец

 

>> y = A(1:5,4)

y =

 

Кстати, если вы хотите извлечь строку или столбец целиком, то вы можете не указывать начальное и конечное значения индексов:

 

>> z = A(3,:)

z =

-1 -2 0 1 2

 

В этом случае индекс, обозначенный двоеточием, пробегает все возможные значения.

 

Очень важно усвоить, что выражение с двоеточием может стоять и в правой части оператора присваивания. Например,

 

>> A(2,:) = [2 2 2 2 2]

A =

1 2 3 4 5

2 2 2 2 2

-1 -2 0 1 2

1 1 1 1 1

7 1 7 1 7

 

заменит в матрице А вторую строку.

 

Замечание. Операция двоеточие, вообще-то, обладает большими возможностями. К ней нам еще предстоит вернуться при изучении циклов.

 

Упражнение. Задайте матрицу А размером 4х4. Извлеките из нее блоки А11, А12, А21, А22, согласно следующему разбиению:

,

где блок А11 имеет размер 3х3, блок А12 ‑ размер 3х1, блок А21 ‑ размер 1х3, а блок А22 ‑ размер 1х1. Аналогичным образом задайте матрицу В, такого же размера, с таким же разбиением на блоки. Выполните умножение этих матриц непосредственно . Затем убедитесь в известном факте линейной алгебры – если матрицу разбить на такие же блоки, то каждый из них можно вычислить по обычным формулам матричного умножения:

 

 




©2015 studenchik.ru Все права принадлежат авторам размещенных материалов.

Президентские телки VIP эскорт