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

all( a )
ans =
1 1 1 all( В ) ans =
0 0 0
Существует множество разноплановых функций, специально предназначенных для работы с массивами. Таковыми являются ранее рассмотренные функции ones, zeros, sum, cat, size, ndims, reshape и многие другие. Часть из этих функций сообщает служебную информацию о массивах, другая группа функций обеспечивает контролируемое изменение их структуры, третья группа предназначена для генерации массивов с заданными свойствами и т. д.
Среди функций, генерирующих матрицы с заданными свойствами, упомянем здесь функцию eye, производящую единичные квадратные матрицы, а также широко применяемую на практике функцию rand, генерирующую массив со
38
Глава 1. Числовые массивы в системе MATLAB
случайными элементами, равномерно распределенными на интервале от 0 до 1. Например, выражение
А = rand( 3 )
порождает массив случайных чисел размером 3 х 3 с элементами, равномерно распределенными на интервале от 0 до 1 (см. рис. 1.19).
> MATLAB Command Window
ЕНв Edit №dow_t]elp
A =
l\
I
0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 J 0.6068 0.7621 0.8214
Рисунок 1.19
Если вызвать эту функцию с двумя аргументами, например
R = rand( 2, 3 )
то получится матрица R случайных элементов размером 2x3. При вызове функции rand с тремя и более скалярными аргументами производятся многомерные массивы случайных чисел.
Среди функций, производящих простейшие вычисления над массивами, помимо рассмотренной выше функции sum, упомянем еще функцию prod, которая во всем аналогична функции sum, только вычисляет она не сумму элементов, а их произведение. К примеру, для определенной выше матрицы В она возвращает следующий результат:
prod( В ) ans = 0 0 0
Функции max и min ищут соответственно максимальный и минимальный элементы массивов. Для векторов они возвращают единственное числовое значение, а для матриц они порождают набор экстремальных элементов, вычисленных для каждого столбца. Например,
тах( В ) ans = 7 7 7
г
MATLAB 5.x. Вычисления, визуализация, программирование 39
Функция sort сортирует в возрастающем порядке элементы одномерных массивов, а для матриц она производит такую сортировку для каждого столбца отдельно.
Наконец, рассмотрим уникальную возможность М-языка системы MATLAB производить групповые вычисления над массивами, используя обычные математические функции, которые в традиционных языках программирования работают только со скалярными аргументами. В результате с помощью крайне компактных записей, удобных для ввода с клавиатуры в интерактивном режиме работы с командным окном системы MATLAB, удается произвести большой объем вычислений. Например, всего два коротких выражения
х = 0 : 0.01 : pi/2; у = sin( x );
вычисляют значения функции sin сразу в 158 точках, формируя два вектора х и у со 158 элементами каждый. Это уже весьма большой объем информации о функции, достаточный для построения ее подробного графика. В частности, уже в следующей главе мы расскажем о том, как с помощью вызова всего одной функции системы MATLAB, на вход которой нужно подать полученные сейчас векторы х и у, можно построить график изучаемой функции в правильно подобранном масштабе, с отметками на осях координат и т. д.
Множественная индексация массивов в системе MATLAB
Мы только что рассмотрели уникальную возможность системы MATLAB осуществлять множественные вычисления обычными математическими функциями. Теперь мы рассмотрим другую уникальную особенность М-языка системы MATLAB - множественную индексацию массивов.
Начнем рассмотрение этого вопроса на примере векторов (одномерных массивов). Сформируем вектор v
vl =[987654321];
состоящий из девяти элементов. Пусть нам надо из этого вектора осуществить выборку нескольких элементов для формирования другого вектора v2. Для определенности будем выбирать второй, шестой и восьмой элементы. Тогда, если действовать в духе традиционных языков программирования, можно предложить следующее решение:
v2 = [ vl(2), vl(6), vl(8) ]
Здесь мы трижды осуществляем индексацию исходного массива vl, каждый раз со своим индексом, и полученные результаты группируем (при помощи операции конкатенации) в результирующий массив v2.
40 Глава 1. Числовые массивы в системе MATLAB
Синтаксис М-языка системы MATLAB позволяет выполнить эту работу короче, без видимого применения операции конкатенации результатов. Вот это решение, основанное на множественной индексации массивов в системе MATLAB:
v2 = vl( [268] )
Здесь вместо скалярного индекса подставляется вектор, содержащий целый набор индексов (индексами являются его элементы). В результате получается тот же результат, что и при нескольких индивидуальных индексациях. Множественная индексация обеспечивает не только более компактные записи, но и большее быстродействие вычислений.
С помощью множественной индексации можно не только извлечь подмножество элементов исходного массива, но и продублировать некоторые из них. Например, выражение
v2 = vl( [ 2 2 6 8 8 8 ] ) v2 =
8 8 4 2 2 2
не только извлекает из исходного вектора vl второй, шестой и восьмой элементы, но и повторяет их по нескольку раз. В частности, второй элемент вектора vl взят в двух экземплярах, а восьмой элемент - в трех.
С помощью операции множественной индексации легко переставлять местами элементы сформированного массива:
v2 = v2 ( [13 2 4 5 6] ) • v2 =
8 4 8 2 2 2
Здесь мы переставили местами второй и третий элементы массива v2. Если из массива требуется извлечь подряд расположенные элементы, то очень удобно использовать операцию формирования диапазона. Например, если из вектора vl требуется извлечь подвектор v2, состоящий из элементов с пятого по восьмой, то эта задача решается с помощью следующего выражения, использующего множественную индексацию и операцию формирования диапазона: