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

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

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

>> 1:5

ans =

1 2 3 4 5

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

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

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

>> c = b(2:4)

c =

2

3

4

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

>> 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 =

4

2

1

1

1

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

>> 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, согласно следующему разбиению:

,

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

2.3. Функции cat, diag, sum, eye, zeros

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

Функция конкатенации (объединения) массивов – cat. Эта функция позволяет объединить две матрицы в одну. Синтаксис использования функции:

cat(DIM,A,B)

DIM – номер размерности, вдоль которой производится объединение матриц. Размерностью номер один считаются номера строк, а размерностью номер два – номера столбцов. То есть, если указать DIM=1, то в результате матрица B будет расположена под матрицей A, а если DIM=2, то матрица B будет помещена справа от матрицы A. Следующий пример поясняет действие этой функции:

>> A = [1, 2; 3, 4]

A =

1 2

3 4

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

B =

5 6

7 8

>> cat(1,A,B)

ans =

1 2

3 4

5 6

7 8

>> cat(2,A,B)

ans =

1 2 5 6

3 4 7 8

Для тех, кто хорошо знаком с блочной записью матриц, может более удобной следующая запись этой операции:

С = [ A, B] эквивалентно C = cat(2,A,B);

C = [ A; B] эквивалентно C = cat(1,A,B).

Функция диагонали матрицы – diag. Эта функция может работать в двух направлениях: во-первых, она может создавать диагональные матрицы из векторов;

>> v = [1 2 3 4]

v =

1 2 3 4

>> A=diag(v)

A =

1 0 0 0

0 2 0 0

0 0 3 0

0 0 0 4

Здесь, имея заданный вектор , с помощью функции diag, получена диагональная матрица , на диагонали которой расположены элементы вектора. Эта же функция позволяет создать матрицу, в которой элементы заданного вектора расположены не на главной диагонали, а на одной из кодиагоналей:

>> B = diag([1 2 3],2)

B =

0 0 1 0 0

0 0 0 2 0

0 0 0 0 3

0 0 0 0 0

0 0 0 0 0

В этом случае второй аргумент функции – номер кодиагонали, которую следует заполнить. Кодиагонали, расположенные над главной диагональю имеют положительные номера, а нижние кодиагонали – отрицательные. Используя функцию diag можно очень легко создавать ленточные матрицы. Например,

>> C = diag([2 2 2 2 2]) + diag([-1 -1 -1 -1],1) + diag([-1 -1 -1 -1],-1)

C =

2 -1 0 0 0

-1 2 -1 0 0

0 -1 2 -1 0

0 0 -1 2 -1

0 0 0 -1 2

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

Другой вариант использования функции diag возникает, когда ее аргументом является матрица. В этом случае результатом функции будет соответствующая диагональ матрицы-аргумента. Пример:

>> D = [1 2 3 4 5; -1 1 -1 1 -1; 1 2 3 2 1; 0 0 1 0 0; 1 1 1 1 1]

D =

1 2 3 4 5

-1 1 -1 1 -1

1 2 3 2 1

0 0 1 0 0

1 1 1 1 1

>> diag(D,2)

ans =

3

1

1

Функция суммирования – sum. В простейшем варианте эта функция вычисляет сумму всех элементов вектора:

>> sum([1 2 3 -1 1])

ans =

6

Однако, функция sum может работать и с матрицами. Так, если мы попросим эту функцию обработать матрицу D из предпоследнего примера, то

>> sum(D)

ans =

2 6 7 8 6

то она выдаст вектор, с суммами, вычисленными по каждому столбцу матрицы.

Функция единичной матрицы – eye. В линейной алгебре очень важную роль играет единичная матрица – квадратная матрица, на диагонали которой стоят единицы, а все остальные элементы равны нулю. Для создания таких матриц в MATLAB’е имеется специальная функция:

>> eye(4)

ans =

1 0 0 0

0 1 0 0

0 0 1 0

0 0 0 1

Аргументом этой функции является размер матрицы, которую вам надо получить

Функции создания матриц с нулевыми и единичными элементами – zeros и ones. Эти функции позволяют создать матрицы, заполненные одними нулями, либо одними единицами.

>> zeros(3)

ans =

0 0 0

0 0 0

0 0 0

В отличие от функции eye здесь мы можем создавать не только квадратные, но и прямоугольные матрицы:

>> ones(2,4)

ans =

1 1 1 1

1 1 1 1

Упражнения:

  1. Создайте, используя изученные функции, следующие матрицы:

  2. Используя функцию cat, составьте из этих матриц матрицу F.

  1. Извлеките из матрицы F вторую кодиагональ ( 3 0 0 1).

  2. Посчитайте суммы элементов строк матрицы F (вспомните об операции транспонирования ( 7 6 7 3 3 3 ).

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