Мегаобучалка Главная | О нас | Обратная связь


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



2015-12-07 2374 Обсуждений (0)
Функции cat, diag, sum, eye, zeros 0.00 из 5.00 0 оценок




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

,

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

 

 

Функции 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 =

 

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

 

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

ans =

 

Однако, функция 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 ).

 

 



2015-12-07 2374 Обсуждений (0)
Функции cat, diag, sum, eye, zeros 0.00 из 5.00 0 оценок









Обсуждение в статье: Функции cat, diag, sum, eye, zeros

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (2374)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)