Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР02 Матричные операции в MATLAB.doc
Скачиваний:
8
Добавлен:
15.11.2019
Размер:
159.74 Кб
Скачать

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

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

2.1. Операции 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. Вычислите произведение . Результат должен быть симметричной матрицей.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]