Желательно использовать содержательные имена для обозначений переменных, например speed_1 для переменной, обозначающей скорость первого объекта. Переменные могут быть обычными и индексированными, то есть элементами векторов или матриц (см. выше). Могут использоваться и символьные переменные, причем символьные значения заключаются в апострофы, например s='Demo'. Имена переменных рекомендуется задавать только латинскими буквами, цифрами и различными символами (не допускается применение символов операторов).
Уничтожение определений переменных
В памяти компьютера переменные занимают определенное место, называемое рабочей областью (workspace). Для очистки рабочей области используется функция clear в разных формах, например:
• clear – уничтожение определений всех переменных;
• clear x – уничтожение определения переменной x;
• clear a, b, c – уничтожение определений нескольких переменных.
Уничтоженная (стертая в рабочей области) переменная становится неопределенной. Использовать неопределенные переменные нельзя, и такие попытки будут сопровождаться выдачей сообщений об ошибке. Приведем примеры задания и уничтожения переменных:
>> x=2*pi
x = 6.2832
>> V=[1 2 3 4 5]
V = 1 2 3 4 5
>> MAT??? Undefined function or variable 'MAT'.
>> MAT=[1 2 3 4; 5 6 7 8]
MAT =
1 2 3 4
5 6 7 8
>> clear V
>> V
??? Undefined function or variable 'V'.
>> clear
>> x
??? Undefined function or variable 'x'.
>> M
??? Undefined function or variable 'M'.
Обратите внимание на то, что сначала выборочно стерта переменная V, а затем командой clear без параметров стерты все остальные переменные.
Неопределенные переменные используются при выполнении символьных вычислений. Специально система MATLAB для выполнения таких вычислений не предназначена. Однако они возможны с помощью пакета расширения символьной математики Symbolic Math.
Операторы и встроенные функции MATLAB
Оператор – это специальное обозначение для определенной операции над данными – операндами. Например, простейшими арифметическими операторами являются знаки суммы +, вычитания -, умножения * и деления /. Операторы используются совместно с операндами. Например, в выражении 2+3 знак + является оператором сложения, а числа 2 и 3 – операндами. Операторы также являются распространенными объектами математических выражений и языков программирования.
Следует отметить, что большинство операторов относятся к матричным операциям, что может служить причиной серьезных недоразумений. Например, операторы умножения * и деления / вычисляют произведение и частное от деления двух массивов, векторов или матриц. Есть ряд специальных операторов, например оператор \ означает деление справа налево, а операторы .* и ./ означают, соответственно, поэлементное умножение и поэлементное деление массивов.
Следующие примеры поясняют сказанное на примере операций с векторами:
>> V1=[2 4 6 8]
V1 = 2 4 6 8
>> V2=[1 2 3 4]
V2 = 1 2 3 4
>> V1/V2
ans = 2
>> V1.*V2
ans = 2 8 18 32
>> V1./V2
ans = 2 2 2 2
Полный список операторов можно получить, используя команду help ops.
Приведем начало обширного полного списка операторов, содержащего арифметические операторы:
>> help ops
Operators and special characters.
Arithmetic operators.
Plus – Plus +
Uplus – Unary plus +
Minus – Minus –
Uminus – Unary minus –
Mtimes – Matrix multiply *
times – Array multiply .*
mpower – Matrix power ^
power – Array power .^
mldivide – Backslash or left matrix divide \
mrdivide – Slash or right matrix divide /
ldivide – Left array divide .\
rdivide – Right array divide ./
kron – Kroneckertensorproduct
Функции – это имеющие уникальные имена объекты, выполняющие определенные преобразования своих аргументов и при этом возвращающие результаты этих преобразований. Возврат результата – отличительная черта функций. При этом результат вычисления функции с одним выходным параметром подставляется на место ее вызова, что позволяет использовать функции в математических выражениях, например функцию sin в 2*sin(pi/2).
Функции в общем случае имеют список аргументов (параметров), заключенный в круглые скобки. Например, функция Бесселя записывается как bessel(NU,X). В данном случае список параметров содержит два аргумента – NU в виде скаляра и X в виде вектора. Многие функции допускают ряд форм записи, отличающихся списком параметров. Если функция возвращает несколько значений, то она записывается в виде
[Y1, Y2,...]=func(X1, X2,...), где Y1, Y2,... – список выходных параметров и X1, X2,... – список входных аргументов (параметров).
Со списком элементарных функций можно ознакомиться, выполнив команду help elfun, а со списком специальных функций – с помощью команды help specfun. Функции могут быть встроенными (внутренними) и внешними, или m-функциями. Так, встроенными являются наиболее распространенные элементарные функции, например sin(x) и exp(y), тогда как функция sinh(x) является внешней функцией. Внешние функции содержат свои определения в m-файлах. Задание таких функций возможно с помощью специального редактора m-файлов, который мы рассмотрим чуть позже. Встроенные функции хранятся в откомпилированном ядре системы MATLAB, в силу чего они выполняются предельно быстро.
Применение оператора : (двоеточие)
Очень часто необходимо произвести формирование упорядоченных числовых последовательностей. Такие последовательности нужны, например, для создания векторов со значениями абсциссы при построении графиков или при создании таблиц. Для этого в MATLAB используется оператор : (двоеточие) в виде:
Начальное_значение:Шаг:Конечное_значение
Данная конструкция порождает возрастающую последовательность чисел, которая начинается с начального значения, идет с заданным шагом и завершается конечным значением. Применение этой конструкции резко уменьшает потребность в задании программных циклов.
Если Шаг не задан, то он принимает значение 1. Если конечное значение указано меньшим, чем начальное значение, – выдается сообщение об ошибке. Примеры применения оператора : даны ниже:
>> 1:5
ans= 1 2 3 4 5
>> i=0:2:10
i = 0 2 4 6 8 10
>> j=10:-2:2
j = 10 8 6 4 2
>> V=0:pi/2:2*pi;
>> V
V = 0 1.570 3.141 4.712 6.2832
>> X=1:-.2:0
X = 1.000 0.800 0.600 0.400 0.200 0
>> 5:2
ans =
Empty matrix: 1-by-0
Как отмечалось, принадлежность MATLAB к матричным системам вносит коррективы в назначение операторов и приводит, при неумелом их использовании, к казусам. Рассмотрим следующий характерный пример:
>> x=0:5
x = 0 1 2 3 4 5
>> cos(x)
ans = 1.000 0.54 -0.416 -0.99 -0.653 0.2837
>> sin(x)/x
ans = -0.0862
Вычисление массива косинусов здесь прошло корректно. А вот вычисление массива значений функции sin(x)/x дает неожиданный, на первый взгляд, эффект – вместо массива с шестью элементами вычислено единственное значение!
Причина «парадокса» здесь в том, что оператор / вычисляет отношение двух матриц, векторов или массивов. Если они одной размерности, то результат будет одним числом, что в данном случае и выдала система. Чтобы действительно получить вектор значений sin(x)/x, надо использовать специальный оператор поэлементного деления массивов – ./. Тогдабудетполученмассивчисел:
>> sin(x)./x
Warning: Divide by zero.
ans = NaN 0.841 0.454 0.047 -0.1892 -0.1918
Впрочем, и тут без особенностей не обошлось. Так, при x = 0 значение sin(x)/x дает устранимую неопределенность вида 0/0 – 1. Однако, как и всякая численная система, MATLAB классифицирует попытку деления на 0 как ошибку и выводит соответствующее предупреждение. А вместо ожидаемого численного значения выводится символьная константа NaN, означающая, что неопределенность 0/0 – это все же не обычное число.
Выражения с оператором : могут использоваться в качестве аргументов функций для получения множественных их значений. Например, в приводимом ниже примере вычислены функции Бесселя порядка от 0 до 5 со значением аргумента 0,5:
>> bessel(0:1:5,1/2)
ans = 0.938 0.242 0.030 0.002 0.0002 0.0000
А в следующем примере вычислено шесть значений функции Бесселя нулевого порядка для значений аргумента от 0 до 5 с шагом 1:
>> bessel(0,0:1:5)
ans = 1.0000 0.7652 0.2239 -0.2601 -0.3971 -0.1776
Таким образом, оператор : является весьма удобным средством задания регулярной последовательности чисел. Он широко используется при работе со средствами построения графиков. В дальнейшем мы расширим представление о возможностях этого оператора.
Функции пользователя
matlab график матрица функция
Хотя ядро новых версий системы MATLAB содержит уже более 1000 встроенных функций (не считая функций, определенных в десятках пакетов расширения), всегда может понадобиться какая-то нужная пользователю функция. Язык программирования системы MATLAB предоставляет ряд возможностей для задания функций пользователя. Одна из таких возможностей заключается в применении функции inline, аргументом которой надо в апострофах задать выражение, задающее функцию одной или нескольких переменных. В приведенном ниже примере задана функция двух переменных – суммы квадратов sin(x) и cos(y):
>> sc2=inline('sin(x).^2+cos(y)^.2')
sc2 =
Inline function:
sc2(x,y) = sin(x).^2+cos(y).^2
Можно также задавать свои функции в виде m-файлов. Например, можно в окне редактора m-файлов (открывается командой New в меню File) создать m-файл с именем sc2 и листингом:
functiony=sc2(x,y)
y=sin(x).^2+cos(y).^2
Записав его на диск, можно командой type sc2 вывести листинг созданной функции:
>> type sc2
function y=sc2(x,y)
y=sin(x).^2+cos(y).^2
Обращение к функции, созданной описанными методами, задается как
sc2(x,y), где на место x и y подставляются значения переменных – аргументов функции пользователя. Например:
>> sc2(1,2)
ans = 0.8813
>> sc2(2,1)
y = 1.1187
ans = 1.1187
Можно также создать так называемую handle-функцию (именуемую также анонимной функцией) с помощью оператора @: