"Вычисления, визуализация и программирование в среде MATLAB 5.x" - читать интересную книгу автора (Мартынов Н. Н., Иванов А. П.)

Такое постепенное создание массива из трех элементов возможно потому, что система MATLAB с каждым новым присваиванием автоматически перестраивает свою служебную информацию о массиве, а также область памяти, отводимую под данные (под элементы). После первого присваивания MATLAB считает, что массив аЗ состоит из одного элемента. При втором присваивании выясняется, что есть еще и второй элемент. Тут уже система MATLAB вынуждена перестраивать всю структуру памяти, отведенную под данный массив. С каждым последующим присваиванием перестройку приходится повторять.
Ясно, что этот способ создания одномерного массива не является эффективным и проигрывает в быстродействии операции конкатенации. Проигрыш в быстродействии мало заметен в интерактивном режиме, когда пользователь вводит всю информацию с клавиатуры. Однако это становится критическим в программном режиме, когда MATLAB подряд исполняет многочисленные инструкции с массивами.
Существуют два простых способа приблизительно в 100 раз увеличить быстродействие в рассмотренной ситуации. Во-первых, можно предварительно выделить всю необходимую память под конечный размер массива. Это достигает-
MATLAB 5.x. Вычисления, визуализаиия, программирование 23
ся вызовом функций ones или zeros, которые сразу создают массив нужного размера, заполненный единицами или нулями. После этого постепенное прописывание элементов нужными значениями не требует перестройки структуры памяти, отведенной под- массив. К примеру, для массива аЗ можно перед присваиваниями сделать следующий вызов функции ones:
аЗ = ones (1,3) аЗ = 1 1 1
где вывод в командное окно результата вызова функции ones показывает, что сразу создается массив из трех элементов, равных единице. После этого можно осуществить показанные выше присваивания нужных значений элементам массива аЗ.
Во-вторых, можно осуществить присваивание значений элементам массива, начиная с последних по номеру элементов и заканчивая первым:
аЗ(3) = 0.017 аЗ(2) = 7.8 аЗ(1) = 67
Здесь при выполнении первого же присваивания система MATLAB выделяет память под три вещественных числа, присваивает указанное значение третьему элементу, а первому и второму по умолчанию присваивает нули.
Теперь снова вернемся к рассмотрению различных способов создания одномерных массивов. К настоящему моменту мы изучили три таких способа: операцию конкатенации, операцию индексации, вызов специальных функций (например, ones или zeros). Еще один способ основан на применении специальной операции, обозначаемой двоеточием. Эту операцию можно назвать операцией формирования диапазона числовых значений. Пусть требуется сформировать одномерный массив чисел в диапазоне от 3.7 до 8.947 с приращением 0.3. Легче всего решить эту задачу с помощью операции двоеточие:
diapl =3.7 : 0.3 : 8.947;
Последняя точка с запятой здесь использована для подавления немедленного вывода в командное окно системы MATLAB результатов операции, то есть всех элементов массива diapl. В случае большого числа элементов их показ в командном окне будет сопровождаться быстрой вертикальной протяжкой содержимого окна, а это замедляет работу и утомительно для глаз.
Операция формирования диапазона работает следующим образом. Сначала она включает в формируемый массив левую границу диапазона (это число, стоящее левее первого двоеточия). Затем она к этому числовому значению прибавляет приращение, которое указывается после первого двоеточия. Если сумма не превосходит верхней границы диапазона (число, стоящее после второго двоеточия), то она включается в качестве элемента в формируемый массив. Это
24 Глава 1. Числовые массивы в системе MATLAB
все повторяется до тех пор, пока очередное числовое значение не превысит верхнюю границу.
Несмотря на подробное объяснение работы этой операции, довольно трудно так, сразу в уме подсчитать количество попадающих в заданный диапазон и, соответственно, в массив diapl элементов. Поэтому лучше вызвать функцию length:
length( diapl ) ans = 18
и выяснить, что в сформированный с помощью операции двоеточие массив diapl попало 18 элементов.
Чаще всего эту операцию применяют для формирования диапазона целых числовых значений:
diap2 = А : 2 : 26; Если приращение равно единице, то его можно для краткости опустить:
diap3 = 2:45;
В случае целых чисел количество попадающих в заданный диапазон элементов формируемого массива подсчитывается без всякого труда. Совершенно очевидно, что в массив diap3 попадает 44 элемента.
Двумерные массивы чисел: матрицы и векторы
Двумерные массивы можно трактовать как наборы чисел, упорядоченные в виде прямоугольной таблицы. Для доступа к индивидуальному элементу используется два индекса - номер строки и номер столбца (на пересечении которых и стоит выбранный элемент).
Двумерный массив характеризуется количеством строк и количеством столбцов. Сформируем операцией конкатенации двумерный массив а, состоящий из двух столбцов и трех строк (см. рис. 1.13).
' Из этого рисунка хорошо видно, что в качестве разделителя строк в формируемом с помощью операции конкатенации двумерном массиве служит точка с запятой. Это еще одно предназначение точки с запятой в М-языке системы MATLAB.
Двумерные массивы в математике принято называть матрицами. Любая строка матрицы является одномерным массивом, и любой столбец матрицы также является одномерным массивом. Однако есть разница в упорядочении их элементов с точки зрения матриц: элементы первого одномерного массива упо-
MATLAB 5.x. Вычисления, визуализация, программирование
25
рядочены вдоль строк матрицы (горизонтально), а элементы второго - вдоль столбцов (вертикально). Если явно учитывать в понятии одномерного массива эту разницу, то тогда массивы первого типа называют вектор-строками, а второго типа - вектор-столбцами. В этом случае также можно считать, что вектор-строки являются частным случаем матрицы с количеством строк, равным единице, а вектор-столбцы являются частным случаем матрицы с количеством столбцов, равным единице.
НИЗ Е__ зйш ШМНМГ|5|х]
File Edit Window help f- •
1 * Та ft! «I в tg | ?
»а=[12 ;3 4; 5 6] Т ¦=-• ^
а = ¦•>
1 3 5 2 4 б ;. —1
_LJ
JIS Рисунок 1.13
В системе MATLAB все одномерные массивы трактуются либо как вектор-строки, либо как вектор-столбцы. До сих пор мы вводили только вектор-строки, так как использовали в операциях конкатенации в качестве разделителей либо пробелы, либо запятые. Следующее выражение, использующее операцию конкатенации, задает уже вектор-столбец
b =[ 1; 2; 3]
состоящий из трех строк, так как точка с запятой в операции конкатенации означает переход на новую строку.
Для массива b функция length (b) возвращает число 3, так как действительно этот массив состоит из трех элементов. Функция length не различает вектор-строки и вектор-столбцы.
Если попросить систему MATLAB показать значение переменной Ь, то мы увидим следующую картину (см. рис. 1.14).
•J MATLAB Command Window
Р ^
ь-~
ВВЕЗ
1
Jj._