Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Glava_2a70_2014.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

2.15.6. Использование операций индексации.

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

>> A(1,1)=4; A(1,2)=1;

>> A(2,1)=0; A(2,2)=2;

>> A(3,1)=5; A(3,2)=5;

>> A

A =

4 1

0 2

5 5

где для доступа («чтению») к отдельным элементам массива используются круглые скобки (операция индексации), внутри которых через запятую перечисляются индексы, причем первым указывается номер строки, а вторым – номер столбца.

Как и в случае одномерных массивов, такое решение не является эффективным в алгоритмическом плане ввиду того, что по мере присваивания системе MATLAB приходится перестраивать структуру массива. Проблема отчасти преодолевается, если присваивание

>> A(3,2)=5;

поместить первым. Кроме того, целесообразно сразу создать двумерный массив нужного размера, воспользовавшись функциями ones или zeros, т.е. вызвать команды ones(3,2) или zeros(3,2), после чего осуществить присваивание отдельным элементам нужных значений (причем порядок присваивания в таких ситуациях уже не имеет значения). У указанных функций первый параметр задает количество строка второй – столбцов.

2.15.7. Изменение размеров массива.

Если после формирования массива A потребуется, не изменяя элементов массива, изменить его размеры, можно воспользоваться функцией

reshape(A,M,N)

где M, N – новые размеры массива A (M – количество строк; N – количество столбцов). Заметим, что если количество элементов в массиве A не равно произведению M на N, то MATLAB выдаст сообщение об ошибке.

Положим, в качестве примера требуется ранее сформированную матрицу A размером 3х2 превратить в матрицу размером 2х3, то следует воспользоваться функцией reshape:

>> A=[4 1; 0 2; 5 5]

A =

4 1

0 2

5 5

>> reshape(A,2,3)

ans =

4 5 2

0 1 5

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

Заметим, что поменять местами строки матрицы с ее столбцами можно операцией транспонирования, которая обозначается знаком апостроф ('). В частности имеем:

>> A=[4 1; 0 2; 5 5]

A =

4 1

0 2

5 5

>> B=A'

B =

4 0 5

1 2 5

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

Вектор-строки операцией транспонирования преобразуются в вектор-столбцы, и наоборот, например, в результате следующих команд

>> w=[1;4;5]

w =

1

4

5

>> u=w'

u =

1 4 5

вектор-столбец w операцией транспонирования был преобразован в вектор-строку u.

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