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

4. Использование двоеточия

4.1. Автозаполнение

Matlab предоставляет возможность автоматического заполнения векторов, каждый элемент которых отличается от предыдущего на постоянную величину, т.е. шаг. Для этого служит двоеточие. Формирование вектора в этом случае выполняется по схеме

ИмяВектора = НачальноеЗначение : Шаг : КонечноеЗначение

Например

>> x=1:0.2:2

x =

1.0000 1.2000 1.4000 1.6000 1.8000 2.0000

формируется вектор-строка из шести элементов, имеющих значение от 1 до 2 с шагом 0,2. Формирование вектора-столбца может быть выполнено следующим образом:

>> y=(-2:2:4)'

y =

-2

0

2

4

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

Шаг может быть и отрицательным

>> x=1:-0.2:-0.3

x =

1.0000 0.8000 0.6000 0.4000 0.2000 -0.0000 -0.2000

В этом примере последнее значение в векторе-строке не равно заданному конечному значению -0,3, т.к. шаг не укладывается в диапазон [1; -0,3] целое число раз. Поэтому Matlab заканчивает генерацию элементов вектора досрочно.

Шаг, равный единице, при автозаполнении можно и не указывать

>> x=1:5

x =

1 2 3 4 5

4.2. Индексация

Символ двоеточия может использоваться не только для автозаполнения (генерации значений элементов), но и для индексации (автоматического перечисления индексов). Пусть, например, в некотором векторе х из семи элементов

>> x=11:17

x =

11 12 13 14 15 16 17

требуется заменить нулями элементы со второго по шестой (не добавить новые элементы, а обнулить уже имеющиеся). Можно, поэлементно перечисляя интересующие элементы, каждому присвоить значение 0.

>> x(2)=0; x(3)=0; x(4)=0; x(5)=0; x(6)=0

x =

11 0 0 0 0 0 17

Результат получен за пять операций присваивания. Хлопотно! Индексация при помощи двоеточия позволяет решить эту задачу быстрее и изящнее

>> x(2:6)=0

x =

11 0 0 0 0 0 17

Последний элемент массива (матрицы или вектора) можно адресовать, используя слово end. Например, пусть требуется в векторе произвольной длины каждый элемент с нечетным номером сделать равным -1. Красивое решение этой задачи без явного циклического перебора, без непосредственной адресации элементов, с автоматическим определением конца интервала обработки может быть следующим:

>> y(1:2:end)=-1

y =

-1 2 -1 4 -1 6 -1 8 -1 10

Особенно эффективно использование двоеточия при работе с матрицами. Например, выражение a(:, 1) следует понимать как все строки первого столбца матрицы а (выделение из матрицы вектора-столбца); a(2, :) – все столбцы второй строки матрицы а (выделение из матрицы вектора-строки); а(:, 2:3) – выделение подматрицы (все строки второго и третьего столбцов матрицы); а(2:4, 3:5) – выделение подматрицы (столбцы с третьего по пятый строк со второй по четвертую); (a(2:2:end,end) – элементы четных строк последнего столбца матрицы а; а(:) – растягивание матрицы в вектор-столбец (элементы в результирующем векторе располагаются так, как они записаны в памяти (см. рис. 2.1))

>> a=[11 12 13 14; 21 22 23 24; 31 32 33 34]

a =

11 12 13 14

21 22 23 24

31 32 33 34

>> a=a(:)'

В результате получим

a =

Columns 1 through 7

11 21 31 12 22 32 13

Columns 8 through 12

23 33 14 24 34

Здесь значения элементов матрицы заданы равными их индексам (например, ). Знак транспонирования использован для преобразования в вектор-строку. Вектор-строка получилась длинной и не уместилась при эхо-печати в одну строку экрана. Поэтому Matlab распечатал результат в две строки, предварив печать каждой сообщением о номерах элементов напечатанных в ней: "Columns 1 through 7" – столбцы с 1 по 7 (элементы вектора названы столбцами, потому что получившаяся в результате растягивания и транспонирования переменная а – строка с размерами , т.е. это фактически матрица из одной строки и двенадцати столбцов).

Знак двоеточия можно использовать для адресации элементов при конкатенации

а2=[а(:, 1), b, а(:, 3)]

что означает сформировать матрицу а2 как строку (последовательность) из трех столбцов: первый взять равным первому столбцу матрицы a, второй – равным вектору-столбцу b, а третий – равным в третьему столбцу матрицы a. Как и прежде необходимо согласовывать размеры сцепляемых массивов.