Встроенные функции. Функции, задаваемые пользователем

Векторы и матрицы

 

Вектор – это упорядоченный перечень чисел. Вектор можно ввести с клавиатуры, набрав в командной строке перечень чисел, отделенных запятыми или пробелами, помещенный в квадратные скобки.

Примеры:

>> V=[1 2 3]

V =

1 2 3

>> Z=[-2,0 1,4]

Z =

-2 0 1 4

Символ <:> (двоеточие) дает возможность простого создания векторов, каждый элемент которых отличается от предшествующего на постоянную величину (шаг или приращение). Шаг может быть и отрицательным. Например:

>> V=-0.1:0.3:1.4

V =

-0.1000 0.2000 0.5000 0.8000 1.1000 1.4000

Шаг, равный единице, можно не указывать:

>> X=-2:2

X =

-2 -1 0 1 2

Элементы вектора X можно выделить в виде X(1), X(2) и т. д. Например:

>> X(4)

ans =

Чтобы изменить форму вектора X со строчной на столбцовую, введем символ <′> (апостроф) после X:

>> X'

ans =

-2

-1

Вектор-столбец можно ввести с командной строки, но значения элементов в перечне должны отделятся знаком <;>(точка с запятой):

>> A=[1.3;5.4;6.9]

A =

1.3000

5.4000

6.9000

Система MATLAB способна эффективно выполнять операции с векторами. Например, чтобы возвести в куб элементы вектора X, введем следующую команду:

>> X.^3

ans =

-8 -1 0 1 8

Матрица – это прямоугольный набор чисел. Рассмотрим матрицу размером 2×3:

 

B = .

 

В MATLAB эту матрицу можно ввести с помощью следующей команды:

>> B=[1 3 0;-2 -2 5]

B =

1 3 0

-2 -2 5

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

Элементы матрицы B можно выделить в виде B(1,1), B(2,3) и т. д. Например:

>> B(1,2)

ans =

Чтобы транспонировать матрицу B, введем символ <′> (апостроф) после B:

>> B'

ans =

1 -2

3 -2

0 5

Чтобы возвести в квадрат элементы матрицы B, достаточно ввести следующую команду:

>> B.^2

ans =

1 9 0

4 4 25

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

 

Основные элементарные математические функции приведены в табл. 1.

 

Таблица 1. Основные элементарные функции

exp экспонента abs Модуль
log натуральный логарифм asin арксинус
log10 десятичный логарифм acos арккосинус
sqrt квадратный корень atan арктангенс
sin синус sinh гиперболический синус
cos косинус cosh гиперболический косинус
tan тангенс tanh гиперболический тангенс
cot котангенс asinh гиперболический арксинус
cec секанс acosh гиперболический арккосинус
csc косеканс atanh гиперболический арктангенс

 

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

Примеры:

>> acosh(2)

ans =

1.3170

>> sin(1+i)

ans =

1.2985 + 0.6350i

>> exp(0:3)

ans =

1.0000 2.7183 7.3891 20.0855

Справочная информация по встроенным элементарным функциям содержится в разделе elfun справочной системы MATLAB. Информацию из раздела можно получить, набрав в командной строке команду doc elfun. В этом разделе содержится полная информация о функциях комплексного аргумента real, angle, abs и т. д. (см. раздел 5). В раздел elfun включены также функции округления и остатка от деления: round (округление до ближайшего целого), fix(усечение дробной части числа), floor(округление до меньшего целого), ceil(округление до большего целого), mod (остаток от деления с учетом знака), rem (остаток в смысле модульной арифметики), sign (знак числа). В этих случаях о комплексных аргументах не может быть и речи.

Примеры:

>> round(-4.7)

ans =

-5

>> mod(7,2)

ans =

В MATLAB предусмотрены встроенные функции, связанные с целочисленной арифметикой: factor (разложение числа на простые множители), isprime (истина, если число простое), primes (формирование списка простых чисел), rat (приближение числа в виде отношения двух небольших целых чисел), lcm (наименьшее общее кратное), gcd (наибольший общий делитель).

Примеры:

>> factor(123456789)

ans =

3 3 3607 3803

>> isprime(7)

ans =

>> primes(50)

ans =

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

>> gcd(1236,175992)

ans =

Есть также функции, предназначенные для решения стандартных задач комбинаторики: функция perms вычисляет число перестановок, а функция nchoosek – число сочетаний. Например, C124 – число сочетаний из 12 по 4, легко находится вызовом функции nchoosek:

>> nchoosek(12,4)

ans =

Информация по функциям целочисленной арифметики содержится в разделе specfunсправочной системы MATLAB. В разделе specfun находится также информация по встроенным специальным математическим функциям (функциям Бесселя besselj, bessely, полиномам Лежандра legendre и др.).

MATLAB включает побитовые функции преобразования систем счисления: dec2bin (перевод десятичного числа в двоичное); bin2dec (перевод двоичного числа в десятичное); dec2hex (перевод десятичного числа в шестнадцатеричное); hex2dec (перевод шестнадцатеричного числа в десятичное).

Примеры:

>> dec2bin(11)

ans =

>> bin2dec('1011')

ans =

>> dec2hex(350)

ans =

15E

>> hex2dec('15E')

ans =

Информация по этим функциям находится в разделе strfun справочной системы MATLAB.

И, наконец, есть функции для работы со значениями даты и времени. Чтобы отобразить календарь какого - либо года и месяца, нужно задать функцию calendar с двумя аргументами. Например, отобразим календарь на март 2008 года:

>> calendar(2008,3)

Mar 2008

S M 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 без аргументов выводит в командное окно календарь на текущий месяц.

Пара функций tic и toc позволяет вычислить время выполнения системой MATLAB той или иной операции. Если в командной строке набрать

>> tic, Fun, toc

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

Пример:

>> tic, A=1:100; B=0.01:0.01:1;C=A*B', toc

C =

3.3835e+003

elapsed_time =

0.0100

Информация о функциях даты и времени содержится в разделе timefun справочной системы MATLAB.

В MATLAB мы будем использовать как встроенные функции, так и свои собственные функции. Собственные функции можно задавать в отдельных файлах, которые называются M-файлами. M-файлы-функции полезны для задания функций, которые требуют несколько промежуточных команд для вычисления результата. Задание простых функций, которые можно выразить в одной строке, осуществляется с помощью команды inline.

В этом примере показано, как задается функция f(x) = с использованием команды inline:

>> f=inline('1/x^2','x')

f =

Inline function:

f(x) = 1/x^2

Вычислим эту функцию, например, при x = 2:

>> f(2)

ans =

0.2500

Как отмечалось ранее, большинство функций системы MATLAB могут оперировать как скалярами, так и массивами. Для того, чтобы заданная вами функция могла оперировать массивами, надо поставить точки перед математическими операторами <^>, <*>, </>. Векторизацию символьного выражения S осуществляет команда vectorize(S). Таким образом, чтобы получить векторизованную версию функции f(x) = , введем строку

>> f=inline(vectorize('1/x^2'),'x')

f =

Inline function:

f(x) = 1./x.^2

Теперь можно вычислить эту функцию для вектора:

>> f(1:5)

ans =

1.0000 0.2500 0.1111 0.0625 0.0400

Отметим, что можно также задавать собственные функции с двумя или более аргументами. Например:

>> g=inline(vectorize('1/(x^2+y^2)'),'x','y')

g =

Inline function:

g(x,y) = 1./(x.^2+y.^2)

Тогда выполнение выражения

>> g([1 2],[3 4])

ans =

0.1000 0.0500

дает значения функции в точках (1;2) и (3;4).