Сделай Сам Свою Работу на 5

Доступ к элементам матриц

Для доступа к элементам матрицы используются круглые скобки, при этом номера строк и столбцов разделяются запятыми. Номера строк и столбцов нумеруются, начиная с 1:

 

>> x = [1 0 0.5 -11

12 -0.1 0.1 7

0.33, 2.5 3 4]

 

x =

1.0000 0 0.5000 -11.0000

12.0000 -0.1000 0.1000 7.0000

0.3300 2.5000 3.0000 4.0000

 

>> x(1, 1)

 

ans =

 

>> x(2, 3)

 

ans =

0.1000

 

Таким же образом можно менять значения элементов матрицы:

 

>> x(2, 1) = 0

 

x =

1.0000 0 0.5000 -11.0000

0 -0.1000 0.1000 7.0000

0.3300 2.5000 3.0000 4.0000

 

Другой способ индексации заключается в том, что ячейку матрицы можно задавать в виде одного числа, которое задает номер элемента, начиная отсчет от элемента (1, 1), а затем последовательно по столбцам. Это может напоминать случай, если все элементы матрицы «развернули» в одну строку, содержащие все элементы. Более понятно это показано на следующем примере применительно к матрице x из предыдущего примера:

 

>> x(3)

ans =

0.3300

 

>> x(5)

 

ans =

-0.1000

 

>> x(7)

 

ans =

0.5000

 

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

 

>> a = [1 3 5 10]

 

a =

1 3 5 10

 

>> a(2)

 

ans =

 

>> b = [10; 15; 7; -9]

 

b =

-9

 

>> b(3)

 

ans =

 

В языке MATLAB предусмотрена возможность выделять из матрицы не только один элемент, но и диапазон элементов. Пусть, например, у нас есть матрица x, содержащая последовательность чисел от 0 до 10:

 

>> x = 0: 10

 

x =

0 1 2 3 4 5 6 7 8 9 10

 

Для того, чтобы выделить в отдельную матрицу последовательность элементов, используется следующая запись:

 

Переменная(номер первого элемента : шаг : номер последнего элемента)

 

Если шаг равен 1 (если нужно выделить последовательность элементов, идущих подряд), то его можно опустить. В следующем примере из матрицы x выделяется последовательность, начиная со 2-го, и по 6-й элементы:



 

>> x(2: 6)

 

ans =

1 2 3 4 5

 

>> x(2: 1: 6)

 

ans =

1 2 3 4 5

 

Если нужно выделить каждый второй элемент, начиная со 2-го, и по 6-й, то нужно выполнить следующую команду:

 

>> x(2: 2: 6)

 

ans =

1 3 5

 

Если нужно выделить последовательность элементов, заканчивающуюся последним элементом исходной матрицы, то вместо указания номера последнего элемента можно указать ключевое слово end. В следующем примере выделяются все элементы, начиная с 5-го, и до последнего:

 

>> x(5:end)

 

ans =

4 5 6 7 8 9 10

 

Шаг здесь также может быть отрицательным, благодаря чему можно «переворачивать» матрицы:

 

x(end: -1: 1)

 

ans =

10 9 8 7 6 5 4 3 2 1 0

 

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

 

>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14; 2 -2 5 7]

 

a =

1 3 10 -5

2 4 6 8

-10 -12 0 14

2 -2 5 7

 

>> a(1: 3, 1: 2)

 

ans =

1 3

2 4

-10 -12

 

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

 

>> a(1: 3, 1: 2) = -1

 

a =

-1 -1 10 -5

-1 -1 6 8

-1 -1 0 14

2 -2 5 7

 

Операции с матрицами

MATLAB ориентирован в первую очередь на работу с матрицами, поэтому среда разработки предоставляет пользователю довольно обширную библиотеку операций и функций для работы с ними. Некоторые матричные операторы приведены в таблице 1.3.

 

Таблица 1.3

+ Сложение матриц
- Вычитание матриц
* Перемножение матриц
.* Перемножение элементов матриц
./ Деление элементов матриц
.\ Поэлементное обратное деление элементов матриц (деление правого операнда на левый)
.' Транспонирование
' Расчет комплексно-сопряженной (эрмитово-сопряженной) матрицы. Транспонирование матрицы и применение комплексного сопряжения к ее элементам.

 

В следующем примере продемонстрирована работа перечисленных операторов:

 

>> a = [1 0 -2 10 13];

>> b = [-5 1 -1 2 7];

>> a + b

 

ans =

-4 1 -3 12 20

 

>> a + 5

 

ans =

6 5 3 15 18

 

>> a - b

 

ans =

6 -1 -1 8 6

 

>> a.'

 

ans =

-2

 

>> a.' * b

 

ans =

-5 1 -1 2 7

0 0 0 0 0

10 -2 2 -4 -14

-50 10 -10 20 70

-65 13 -13 26 91

 

>> a * b.'

 

ans =

 

>> a .* b

 

ans =

-5 0 2 20 91

 

>> a ./ b

 

ans =

-0.2000 0 2.0000 5.0000 1.8571

 

>> a .\ b

 

ans =

-5.0000 Inf 0.5000 0.2000 0.5385

 

>> c = [1 + 5i, -5 - 2i

1i, 10 + 3i]

 

c =

1.0000 + 5.0000i -5.0000 - 2.0000i

0 + 1.0000i 10.0000 + 3.0000i

 

>> c'

 

ans =

1.0000 - 5.0000i 0 - 1.0000i

-5.0000 + 2.0000i 10.0000 - 3.0000i

 

В таблице 1.4 приведены некоторые стандартные функции для работы с матрицами.

 

Таблица 1.4

sum Расчет суммы элементов векторов. Расчет суммы элементов в каждом столбце или строке матрицы.
prod Расчет произведения элементов векторов. Расчет произведения элементов в каждом столбце или строке матрицы.
mean Расчет среднего значения для строк или столбцов матрицы.
min / max Нахождение наименьших / наибольших элементов в строках или столбцах матрицы.

 

Функция sum предназначена для расчета суммы элементов матрицы. Ее поведение зависит от переданных параметров. Если в функцию sum передать матрицу-строку или матрицу-столбец, то функция sum вернет сумму всех элементов:

 

>> x = [1 0 -2 10 13];

>> sum (x)

 

ans =

 

>> sum (x.')

 

ans =

 

Если функции sum передать двумерную матрицу размерностью M x N в качестве единственного параметра, то она вернет матрицу размерностью 1 x N, каждый элемент которой равен сумме всех элементов в соответствующем столбце:

 

>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]

 

a =

1 3 10 -5

2 4 6 8

-10 -12 0 14

 

>> sum (a)

 

ans =

-7 -5 16 17

 

Функция sum может принимать в качестве второго аргумента целое число, которое определяет направление суммирования, то есть по строкам или столбцам необходимо проводить суммирование. Если второй аргумент равен 1, то функция sum работает так же, как и без второго параметра.

 

>> sum (a, 1)

 

ans =

-7 -5 16 17

 

Если второй аргумент равен 2, то суммирование происходит не по столбцам, а по строкам, и для матрицы размерностью M x N результатом будет матрица размерностью M x 1:

 

>> sum (a, 2)

 

ans =

-8

 

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

 

>> sum (sum (a))

 

ans =

 

Функции prod работает аналогично функции sum с той лишь разницей, что вместо суммы вычисляется произведение.

 

>> x = [1 2 -2 10 13];

>> prod (x)

 

ans =

-520

 

>> prod (x.')

 

ans =

-520

 

 

>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]

 

a =

1 3 10 -5

2 4 6 8

-10 -12 0 14

 

>> prod (a)

 

ans =

-20 -144 0 -560

 

>> prod (a, 1)

 

ans =

-20 -144 0 -560

 

>> prod (a, 2)

 

ans =

-150

 

>> prod (prod (a) )

 

ans =

 

Аналогично работает и функция mean, которая возвращает среднее арифметическое для элементов строк или столбцов матрицы:

 

>> x = [1 2 -2 10 13];

>> mean (x)

 

ans =

4.8000

 

>> mean (x.')

 

ans =

4.8000

 

 

>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]

 

a =

1 3 10 -5

2 4 6 8

-10 -12 0 14

 

>> mean (a)

 

ans =

-2.3333 -1.6667 5.3333 5.6667

 

>> mean (a, 1)

 

ans =

-2.3333 -1.6667 5.3333 5.6667

 

>> mean (a, 2)

 

ans =

2.2500

5.0000

-2.0000

 

>> mean (mean (a) )

 

ans =

1.7500

 

Подобным образом работают и функции min и max, в том числе для нахождения минимального и максимального элементов в столбцах соответственно.

 

>> x = [1 2 -2 10 13];

>> min (x)

 

ans =

-2

 

>> max (x)

 

ans =

 

>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]

 

a =

1 3 10 -5

2 4 6 8

-10 -12 0 14

 

>> min (a)

 

ans =

-10 -12 0 -5

 

Для нахождения минимальных (максимальных) элементов в строках матриц используется несколько другая запись:

 

C = min (A, [], dim)

C = max (A, [], dim)

 

Здесь A - матрица, в которой нужно найти минимальные (максимальные) элементы, а dim - номер измерения матрицы, в котором нужно искать минимальные (максимальные) значения. Если dim = 1, то такие значения будут искаться в столбцах, что равносильно вызову функций min или max без параметров. Если dim = 2, то минимальные (максимальные) элементы ищутся в каждой строке матрицы.

 

>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]

 

a =

1 3 10 -5

2 4 6 8

-10 -12 0 14

 

>> min (a, [], 2)

 

ans =

-5

-12

 

Также возможно вызывать функции min / max, передавая им в качестве аргументов две матрицы A и B одинаковой размерности M x N. В этом случае результатом вызова этих функций будет матрица C, размерностью M x N, элементы которой будут равны:

· для функции min: C(i, j) = min (A(i, j), B(i, j));

· для функции max: C(i, j) = max (A(i, j), B(i, j));

для всех i = 1,... , M, j = 1,... , N. Такое использование функций min / max показано в следующем примере:

 

>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]

 

a =

1 3 10 -5

2 4 6 8

-10 -12 0 14

 

>> b = [2 1 5 -5; -2 -4 10 11; -5 10 2 7]

 

b =

2 1 5 -5

-2 -4 10 11

-5 10 2 7

 

>> min (a, b)

 

ans =

1 1 5 -5

-2 -4 6 8

-10 -12 0 7

 

>> max (a, b)

 

ans =

2 3 10 -5

2 4 10 11

-5 10 2 14

 

Если в качестве второго аргумента функциям min / max передать действительно число (что равносильно матрице 1 x 1), то это равносильно тому, что в качестве второго аргумента была бы передана матрица, размерность которой совпадает с матрицей, переданной в качестве первого аргумента, элементы которой равны переданному числу:

 

>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]

 

a =

1 3 10 -5

2 4 6 8

-10 -12 0 14

 

>> min (a, 2)

 

ans =

1 2 2 -5

2 2 2 2

-10 -12 0 2

 

>> max (a, 5)

 

ans =

5 5 10 5

5 5 6 8

5 5 5 14

 

 

Функции min / max, имеют еще один способ вызова, когда эти функции возвращают два параметра. В этом случае в качестве первого параметра будет возвращено то же значение, что и при описанных выше способах вызова, а в качестве второго значения будет возвращена матрица, содержащая номера строк или столбцов, содержащие соответствующие элементы из первой матрицы. Такой вызов функции min показан в следующем примере:

 

>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]

 

a =

1 3 10 -5

2 4 6 8

-10 -12 0 14

 

>> [c, indexes] = min (a)

 

c =

-10 -12 0 -5

 

 

indexes =

3 3 3 1

 

>> [c, indexes] = min (a, [], 2)

 

c =

-5

-12

 

 

indexes =

 

Описание функций min и max показывает, что в MATLAB одна и та же функция может быть вызвана различными способами или, с другой стороны, может быть создано несколько разных функций с одинаковыми именами, но различными входными или выходными параметрами.

Математические функции, встроенные в MATLAB (такие как cos, sin, sqrt и т.д.) могут принимать в качестве аргумента матрицы (как уже говорилось, числа в MATLAB являются частным случаем матриц размерностью 1 x 1), в результате выполнения таких операций возвращается матрица, того же размера, что и переданный аргумент, а элементы этой матрицы представляют собой элементы первой матрицы, к которым был применена соответствующая функция. Например:

 

>> x = [0, pi / 3, pi / 2, -pi / 6];

>> cos (x)

 

ans =

1.0000 0.5000 0.0000 0.8660

 

 

>> y = [1 -1 -2 5];

>> abs (y)

 

ans =

1 1 2 5

 

>> exp (y)

 

ans =

2.7183 0.3679 0.1353 148.4132

 



©2015- 2019 stydopedia.ru Все материалы защищены законодательством РФ.