В каждой большой программе есть свои «ложки дегтя». В MATLAB 6 такой «ложкой дегтя» является перевод строки при вводе буквы «с» русского алфавита в командной строке. В итоге ввод комментариев в командной строке на русском языке превращается в проблему. Пока автор может порекомендовать заменять русское «с» на английское, что на виде текстового комментария никак не сказывается. Не рекомендуется вводить русскоязычные комментарии и в тесты m-файлов при подготовке их в редакторе/отладчике (он будет описан позже). Это нередко делает программы неработоспособными. Жаловаться тут бесполезно — MATLAB англоязычный продукт и официальной локализованной под Россию версии этой системы пока нет.
Обычно первые строки m-файлов служат для описания их назначения, которое выводится на экран дисплея после команды » help Имя_файла. Считается правилом хорошего тона вводить в m-файлы достаточно подробные текстовые комментарии. Без таких комментариев даже разработчик программных модулей быстро забывает о сути собственных решений. В текстовых комментариях и в символьных константах могут использоваться буквы русского алфавита — при условии, что установлены содержащие эти буквы наборы шрифтов (см. примечание . выше).
Переменные и присваивание им значений
Переменные — это имеющие имена объекты, способные хранить некоторые, обычно разные по значению, данные. В зависимости от этих данных переменные могут быть числовыми или символьными, векторными или матричными. В системе MATLAB можно задавать переменным определенные значения. Для этого используется операция присваивания, вводимая знаком равенства =: Имя_переменной - Выражение Типы переменных заранее не декларируются. Они определяются выражением, значение которого присваивается переменной. Так, если это выражение — вектор или матрица, то переменная будет векторной или матричной. Имя переменной (ее идентификатор) может содержать сколько угодно символов, но запоминается и идентифицируется только 31 начальный символ. Имя любой переменной не должно совпадать с именами других переменных, функций и процедур системы, т. е. оно должно быть уникальным. Имя должно начинаться с буквы, может содержать буквы, цифры и символ подчеркивания _. Недопустимо включать в имена переменных пробелы и специальные знаки, например +,.-, *, / и т. д., поскольку в этом случае правильная интерпретация выражений становится невозможной. Желательно использовать содержательные имена для обозначений переменных, например speed_l для переменной, обозначающей скорость первого объекта. Переменные могут быть обычными и индексированными, то есть элементами векторов или матриц (см. выше). Могут использоваться и символьные переменные, причем символьные значения заключаются в апострофы, например s='Demo'.
Уничтожение определений переменных
В памяти компьютера переменные занимают определенное место, называемое рабочей областью (workspace). Для очистки рабочей области используется функция clear в разных формах, например:
· clear — уничтожение определений всех переменных;
· clear x — уничтожение определения переменной х;
· clear a, b, с — уничтожение определений нескольких переменных.
Уничтоженная (стертая в рабочей области) переменная становится неопределенной. Использовать неопределенные переменные нельзя, и такие попытки будут сопровождаться выдачей сообщений об ошибке. Приведем примеры задания и уничтожения переменных: » x=2*pi
х = 6.2832 » V=[l 2345]
V = 12345
» MAT ??? Undefined function or variable 'MAT'.
» MAT=[1 2 3 4; 5 6 7 8]
MAT= 1234 5678
» clear V
» V
??? Undefined function or variable 'V'. » clear
» x ??? Undefined function or variable 'x'. » M ??? Undefined function or variable 'M'. Обратите внимание на то, что сначала выборочно стерта переменная V, а затем командой clear без параметров стерты все остальные переменные.
Операторы и функции
Оператор — это специальное обозначение для определенной операции над данными — операндами. Например, простейшими арифметическими операторами являются знаки суммы +, вычитания -, умножения * и деления /. Операторы используются совместно с операндами. Например, в выражении 2+3 знак + является оператором сложения, а числа 2 и 3 — операндами. Следует отметить, что большинство операторов относится к матричным операциям, что может служить причиной серьезных недоразумений. Например, операторы умножения * и деления / вычисляют произведение и частное от деления двух многомерных массивов, векторов или матриц. Есть ряд специальных операторов, например, оператор \ означает деление справа налево, а операторы . * и . / означают соответственно поэлементное умножение и поэлементное деление массивов. Следующие примеры поясняют сказанное на примере операций с векторами: » Vl=[2 4 6 8]
V1= 2468
» V2=[l 2 3 4]
V2 = 1234
» V1/V2
ans = 2 » V1.*V2
ans= 2 8 18 32
» V1./V2
ans = 2 2 2 2 Полный список операторов можно получить, используя команду » help ops. Постепенно мы рассмотрим все операторы системы MATLAB и обсудим особенности их применения. А пока приведем только часть полного списка операторов, содержащую арифметические операторы: » help ops
Operators and special characters.
Arithmetic operators.
Plus
- Plus
+
Up! us
- Unary plus
+
Minus
- Minus
-
Umlnus
- Unary minus
-
Mtimes
- Matrix multiply
*
times
- Array multiply
*
mpower
- Matrix power
^
poWer
- Array power
.^
mldlvlde
- Backslash or left matrix divide
\
mrdlvlde
- Slash or right matrix divide
/
Idi-vide
- Left array divide
.\
rdlvlde
- Right array divide
./
kron
- Kronecker tensor product
kron
Функции — это имеющие уникальные имена объекты, выполняющие определенные преобразования своих аргументов и при этом возвращающие результаты этих преобразований. Возврат результата — отличительная черта функций. При этом результат вычисления функции с одним выходным параметром подставляется на место ее вызова, что позволяет использовать функции в математических выражениях, например функцию sin в 2*sin(pi/2). Функции в общем случае имеют список аргументов (параметров), заключенный в круглые скобки. Например, функция Бесселя записывается как bessel(NU.X). В данном случае список параметров содержит два аргумента — NU в виде скаляра и X в виде вектора. Многие функции допускают ряд форм записи, отличающихся списком параметров. Если функция возвращает несколько значений, то она записывается в виде [Yl. Y2....]=func(Xl. X2...) где Yl. Y2,... — список выходных параметров и XI, Х2.... — список входных аргументов (параметров). Со списком элементарных функций можно ознакомиться, выполнив команду hel p elfun, а со списком специальных функций — с помощью команды help specfun. Функции могут быть встроенными (внутренними) и внешними, или т-функциями. Так, встроенными являются наиболее распространенные элементарные функции например, sin(x) и ехр(у), тогда как функция sinh(x) является внешней функцией. Внешние функции содержат свои определения в m-файлах. Задание таких функций с помощью специального редактора m-файлов мы рассмотрим в уроке 5. Встроенные функции хранятся в откомпилированном ядре системы MATLAB, в силу чего они выполняются предельно быстро.
Применение оператора: (двоеточие)
Очень часто необходимо произвести формирование упорядоченных числовых последовательностей. Такие последовательности нужны для создания векторов или значений абсциссы при построении графиков. Для этого в MATLAB используется оператор : (двоеточие): Начальное_значение:Шаг:Конечное_значение Данная конструкция порождает возрастающую последовательность чисел, которая начинается с начального значения, идет с заданным шагом и завершается конечным значением. Если Шаг не задан, то он принимает значение 1. Если конечное значение указано меньшим, чем начальное значение, — выдается сообщение об ошибке. Примеры применения оператора : даны ниже: » 1:5 ans = 12345
» 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.5708 3.1416 4.7124 6.2832
» X= l:-.2:0
X= 1.0000 0.8000 0.6000 0.4000 0.2000 0
» 5:2 ans= Empty matrix:1-by-0
Как отмечалось, принадлежность MATLAB к матричным системам вносит коррективы в назначение операторов и приводит при неумелом их использовании к казусам. Рассмотрим следующий характерный пример: » х=0:5 х= 0 1 2 3 4 5
» cos(x)
ans = 1.0000 0.5403 -0.4161 -0.9900 -0.6536 0.2837
» sin(x)/x
ans = -0.0862
Вычисление массива косинусов здесь прошло корректно. А вот вычисление массива значений функции sin(x)/x дает неожиданный, на первый взгляд, эффект — вместо массива с шестью элементами вычислено единственное значение! Причина «парадокса» здесь в том, что оператор / вычисляет отношение двух матриц, векторов или многомерных массивов. Если они одной размерности, то результат будет одним числом, что в данном случае и выдала система. Чтобы действительно получить вектор значений sin(x) /x, надо использовать специальный оператор поэлементного деления массивов — . /. Тогда будет получен массив чисел: » sin(x)./x Warning: Divide by zero. ans = NaN 0.8415 0.4546 0.0470 -0.1892-0.1918 Впрочем, и тут без особенностей не обошлось. Так, при х = 0 значение sin(x)/x дает устранимую неопределенность вида 0/0=1. Однако, как и всякая численная система, MATLAB классифицирует попытку деления на 0 как ошибку и выводит соответствующее предупреждение. А вместо ожидаемого численного значения выводится символьная константа NaN, означающая, что неопределенность 0/0 — это все же не обычное число. Выражения с оператором : могут использоваться в качестве аргументов функций для получения множественных их значений. Например, в приводимом ниже примере вычислены функции Бесселя порядка от 0 до 5 со значением аргумента 0.5: » bessel(0:l:5,l/2)
ans = 0.9385 0.2423 0.0306 0.0026 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
Таким образом, оператор : является весьма удобным средством задания регулярной последовательности чисел. Он широко используется при работе со средствами построения графиков. В дальнейшем мы расширим представление о возможностях этого оператора.