Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Числовые функции

.pdf
Скачиваний:
9
Добавлен:
10.05.2015
Размер:
272.03 Кб
Скачать

Функции от числовых массивов

Все элементарные функции работают также и с массивами. Вычисления проводятся поэлементно. Например, функция 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) возвращает накопленную сумму элементов вдоль разных измерений в массиве.