Список встроенных функций, предназначенных для обработки массивов, доступен через меню Insert/Function. Основные функции сосредоточены в группе "Vector And Matrix", однако и другие группы содержат множество специальных функций, которые либо используют массивы в качестве входных параметров, как, например, рассмотренная выше функция vec2str(), либо возвращают в виде массива результаты своей работы, как, например, функция str2vec().
Некоторые из функций основной группы приведены в таблице 4 и на рисунках 11 и 12, функции других групп будут рассмотрены в последующих разделах пособия. Обозначения аргументов функций в таблице 4 – те же, что и в таблице 3.
Таблица 4 – Функции для обработки массивов
Назначение
Функция
Возвращаемый результат
Определение параметров массивов
rows(A)
Число строк в массиве
cols(A)
Число столбцов в массиве
length(V)
Длина (число элементов) вектора
last(V)
Индекс последнего элемента вектора
max(A)
Наибольший элемент массива
min(A)
Наименьший элемент массива
tr(M)
Сумма диагональных элементов квадратной матрицы
Формирование массивов
identity(n)
Единичная квадратная матрица n´n
diag(V)
Диагональная матрица, содержащая на диагонали элементы вектора V
augment (A,B)
Массив, получаемый расположением массива В справа от массива А. (массивы должны иметь одинаковое число строк)
stack(A,B)
Массив, получаемый расположением массива В под массивом А (массивы должны иметь одинаковое число столбцов)
submatrix (A,i,j,m,n)
Массив - фрагмент массива А: строки с i-го по j-й, столбцы с m-го по n-й
Окончание таблицы 4
Сортировка элементов массивов
sort(V)
Вектор той же размерности, в котором элементы упорядочены по возрастанию
reverse(A)
Массив (вектор либо матрица) той же размерности, в котором строки расположены в обратном порядке
csort(A,n)
Массив той же размерности, в котором элементы n-го столбца упорядочены по возрастанию, и строки "переставлены" в соответствии с новым положением соответствующих элементов n-го столбца
rsort(A,n)
Массив той же размерности, в котором элементы n-й строки упорядочены по возрастанию, и столбцы "переставлены" в соответствии с новым положением соответствующих элементов n-й строки
Поиск
элементов массивов
match(z,A)
Вектор, содержащий индексы элементов массива A, равных z
lookup (z,A,B)
Вектор, содержащий элементы массива B, расположенные в тех же позициях, что и элементы массива A, имеющие значение z.
hlookup (z,A,n)
Вектор, содержащий элементы n-й строки массива A, расположенные в тех же столбцах, что и элементы верхней строки, равные z.
vlookup (z,A,n)
Вектор, содержащий элементы n-го столбца массива A, расположенные в тех же строках, что и элементы левого столбца, равные z.
Рисунок 11 – Примеры использования функций для обработки массивов
В порядке комментария к приведенным на рисунке 11 примерам следует отметить одну важную особенность, ограничивающую использование функций сортировки массивов и функций вычисления максимальных и минимальных значений их элементов: все элементы массива, являющегося операндом любой из этих функций, могут быть только скалярами сравнимых типов данных (точно такое же ограничение накладывается и на использование функции match(), которая будет рассмотрена позднее).
При этом сравнение числовых скаляров производится по их значениям, а строковых – в "алфавитном порядке", то есть по значениям числовых ASCII-кодов символов строки (слева направо). Например, 123 > 13, но: "123" < "13", "abcd" < "abcdef", 9" < "A", "S" < "s", "Z" < "a". Другими словами, символ пробел "меньше" любого другого печатаемого символа, цифра "2" меньше цифры "3", но "больше" цифры "1", любая цифра "меньше" любой буквы, любая прописная буква "меньше" любой строчной.
Рисунок 12 – Функции поиска элементов массивов
На рисунке 12 приведены примеры использования функций группы lookup, используемых для поиска элементов массивов по различным критериям. В примерах используются три массива: матрица A и вектор B, все элементы которых – числовые скаляры, и матрица С, в которой элементы первой строки и двух первых столбцов имеют строковый тип данных, а остальные элементы – числовой.
Рисунок 12 a) иллюстрирует работу функции match(). Эта функция осуществляет поиск элементов исходного массива, равных заданному значению, и возвращает вектор, содержащий индексы найденных элементов. Если исходный массив – вектор, то элементами результирующего вектора являются целочисленные скаляры (одиночные индексы), если же поиск осуществляется в матрице, то каждый элемент результирующего массива (на рисунке это массив Q) содержит двойной индекс, представленный в форме двухэлементного вектора. Во всех случаях, когда элементами массива являются другие массивы, MathCAD отображает на экране не значения этих элементов, а их размерность (в данном примере - в виде {2,1}). Доступ к каждому элементу результирующего вектора осуществляется по его индексу, например элемент Q0 представляет двойной индекс первого из найденных элементов в массиве А в виде двухэлементного вектора, в котором нулевой элемент – номер строки, первый элемент – номер столбца.
Существует ограничение на использование массива в качестве аргумента функции match() – все элементы такого массива должны быть скалярами одинакового типа данных. Например, выражение match(155,С) является недопустимым, так как массив С не является однородным, однако, выражение match("Anna",С<0>) является корректным, так как все элементы нулевого столбца массива С имеют одинаковый (строковый) тип данных.
Функция lookup(2,В,С) в примере б) отыскивает в массиве С элементы, расположенные в тех же позициях, что и элементы массива В, имеющие значение 2. Функция vlookup(2,А,2) отыскивает во втором столбце массива А элементы, расположенные в тех же строках, что и элементы нулевого столбца этого же массива, равные двум. Функция hlookup() в этом примере возвращает значение элемент массива С, расположенный на пересечении столбца с первым (левым) элементом "Phone" и строки с первым (левым) элементом "Anna".
В примере в) определена пользовательская функция search(), предназначенная для поиска в массиве C элемента, номер строки которого задается значением элемента нулевого столбца массива (переменная Who), а номер столбца – значением элемента нулевой строки (переменная What).
Функция search_all() (пример г) получает значение элемента нулевого столбца матрицы С и возвращает соответствующую строку этой матрицы, дополненную нулевой строкой-заголовком.