Доступ к элементам матриц
Для доступа к элементам матрицы используются круглые скобки, при этом номера строк и столбцов разделяются запятыми. Номера строк и столбцов нумеруются, начиная с 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 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|