Урок №8.

Операторы и функции

Начиная с этого урока мы переходим к изучению математических и логических возможностей системы MATLAB. Их изучение мы начнем с операторов и функций — тех кирпичиков, из которых строятся математические выражения. Вычисления математических выражений составляют главную цель любой системы, предназначенной для численных расчетов. Здесь мы рассмотрим полный набор операторов входного языка системы MATLAB 6.0 и соответствующих им функций. Напомним, что полный список операторов выводится командой help ops. Операторы и специальные символы системы MATLAB можно разделить на ряд категорий, которые рассматриваются ниже.

Арифметические операторы и функции

Арифметические операторы являются самыми распространенными и известными. В отличие от большинства языков программирования в системе MATLAB практически все операторы являются матричными, т. е. предназначены для выполнения операций над матрицами. В табл. 8.1 приводится список арифметических операторов и синтаксис их применения.

Таблица 8.1. Арифметические операторы и функции MATLAB

Функция

Название Оператор

Синтаксис

Plus

Плюс +

М1+М2

Uplus

Унарный плюс +


Minus

Минус

М1-М2

Uminus

Унарный минус


Mtimes

Матричное умножение *

М1*М2

Times

Поэлементное умножение массивов .*

А1*А2

Mpower

Возведение матрицы в степень

М1^х

Power

Поэлементное возведение массива в степень

А1^х

Mldivide

Обратное (справа налево) деление матриц \

M1\M2

Mrdivide

Деление матриц слева направо /

М1/М2

Ldivide

Поэлементное деление массивов справа налево . \

А1.\А2

Rdivide

Поэлементное деление массивов слева направо . /

А1 . /А2

Kron

Тензорное умножение Кронекера kron

kron(X.Y)

Обратите внимание на то, что каждый оператор имеет аналогичную по назначению функцию. Например, оператору матричного умножения * соответствует функция mtimes(Ml,M2). Примеры применения арифметических операторов уже не раз приводились, так что ограничимся несколькими дополнительными примерами:

» А=[1 2 3]; 

» В=[4 5 6]: 

» В-А

 ans=

3

3                 3

» minus (В. А)


ans =


3

3                 3

» А.^2


ans =


1

4                  9

» power(A,2)


ans =


1

4                  9

» ДАВ


ans=


4.0000

2.5000          2.0000

» Idivide(A.B)


ans=


4.0000

2.5000            2.0000

» rdivide(A.B)


ans=


0.2500

0.4000             0.5000

Соответствие функций операторам и командам в системе MATLAB является одним из основных положений программирования. Оно позволяет одновременно использовать элементы как операторного, так и функционального программирования.

Следует отметить, что в математических выражениях операторы имеют определенный приоритет исполнения. Например, в MATLAB приоритет логических операторов выше, чем арифметических, приоритет возведения в степень выше приоритетов умножения и деления, приоритет умножения и деления выше приоритета сложения и вычитания. Для изменения приоритета операций в математических выражениях используются круглые скобки. Степень вложения скобок не ограничивается.

Операторы отношения и их функции

Операторы отношения служат для сравнения двух величин, векторов или матриц. Все операторы отношения имеют два операнда, например х и у, и записываются, как показано в табл. 8.2.

Таблица 8.2. Операторы и функции отношения

Функция Название  Оператор Пример
Eq  Равно  = = x = = y
Ne He равно ~ = x ~ = y
Lt Меньше чем < x<y
Gt Больше чем > x>y
Le Меньше или равно <= x<=y
Ge Больше или равно >= x>=y

Данные операторы выполняют поэлементное сравнение векторов или матриц одинакового размера и возвращают значение 1 (True), если элементы идентичны, и значение 0 (False) в противном случае. Если операнды — действительные числа, то применение операторов отношения тривиально:

» eqC2.2) 

ans =

1

» 2==2 

ans =

1

» ne(l,2)

 ans =

1

» 2 ~- 2 

ans =

0

» 5 > 3 

ans =

1

» le(5.3) 

ans =

0

Следует отметить, что операторы <, <=, > и >= при комплексных операндах используют для сравнения только действительные части операндов — мнимые отбрасываются. В то же время операторы == и ~= ведут сравнение с учетом как действительной, так и мнимой частей операндов. Следующие примеры поясняют это положение:

» (2+3i)>-(2+i) 

ans=

