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

2.13.3. Приоритет операций.

Логические операции (кроме операции «Логическое НЕ», называемой также «операция отрицания») имеют самый низкий приоритет. Более подробные сведения о приоритете операций (в порядке убывания) в системе MATLAB приведена ниже:

1) Круглые скобки ( );

2) Транспонирование (.’), транспонирование с комплексным сопряжением (’), возведение в степень (^), поэлементное возведение в степень (.^);

3) Унарный плюс (+), унарный минус (-), логическое отрицание (~);

4) Умножение и деление (.*, ./, .\, *, /, \);

5) Сложение и вычитание (+, -);

6) Оператор сечения массива (:);

7) Операции отношения (<, <=, >, >=, ==, ~=);

8) Логическое И (&);

9) Логическое ИЛИ (|);

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

Арифметические операции с комплексными числами реализуются в системе MATLAB точно также как и с вещественными числами (в соответствии с известными математическими правилами). Тоже самом относится и к операциям отношения «равно» и «не равно». Вместе с тем, как известно, операции сравнения комплексных чисел в математике не определены. Тем не менее, в системе MATLAB соответствующие операции с комплексными числами проводятся, но их значения определяются действительными частями рассматриваемых операндов:

>> x=1+2i; y=5i; z=7i;

>> x>y

ans =

1

>> y<=z

ans =

1

>> y>=z

ans =

1

Если один из операндов является скаляром, а другой – массивом, то происходит сравнение всех элементов второго операнда-массива со значением первого операнда-скаляра:

>> M=[-4 1; 0 2]

M =

-4 1

0 2

>> M>0

ans =

0 1

0 1

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

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

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

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

Итак, как уже отмечалось все данные в системе 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 =

3

Итак, операцию индексации можно применять как справа от знака операции присваивания (доступ к элементу массива «по чтению»), так и слева от нее (доступ к элементу массива «по записи»). При попытке чтения несуществующего элемента (например, пятого элемента массива 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 выполняет подряд многочисленные действия с массивами.

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