Числовые функции
.pdfФункции от числовых массивов
Все элементарные функции работают также и с массивами. Вычисления проводятся поэлементно. Например, функция sin(x) в качестве результата выдаст матрицу такого же размера как и входная, элементами которой будут значения синусов соответствующих элементов исходной матрицы.
Ниже приведены встроенные функции для работы с числовыми массивами в системе MATLAB.
help <имя m-функции>
В командном окне воспроизводит комментарий (описание и синтаксис), следующий за строкой заголовка с определением —функции в соответствующем —файле.
MOD
Возвращает остаток от деления одного числа (X) на другое (Y). Реализована на аппаратном уровне. Вызов функции в текстовый редактор (>> edit mod) возвращает только строки комментария.
Синтаксис: M = mod(X,Y).
Функция M = mod(X,Y) возвращает следующие значения:
• X – n.*Y, где n = floor(X./Y) (floor — функция округления с недостатком: floor(3.8) → 3), если Y ˜= 0. Если Y не является целым или частное от деления X./Y находится в пределах ошибки округления до целого, n все равно равно этому целому. X и Y могут быть вещественными массивами одинакового размера или вещественными скалярами;
• по принятым соглашениям mod(X,0) есть X; mod(X,X) есть 0; mod(X,Y) для X ˜= Y и Y ˜= 0 того же знака, что и Y.
Замечания:
rem(X,Y) для X =Y и Y =0 имеет тот же знак, что и X.
mod(X,Y) и rem(X,Y) равны, если X и Y имеют один знак, и отличаются по Y, если X и Y имеют разные знаки.
Функция mod полезна для установления отношения конгруэнтности (соразмерности, соответствия, совпадения, сравнения по модулю ): x и y конгруэнтны тогда и только тогда, когда mod(x,m) == mod(y,m).
Примеры:
>>mod(13,5) ans =
3
>>mod([1:5],3) ans =
1 |
2 |
0 |
1 |
2 |
>>mod(12,3.1) ans =
2.7000
>>mod(magic(3),3) ans =
2 1 0
0 |
2 |
1 |
1 |
0 |
2 |
REM
Возвращает остаток от деления одного числа (X) на другое (Y). Синтаксис: R = rem(X,Y).
R = rem(X,Y), если Y ˜= 0, возвращает X – n.*Y, где n = fix(X./Y) (fix
округляет входные значения в сторону нуля: fix(3.8) → 3). Если Y не является целым или частное от деления X./Y находится в пределах ошибки округления до целого, n все равно равно этому целому. X и Y могут быть вещественными массивами одинакового размера или вещественными скалярами;
• по принятым соглашениям rem(X,0) есть NaN; rem(X,X) для X ˜= 0, есть 0; rem(X,Y) для X ˜= Y и Y ˜= 0 того же знака, что и X. Замечания:
mod(X,Y) для X ˜= Y и Y ˜= 0, имеет тот же знак, что и Y.
rem(X,Y) и mod(X,Y) равны, если X и Y имеют один знак, и отличаются по Y, если X и Y имеют разные знаки.
Функция rem возвращает значение, находящееся между 0 и sign(X)*abs(Y). Если Y есть zero, rem возвращает NaN.
ISEMPTY
Определяет, пуст массив или нет. Синтаксис: tf = isempty(A).
Функция tf = isempty(A) возвращает логическое значение true (1), если A является пустым массивом и false (0) в противном случае. Пустой массив не содержит элементов. Пустой массив содержит по крайней мере один нулевой размер, например, 0 × 0 (0-by-0) или 0 × 5 (0-by-5).
Пример вызова функции isempty для массива B с тремя индексами:
>> B = rand(2,2,2)
B(:,:,1) =
0.9501 0.6068
0.2311 0.4860 B(:,:,2) =
0.8913 0.4565
0.7621 0.0185
>>B(:,:,:) = [ ];
>>isempty(B)
ans = 1
ISNUMERIC
Определяет, является ли входной массив числовым массивом. Синтаксис: tf = isnumeric(A).
Функция tf = isnumeric(A) возвращает логическую 1 (true), если массив является числовым, и логический 0 (false) в противном случае.
ISREAL
Определяет, является ли входной массив числовым массивом действительных чисел, т. е. массивом типа (класса) real.
Синтаксис: tf = isreal(A).
Функция tf = isreal(A) возвращает логическое значение 0 (false), если хотя бы один элемент в массиве имеет мнимую часть, даже если ее
значение равно 0. Функция возвращает логическую 1 (true) в противном случае. Отсутствие мнимой части в массивах типа logical, char, int... приводит к тому, что функция isreal при работе с ними также возвращает логическую 1.
ISCHAR
Определяет, является ли входной массив строкой символов. Синтаксис: tf = ischar(A).
Функция tf = ischar(A) возвращает логическую 1 (true), если — массив символов, и логический 0 (false) в противном случае.
ISLOGICAL
Определяет, является ли входной массив массивом типа logical. Синтаксис: tf = islogical(A).
Функция tf = islogical(A) возвращает логическую 1 (true), если — логический массив и логический 0 (false) в противном случае.
ISEQUAL
Проверяет входные массивы на равенство. Синтаксис: tf = isequal(A, B,...).
Функция tf = isequal(A, B, ...) возвращает логическую 1 (true), если входные массивы являются массивами одного типа данных, имеют один размер и одно содержание, и возвращает логический 0 (false) в противном случае.
Пример 1: Дано:
A = |
B = |
|
|
C = |
|
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
isequal(A,B,C) возвращает 0, а isequal(A,B) возвращает 1.
Пример 2:
Сравнивая числовые данные, не важно какого они типа:
>> A = [25 50]; B = [int8(25) int8(50)]; isequal(A, B)
ans = 1
Пример 3:
Массивы, содержащие элементы типа NaN (Not a Number), не могут быть
равными, поскольку «не числа» NaN не могут равняться числам и самим себе по определению:
>>A = [32 8 -29 NaN 0 5.7];
>>B = A;
>>isequal(A, B)
ans = 0
INPUT
Требует от пользователя ввода конкретного значения. Синтаксис:
user_entry = input('prompt') user_entry = input('prompt', 's')
Ответом на запрос о вводе какого-либо значения может быть любое выражение, составленное по правилам MATLAB, которое вычисляется с использованием значений переменных текущего рабочего пространства (in the current workspace).
Вызов user_entry = input('prompt') приводит к тому, что на экран высвечивается мигающий курсор, ожидая ввода конкретных значений или выражений с клавиатуры. Результат записывается в переменную user_entry.
Вызов user_entry = input('prompt', 's') помещает в текстовую переменную user_entry набранное выражение или числовое значение как простой текст.
Замечания:
1)если вы нажали клавишу <Enter> без ввода конкретного значения, то в переменную user_entry будет помещена пустая матрица;
2)текстовая строка 'prompt' может содержать разделители строк '\n',
означающие переход на новую строку. Это позволяет тексту 'prompt' занимать несколько строк. Для отображения символа «обратный слэш» (\) используется комбинация '\\';
3)при наборе неверного выражения будет выдано сообщение об ошибке и MATLAB попросит повторить ввод;
4)все используемые в 'prompt' знаки должны быть символами. Для не символов необходимо переделывать их в символьные значения, например, числа — с помощью функции nun2str(), целочисленные значения — с помощью функции int2str(). Для объединения нескольких строк символов в одну необходимо использовать операцию конкатенации [ ].
Примеры:
Нажмите на <Enter>, чтобы в переменную reply записать пустую матрицу, принятую для ввода значением по умолчанию:
>>reply = input('Хотите ещё? Y/N [Y]: ', 's');
>>if isempty(reply)
reply = 'Y';
end
CLASS
Создает объект MATLAB или возвращает его тип (класс). Синтаксис: C = class(obj) — возвращает тип (класс) объекта obj. Возможные значения классов объектов:
double — традиционный для MATLAB массив чисел с плавающей точкой и с двойной точностью;
single — массив чисел с плавающей точкой и с одинарной точностью; logical — логический массив;
char — массив символов; cell — массив ячеек; struct — массив структур;
function_handle — указатель функции;
int8 — 8-битовый знаковый массив целых чисел; uint8 — 8-битовый беззнаковый массив целых чисел; int16 — 16-битовый знаковый массив целых чисел; uint16 — 16-битовый беззнаковый массив целых чисел; int32 — 32-битовый знаковый массив целых чисел; uint32 — 32-битовый беззнаковый массив целых чисел; int64 — 64-битовый знаковый массив целых чисел; uint64 — 64-битовый беззнаковый массив целых чисел; <class_name> — пользовательский класс объектов; <java_class> — имя Java класса для java–объектов.
SUM
Возвращает сумму элементов массива. Синтаксис:
B = sum(A)
B = sum(A, dim)
B = sum(A, 'double')
B = sum(A, dim, 'double')
B = sum(A, 'native')
B = sum(A, dim, 'native')
B = sum(A) результат суммирования элементов зависит от представления массива и разнится вдоль разных измерений в массиве.
Если массив A — вектор, sum(A) возвращает сумму его элементов. Если массив A — матрица, sum(A) делит матрицу на столбцы и воз-
вращает вектор—строку, состоящую из сумм элементов каждого столбца. Если массив A — многомерный массив, sum(A) обрабатывает значения вдоль первого не единичного измерения как векторы и возвращает
массив вектор—строк.
B= sum(A,dim) суммирует элементы A вдоль измерения, определенного в скаляре dim (1 — складываются соответствующие элементы строк; суммы записываются в вектор—строку, 2 — складываются соответствующие элементы столбцов; суммы записываются в вектор—столбец. По умолчанию dim = 1).
B= sum(..., 'double') представляет добавленные массивы в виде чисел double (с двойной точностью) и возвращает ответ также типа double даже, если A имеет тип single или integer. Для данных типа integer это принято по умолчанию.
B= sum(..., 'native') представляет добавленные массивы в виде массива собственного типа и возвращает результат такого же типа. Для данных типа single и double это принято по умолчанию.
Замечание:
sum(diag(X)) вычисляет след матрицы X. Примеры:
Для dim = 1 (суммирование строк) и dim = 2 (суммирование столбцов):
>>X = [0 1 2;...
3 4 5]
>>sum(X,1) ans =
[3 5 7]
>>sum(X,2) ans =
[3 12]
Магическая квадратная матрица 3-порядка есть:
>> M = magic(3) M =
8 1 6
3 |
5 |
7 |
4 |
9 |
2 |
Матрица называется магической, если суммы элементов в каждом столбце и в каждой строке равны:
sum(M) =
15 15 15 sum(M') =
15 15 15
Ещё примеры:
>>sum(single([2 5 8])) ans =
15
>>class(ans)
ans = single
>>sum(int8([2 5 8]),'native');
>>class(ans)
ans = int8
CUMSUM
Возвращает кумулятивную (накопленную, общую, интегральную) сумму элементов.
Синтаксис:
B = cumsum(A)
B = cumsum(A,dim)
B = cumsum(A) возвращает накопленную сумму элементов вдоль разных измерений в массиве.