logo search
matlab_final

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

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

1

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

3

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

b =

10

15

7

-9

>> b(3)

ans =

7

В языке 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