1

» (2+3i)>(2+i) 

ans=

0

» abs(2+3i)>abs(2+i) 

ans =

1

» (2+3i)—(2+i) 

ans =

0

» (2+3i)-(2+i) 

ans =

1

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

M=

-1    0

1     2 

» М>=0 

ans =

0     1

1     1

В общем случае операторы отношения сравнивают два массива одного размера и выдают результат в виде массива того же размера:

» М>[0 1;.1 0]

ans =

0    0 

0     1

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

» 'b'>'а' 

ans =

1

» 'abc'= ='abc' 

ans =

1     1     1 

» 'cba'<'abc' 

ans = 

0     0     1

В этом случае символы, входящие в выражения, представляются своими ASCII-кодами. Строки воспринимаются как векторы, содержащие значения кодов. Все это надо учитывать при использовании управляющих структур языка программирования, в которых широко применяются операторы отношения.

Логические операторы

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

Таблица 8.3. Логические операторы и функции MATLAB

Функция

Название 

And

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

Or

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

Not

Логическое НЕ (NOT) ~

Хог

Исключающее ИЛИ (EXCLUSIVE OR)

Any

Верно, если все элементы вектора равны нулю

All

Верно, если все элементы вектора не равны нулю

Работа операторов поясняется приведенными ниже примерами:

»А=[1 2 3]; 

»В=[1 0 0]; 

» and(A.B) 

ans =

1    0    0

 » оr(А.В)

ans =

1    1     1 

» А&В 

ans =

1    0    0 

» А|В 

ans=

1     1     1

 » not(А)

 ans =

0    0    0 

» not(B) 

ans =

0     1     1 

» ~B 

ans=

0    1    1 

» xor(A.B)

 ans =

0     1     1 

» any(A) 

ans =

    1

» all([0 0 0])

 ans =

0

» all(B) 

ans =

0

» and('abc'.'012') 

ans =

1     1     1

Обратите внимание, что аргументами логических операторов могут быть числа и строки. При аргументах-числах логический нуль соответствует числовому нулю, а любое отличное от нуля число воспринимается как логическая единица. Для строк действует уже отмеченное правило — каждый символ строки представляется своим ASCII-кодом.

Специальные символы

К классу операторов в системе MATLAB относятся также специальные символы. Они предназначены для создания самых разнообразных объектов входного языка и языка программирования системы и придания им различных форм. В табл. 8.4 представлено описание полного набора специальных символов.

Таблица 8.4. Специальные символы MATLAB

Обозначение

Название

Категория

:

Двоеточие

colon

( )

Круглые скобки

paren

[ ]

Квадратные скобки

paren

{ }

Фигурные скобки

paren

.

Десятичная точка

punct


.

Выделение поля структуры

punct


..

Родительский каталог

punct


...

Продолжение строки

punct

,

Разделитель

punct


;

Точка с запятой

punct

%

Комментарий

punct

i

Вызов команды операционной системы

punct

=

Присваивание

punct

1

Кавычка

punct

1

Транспонирование

transpose

1

Транспонирование с комплексным сопряжением

ctranspose

[,]

Горизонтальная конкатенация

horzcat

[;]

Вертикальная конкатенация

vertcat

( ).( }..

Присваивание подмассива

subsasgn

( ).{ }..

Ссылка на подмассив

subsref


Индекс подмассива

subsindex

Теперь рассмотрим их более подробно.

Оператор : использует следующие правила для создания векторов:

Ниже показано, как выбирать с помощью оператора : строки, столбцы и элементы из векторов, матриц и многомерных массивов:

Символы ( ) (круглые скобки) используются для задания порядка выполнения операций в арифметических выражениях, указания последовательности аргументов функции и указания индексов элемента вектора или матрицы. Если X и V — векторы, то X(V) можно представить как [X(V(D), X(V(2)).....X(V(n))]. Элементы вектора V должны быть целыми числами, чтобы их можно было использовать как индексы элементов массива X. Ошибка генерируется в том случае, если индекс элемента меньше единицы или больше, чем size(X). Такой же принцип индексирования действителен и для матриц. Если вектор V имеет т компонентов, а вектор W — п компонентов, то A(V,W) будет матрицей размера mxn, сформированной из элементов матрицы А, индексы которой — элементы векторов V и W.

Символы [ ] (квадратные скобки) используются для формирования векторов и матриц:

Еще несколько примеров:

Символы { } (фигурные скобки) используются для формирования массивов ячеек. Например, {magic(3) 6.9 'hello'} — массив ячеек с тремя элементами.

Символ . (десятичная точка) используется для отделения дробной части чисел от целой. Например, 314/100, 3.14 и .314е1 — одно и то же число.

Кроме того, символ точки . используется для выделения полей структур. Например, A.(field) и A(i).field, где А — структура, означает выделение поля структуры с именем «field».

Ниже перечислено назначение остальных специальных символов MATLAB:

» a-'Hello''my friend'

а =

Hello'my friend

Системные переменные и константы

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

» cos([0:2*pi]) 

ans =

1.0000 0.5403 -0.4161 -0.9900 -0.6536 0.2837 0.9602

» [str.maxsize] = computer 

str = 

PCWIN 

maxsize = 

268435455

» eps 

ans =

2.2204е-016

» w=3+5i 

w =

3.0000 + 5.00001

» 4/0

Warning: Divide by zero.

ans=

Inf

Переменным i и j можно задать и иное значение, например, они могут выступать в ка-честве индексов в циклах for. Однако это чревато путаницей, если внутри цикла пользователь задает выражения с комплексными числами.[Используйте как индексы I и J вместо 1 и j.— Примеч. ред.]

» s=4-3j 

s =

4.0000 - 3.00001

» s=0/0

Warning: Divide by zero. 

s =NaN

Функция nargchk часто используется внутри m-файлов для проверки соответствия количества входных параметров (аргументов):

» msg = nargchk(4,9.5) 

msg =

[ ]

» msg = nargchk(4.9.2) 

msg = Not enough input arguments.

Еще две функции позволяют определить число входных и выходных параметров функции:

Применение этих функций мы рассмотрим немного позже при описании структуры функций.

Продолжаем перечисление системных переменных:

» pi

ans = 3.1416

» n = real max

n =

1.7977е+308

» n = realmin 

n =

2.2251е-308

Переменные varargin и varargout позволяют использовать в функциях переменное число входных и выходных параметров:

Переменные varargin и varargout используются только внутри m-файлов функции для задания произвольных аргументов функции. Эти переменные должны быть последними в списке входов или выходов, а для их обозначения могут использоваться только строчные буквы. Использование этих возможностей мы рассмотрим несколько позже.

Функции поразрядной обработки

Ряд функций предназначен для поразрядной логической обработки данных:

» f-bitand(7,14)

f =

6

» g=bitcmp(6,4) 

g =

9

» v=bitor(12.21)

v = 29

» bitmax

ans =

9.0072е+015

» d=bitset(12.2.1) 

d = 

14

» f=bitshift(4.3) 

f =

32

» disp(dec2bin(23))

10111

» С = bitget(23.5:-l:l)

С =

1    0    1    1    1

» x=bitxor(12.31) 

х = 

19

Чтобы операнды этих функций гарантированно были целыми числами, при их задании рекомендуется использовать функции ceil, fix, floor и round.

Функции обработки множеств

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

Пример:

» А = [1 7 2 6]: В = [7 2 3 4 6 1]; 

» [c.ia.ib] = intersect(А.В)

1    2    6    7

ia =

1    3    4    2 

ib = 

6    2    5    1

Пример:

» set = [0 1 3 5 7 9 11 15 17 19]; 

» а=[1 2345678]; 

» k = ismember(a.set) 

k =

1    0    1    0    1    0    1    0

Если входной массив а является матрицей, то он расценивается как вектор-столбец а(:).

Пример:

» а=[2 3 5 7 8 9 10 13 20]; 

» b=[1456894] 

» с = setdiff(a.b) 

с=

2 3 7 10 13 20

Если массив а является матрицей, то он расценивается как вектор-столбец а(:).

Пример:

» а = [-1 0 1 Inf -Inf NaN]; 

» b = [-2 pi 0 Inf]; 

» с = setxor(a.b)

с =

 -Inf -2.0000-1.00001.0000 3.1416 NaN

» а=[2.4.-4,9.0]:b=[2.5,4]: 

» [c.ia,ib]=union(a.b) 

с =

-4    0    2    4    5    9 

ia =

3    5    4 

ib =

1     3     2

Примеры:

» b=[-2,3.5.4,1.-6,2.2.7]

 b=

-2    3    5    4    1    -6    2    2    7 

» [c.i.j]=unique(b)

с =


-6

-2

1      2   3    4

5     7


6

1

5      8   2    4

3     9

j

=





2

5

7      6   3   1

4     4

»

a-[-2,

3.5:4.

l.-6:2,2.7;-2.3,5J


a

=





-2

3

5



4

1

-6



2

2

7



-2

3

5


»

c=uniqueCa. '

rows ' )


с

=





-2

3

5



2

2

7



4

1

-6


Функции времени и даты

Ряд функций служит для возврата текущего времени и даты. Они перечислены ниже.

Вызов функции без присваивания результата выдает календарь на экран. Примеры:

» calendar

Jul 2000

S

М

Tu

W

Th

F

S

0

0

0

0

0

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

0

0

0

0

0

calendar(700477)

Nov 1917

S

M

Tu

W

Th

F

S

0

0

0

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

0

0

0

0

0

0

0

0

» c=clock 

с =

l.0e+003 *

2.0000     0.0070     0.0240     0.0200     0.0120     0.0148

» fix(clock) 

ans =

2000     7     24     20     12     26

» +tl=cputime: w=surf(peaks(30));cputime-tl 

ans = 

0.2200

» d = date 

d =

24-Jul-2000

Пример:

» n1 = datenum('26-Nov-1998') 

n1 =

730085

» Y-[1998.2000]:M-[l,12]:D-23;N-datenum(Y.M.D) 

N =

729778     730843

Таблица 8.5. Форматы представления даты

Dateform(номер)      

Dateform (строка)

Пример

0

 'dd-rmiM-yyyy HH:MM:SS'

1l-Mar-1995 03:45

1

 'dd-mmM-yyyy'

Ol-Mar-1995

2

'mm/dd/yy'

03/01/95

3

 ' mmm '

Mar

4

 'm'

M

5

 'mm'

3

6

 'mm/dd'

03/01

7

'dd'

1

8

 'ddd'

Wed

9

 'd'

W

10

 'УУУУ'

1995

11

 'УУ

95

12

 ' mmmyy '

Mar95

13

 'HH:MM:SS'

15:45:17

Любой компонент входного вектора, который не вписывается в нормальный диапазон дат, преобразуется в следующий диапазон (так, например, несуществующая дата June 31 преобразуется в July 1). Допускаются значения нулевого месяца и нулевого дня. Например:

» n = datevecC 11/31/98') 

n=

1998     12     1     0     0     0 

» n = datevec(710223) 

n =

1944     7     10     0     0

О eomday (Y, М) — возвращает последний день года и месяца, заданных соответственно элементами массивов Y и М. Пример (нахождение високосных лет двадцатого столетия):

» у = 1900:1999; 

» Е = eomday(y.2); 

» y(find(E==29)) 

ans=

Columns 1 through 6

1904 1908 1912 1916 1920 1924 

Columns 7 through 12

1928 1932 1936 1940 1944 1948 

Columns 13 through 18

1952 1956 1960 1964 1968 1972 

Columns 19 through 24

1976 1980 1984 1988 1992 1996

Т = [год месяц день час минуты секунды].

Функция работает некорректно, если в текущий промежуток времени попадут границы месяца или года, что, однако, случается крайне редко и исправляется при повторе операции. Пример (вычисляется время, затрачиваемое на быстрое преобразование Фурье с 2048 точками):

» х = rand(2048,l):t = clock; fft(x); etime(clock.t):etime (clock.t) 

ans = 

0.0500

» tl = now, t2 = rem(now.l) 

tl =

7.3009e+005

t2 =

0.6455

» tic.surf(peaks(50));toc 

elapsed_time =

 0.7600

» D=[728647,735730]:[N.S] = weekday(D) 

N =

2     1

S=

Mon     Sun

Элементарные функции

Элементарные функции, пожалуй, наиболее известный класс математических функций. Поэтому, не останавливаясь подробно на их описании, представим набор данных функций, имеющийся в составе системы MATLAB. Функции, перечисленные ниже, сгруппированы по функциональному назначению. В тригонометрических функциях углы измеряются в радианах. Все функции могут использоваться в конструкции вида y=func(x), где func — имя функции. Обычно в такой форме задается информация о функции в системе MATLAB. Мы, однако, будем использовать для функций, возвращающих одиночный результат, более простую форму func(x). Форма [y,z,...]=func(x....) будет использоваться только в тех случаях, когда функция возвращает множественный результат.

Алгебраические и арифметические функции

В системе MATLAB определены следующие алгебраические и арифметические функции:

abs(-5) = 5

abs(3+4i) =5 

» abs([l -2 1 3i 2+31])

ans =

1.0000     2.0000     1.0000     3.0000     3.6056

Примеры:

» ехр([1 23])

ans =

2.7183     7.3891     20.0855

» exp(2+3i) 

ans =

-7.3151 + 1.0427i

f = factor(221) 

f =

13     17

» А=[2 6 9]: 

» В=[2 3 3]: 

» gcd(A.B) 

ans =

2    3    3    

» [G.C.D]=gcd(A.B) 

G =

2    3    3 

C =

0    0    0

D=

1     1     1

» А=[1 354]; 

» В=[2 462];

 » lcm(А.В) 

ans =

2     12     30     4

» Х=[1.2 3.34 5 2.3]; 

» log(X)

ans=

-0.1823 1.2060 1.6094 0.8329

Пример:

» Х=[2 4.678 5;0.987 1 3];

» [F.E] = log2(Х)

F =

0.5000 0.5847 0.6250

0.9870 0.5000 0.7500 

Е = 

2    3    3

0    1    2

Пример:

» Х=[1.4 2.23 5.8 3]; 

» log10(X) 

ans =

0.1461 0.3483 0.7634 0.4771

Примеры:

» М = mod(5.2) 

М =

1

» mod(10.4) 

ans =

2

Пример:

» d=pow2(pi/4,2)

d =

3.1416

Фурье. Если А не является скалярной величиной, то nextpowZ возвращает значение nextpow2(length(A)).

Пример:

» х=[2 678934567784324]; 

» length(x)

ans =

16

 » р = nextpow2(x)

Р =

4

» х=4: 

» р = nextpow2(x)

Р =

2

» Х=45; 

» р = nextpow2(x)

Р = 

6

Функция primes(n) возвращает вектор-строку простых чисел, меньших или равных n. Пример:

» р = primes(25)

Р =

2 3 5 7 11 13 17 19 23

Пример:

» [g.j]=rat(pi.le-10)

g=

312689

j =

99532

Пример:

» А=[25 21.23 55.8 3]: 

» sqrt(A) 

ans =

5.0 4.6076 7.4699 1.7321

На рис. 8.1 представлены графики ряда распространенных алгебраических функций. Эти графики получены в результате исполнения следующего файла-сценария:

syms x

subplot(2,2.1).ezplot(x*2.[-5 5]).xlabel( " ).grid on

subplot(2,2.2).ezplot(exp(x),[-2 2]),xlabel(").grid on 

subplot(2.2.3).ezplot(log(x).[0 5]),grid on 

subplot(2.2.4),ezplot(sqrt(x).[0 10]).grid on

Рис. 8.1. Графики ряда алгебраических функций

Графики дают наглядное представление о поведении представленных на них функций. Обратите внимание на применение графической команды ezplot из пакета Symbolic Math ToolBox (она отличается от обычной команды ezplot MATLAB отсутствием заключения символьных переменных в'), команды syms, также входящей в пакет Symbolic Math .Toolbox и задающей символьную переменную х, и несколько необычное применение команды xlabel (''). Эта команда с аргументом в виде пустой строки снимает вывод обозначения горизонтальной оси на двух верхних графиках. Если этого не сделать, то символ «х» окажется наложенным на наименование функций нижних графиков, которое команда ezpl ot выводит над графиками автоматически.

Тригонометрические и обратные им функции

В системе MATLAB определены следующие тригонометрические и обратные тригонометрические функции. Функции вычисляются для каждого элемента массива. Входной массив допускает комплексные значения. Напоминаем, что все углы в функциях задаются в радианах.

Э acos (X) — возвращает арккосинус для каждого элемента X. Для действительных значений X в области [-1, 1] acos(X) возвращает действительное значение из диапазона диапазона [0, р], для действительных значений X вне области [-1, 1] acos(X) возвращает комплексное число.

Примеры:

»Y = acos (0.5)

1.0472

» acos([0.5 1 2]) 

ans =

1.0472 0     0 + 1.31701

» Y=acot(0.l)

у =

1.4711

» Y= acsc(3)

0.3398

» Y=asec(0.5)

Y =

0 + 1.31701

» Y= asin (0.278) 

Y =

0.2817

» Y=atan(l)

Y =

0.7854

Пример:

» atan2(l,2) 

ans = 

0.4636

»Х=[123]; 

» cos(X) 

ans =

0.5403     -0.4161    -0.9900

» Y = cot(2) 

Y =

-0.4577

» Х-[2 4.678 5:0.987 1 3]; 

» Y - csc(X) 

Y =

1.0998     -1.0006    -1.0428

1.1985     1.1884     7.0862

» X-[pi/10 pi/3 pi/5]; 

» sec(X) 

ans =

1.0515     2.0000     1.2361

» X=[pi/2 pi/4 pi/6 pi];

» sin(X)

ans =

1.0000     0.7071     0.5000     0.0000

Рис. 8.2. Графики четырех тригонометрических функций

Пример:

» Х=[0.08 0.06 1.09]

X=

0.0800 0.0600 1.0900 

» tan(X)

ans=

0.802     0.0601     1.9171

Следующий файл-сценарий позволяет наблюдать графики четырех тригонометрических функций (рис. 8.2):

syms xsubplot(2.2.1).ezplot(sin(x),[-5 5]).xlabel("),gnd on

 subplot(2.2.2),ezp"lot(tan(x).[-5 5]).xlabelC " ).grid on 

subplot(2,2,3),ezplot(asin(x),[-l l]).grid on 

subplot(2.2.4),ezplot(atan(x).[-5 5]),grid on

Поскольку многие тригонометрические функции периодичны, появляется возможность формирования из них любопытных комбинаций, позволяющих создавать типовые тестовые сигналы, используемые при моделировании радиоэлектронных устройств. Следующий файл-сценарий строит графики для таких комбинаций, создающих из синусоиды три наиболее распространенных сигнала — прямоугольные, пилообразные и треугольные импульсы:[В пакете расширения Signal Processing Toolbox есть специальные функции для генерации таких сигналов — square и sawtooth. — Примеч. ред.]

х=-10:0.01:10;

subplot(2,2.1).plot(x.0.8*sin(x))

.x label('0.8*sin(x)') 

subplot(2.2,2).plot(x,0.8*sign(sin(x)))

.x1abel('0.8*sgn(sin(x))') 

subplot(2.2.3),plot(x.atan(tan(x/2)))

.xlabel('atan(tan(x/2))') 

subplot(2.2.4),plot(x,asin(sin(x)))

.xlabel('asin(sin(x))')

Соответствующие графики представлены на рис. 8.3.

Рис. 8.3. Графики синусоиды, прямоугольных, пилообразных и треугольных колебаний

Дополнительный ряд графиков, полученных комбинациями элементарных функций, показан на рис. 8.4. Эти графики строятся следующим файлом-сценарием:

х=-10:0.01:10;

subplot(2.2.1).plot(x.sin(x).A3).x1abel('sin(xr3')

subplot(2.2.2).plot(x,abs(s1n(x)))

.xlabel('abs(sin(x))').axis([-10 10 -1 1]),

subplot(2.2,3),plot(x,tan(cos(x)))

.xlabel('tanCcos(x))') 

subplot(2.2.4).plot(x.csch(sec(x))),xlabeK'csch(sec(x))')

Рис. 8.4. Графики периодических сигналов без разрывов

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

Гиперболические и обратные им функции

Наряду с тригонометрическими функциями в математических расчетах часто используются и гиперболические функции. Ниже приводится список таких функций, определенных в системе MATLAB. Функции вычисляются для каждого элемента массива. Входной массив допускает комплексные значения. Все углы в тригонометрических функциях измеряются в радианах.

»Y= acosh (0.7) 

Y =

0 + 0.7954i

»Y = acoth (0.1) 

Y=

0.1003 + 1.5708i

» Y = acsch(l) 

Y =

0.8814

» Y = asech(4) 

Y =

0 + 1.3181i

» Y = asinh (2.456) 

Y =

1.6308

» Х=[0.84 0.16 1.39]:. 

» atanh (X) 

ans =

1.2212     0.1614     0.9065 + 1.5708i

» Х=[1 23]: 

» Cosh(X)

ans = 

1.5431     3.7622     10.0677

» Y = coth(3.987) 

Y =

1.0007

» Х=[2 4.678 5:0.987 1 3]: 

» Y = csch(X)

Y =

0.2757     0.0186     0.0135

0.8656     0.8509     0.0998

» X=[pi/2 pi/4 pi/6 pi]: 

» sech(X) 

ans =

0.3985     0.7549     0.8770     0.0863

» X=[pi/8 pi/7 pi/5 pi/10];

» sinh(X) 

ans =

0.4029     0.4640     0.6705     0.3194

» X=[pi/2 pi/4 pi/6 pi/10]; 

»tanh(X) 

ans =

0.9172     0.6558     0.4805     0.3042

Следующий m-файл-сценарий строит графики ряда гиперболических функций:

syms x

subplot(2,2,l).ezplot(sinh(x).[-4 4]).xlabel(").grid on 

subplot(2,2.2).ezplot(cosh(x).[-4 4]).xlabel('').grid on 

subp1ot(2.2,3).ezplot(tanh(x).[-4 4]).grid on

subplot(2.2.4).ezplot(sech(x).[-4 4]).grid on

Нетрудно заметить, что гиперболические функции в отличие от тригонометрических не являются периодическими. Выбранные для графического представления функции дают примеры характерных нелинейностей.

В другом файле использованы команды для построения графиков ряда обратных гиперболических функций:

syms x

subplot(2,2.1).ezplot(asinh(x).[-4 4]).xlabel(").grid on 

subplot(2.2.2),ezp1ot(acosh(x).[0 4]).xlabel(").grid on 

subplot(2,2.3),ezplot(atanh(x).[-l l]).grid on 

subplot(2.2.4).ezplot(asech(x).[0 l]).grid on

На этих графиках хорошо видны особенности данного класса функций. Такие функции, как обратный гиперболический синус и тангенс, «ценятся» за симметричный вид их графиков, дающий приближение к ряду типовых нелинейностей.

Функции округления и знака

Ряд особых функций служат для выполнения операций округления числовых данных и анализа их знака. 

Примеры:

» А=[1/3 2/3: 4.99 5.01] 

А =

0.3333     0.6667

4.9900     5.0100 

» fix(A) 

ans =

0    0

4     5

Примеры:

» А=[-1/3 2/3: 4.99 5.01] 

А =

-0.33330.6667

4.99005.0100 

» floor(А)

 ans =

-1 0 4 5

Примеры:

» а=-1.789; 

» ceil (а) 

ans =

-1

» а=-1.789+1*3.908; 

» cei l(а) 

ans =

-1.0000 + 4.0000i

Если операнды X и Y имеют одинаковый знак, функция rem(X, Y) возвращает тот же результат, что mod(X.Y). Однако (для положительных X и Y) rem(-x.y) = mod(-x,y)-y. Функция rem возвращает результат, находящийся между 0 и sign(X)*abs(Y). Если Y=0, функция rem возвращает NaN. Аргументы X и Y должны быть целыми числами. Из-за неточного представления в компьютере чисел с плавающей запятой использование вещественных (или комплексных) входных аргументов может привести к непредвиденным результатам.

Пример:

» Х=[25 21 23 55 3];

» Y=[4 8 23 6 4]; 

» rem(X.Y) 

ans=

15013

Пример:

» Х=[5.675 21.6+4.897*1 2.654 55.8765];

 » round(X) 

ans =

6.0000     22.0000 +5.0000i     3.0000     56.0000

Пример:

» Х=[-5 21 2 0 -3.7]: 

» sign(X) 

ans =

-1 1 1 0 -1

Функции комплексного аргумента

Для работы с комплексными числами и данными в MATLAB используются следующие функции:

Примеры:

» Z=3+i*2 

Z =

3.0000 + 2.00001 

» theta = angle(Z) 

theta =

0.5880

» R = abs(Z) 

R =

3.6056

» Z =R.*exp(i*theta) 

Z =

3.0000 + 2.00001

» Z-[l+i, 3+2i, 2+3i]; 

» imag(Z) 

ans =

1    2    3

» Z=[1+i. 3+2i  2+3i]:

 » real(Z)

 ans =

1 3 2

» conj(2+31) 

ans=

2.0000 - 3.00001

Что нового мы узнали?

В этом уроке мы научились: