Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Формирование одномерных числовых массивов




Задание одномерных массивов и доступ к их элементам.

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

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

Массив – это упорядоченный набор однородных данных. Такими данными могут быть действительные и комплексные числа, переменные, либо арифметические выражения. Сразу оговоримся, что массивы в MATLAB не образуют нового типа данных. Числовые массивы (вещественные или комплексные) состоят из элементов типа double. Каждый массив имеет имя.

Помимо памяти, необходимой для хранения собственно значений числовых элементов (по 8 байт на каждый элемент для вещественного массива и по 16 байт на каждый элемент для комплексного массива), при создании массивов MATLAB автоматически выделяет и дополнительную память для управляющей информации (в этой области памяти хранятся размерность массива, количество элементов по каждой размерности, тип элементов (вещественные или комплексные) и т.д. Отметим, что при построении массивов MATLAB не требует от пользователя предварительного задания размерности и размеров массива (в отличие от ранних версий стандарта языка FORTRAN (FORTRAN77 и более ранние)). Пользователь может вводить соответствующие параметры постепенно, при этом MATLAB будет динамически перестраивать структуру массива.

Для создания одномерного массива используется операция конкатенации. Поясним, что оператор конкатенации – это пара квадратных скобок ([, ]), внутри которых указываются отдельные элементы или блоки массива. Так, например, следующее выражение

>> z=[1 2 4]

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

>> z=[1,2,4]

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

>> w=[1+2i,2+3i,4-5i];

В общем случае массивы бывают одномерными, двумерными и многомерными, т.е. имеют разную размерность. Для доступа к отдельному элементу одномерного массива требуется применить операцию индексации: после имени массива указать в круглых скобках индекс (номер) элемента. Иными словами, доступ к конкретному элементу массива производится путем указания его индекса, т.е. номера элемента в массиве. Для доступа к элементу одномерного массива используется один индекс, двумерного – два индекса, трехмерного – три индекса и т.д. Нумерация элементов массивов в системе MATLAB начинается с единицы. В частности, в последнем примере первый элемент массива w обозначается w(1), второй элемент – w(2), третий элемент – w(3). Таким образом, индексы задаются в круглых скобках после имени массива. При необходимости, например, изменить второй элемент сформированного операцией конкатенации массива w можно применить операцию индексации и операцию присваивания:

>> w(2)=7-2i

Если, например, третий элемент массива w должен стать равным среднему арифметическому первого и второго элементов, необходимо выполнить следующую команду

>> w(3)=(w(1)+w(2))/2

Элементы массива могут использоваться при создании новых массивов:

>> x=[2 7 9];

>> y=[x(3) 1 x(2)]

y =

9 1 7

Размер массива определяется количеством элементов вдоль каждого из его измерений. Количество элементов в одномерном массиве возвращает функция length:

>> w=[1+2i,2+3i,4-5i];

>> length(w)

ans =

Итак, операцию индексации можно применять как справа от знака операции присваивания (доступ к элементу массива «по чтению»), так и слева от нее (доступ к элементу массива «по записи»). При попытке чтения несуществующего элемента (например, пятого элемента массива w) в командном окне будет выдано сообщение об ошибке:

>> w=[1+2i,2+3i,4-5i];

>> w(5)

Index exceeds matrix dimensions.

В данном сообщении указывается на то, что индекс превысил размер массива. Вместе с тем, запись несуществующего элемента вполне допустима и означает добавление нового элемента к уже существующему массиву:

>> z=[1 2 4]

z =

1 2 4

>> z(4)=7

z =

1 2 4 7

Заметим, что тоже самое действие («удлинение» массива z) можно выполнить посредством операции конкатенации:

>> z=[1 2 4]

z =

1 2 4

>> z=[z 7]

z =

1 2 4 7

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

>> z=[1 2 4];

>> x=[z 7 z z]

x =

1 2 4 7 1 2 4 1 2 4

порождает одномерный массив x, состоящий из десяти элементов: его первые три элемента повторяют элементы массива z, четвертый элемент равен числу 7, элементы с пятого по седьмой повторяют элементы массива z, а элементы с восьмого по десятый делают то же самое.

Разумеется, можно создавать массивы и без использования операции конкатенации, указывая явно значение каждого элемента массива, например:

>> a(1)=0.8;

>> a(2)=-1.4;

>> a(3)=0.05;

>> a

a =

0.8000 -1.4000 0.0500

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

Очевидно, что описанный способ формирования одномерного массива не является эффективным и уступает в быстродействии операции конкатенации. Этот проигрыш мало заметен в интерактивном режиме, когда пользователь вводит всю необходимую информацию с клавиатуры, однако разница в быстродействии становится ощутимой в программном режиме, в случаях, когда система MATLAB выполняет подряд многочисленные действия с массивами.





Поделиться с друзьями:


Дата добавления: 2016-12-06; Мы поможем в написании ваших работ!; просмотров: 546 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Люди избавились бы от половины своих неприятностей, если бы договорились о значении слов. © Рене Декарт
==> читать все изречения...

2504 - | 2303 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.