Двойственность операторов, команд и функций. Некоторые ограничения.
Для языка системы MATLAB различие между командами (выполняемыми при вводе с клавиатуры) и программными операторами (выполняемыми из программы) является условным. И команды, и программные операторы могут выполняться как из программы, так и в режиме прямых вычислений. Под командами далее в основном понимаются средства, управляющие периферийным оборудованием, под операторами – средства, выполняющие операции с операндами (данными).
Функция преобразует одни данные в другие. Для многих функций характерен возврат значений в ответ на обращение к ним с указанием списка входных параметров – аргументов. Например, говорят, что функция sin(x) в ответ на обращение к ней возвращает значение синуса аргумента х. Поэтому функцию можно использовать в арифметических выражениях, например 2*sin(x+1). Для операторов (и команд), не возвращающих значения, такое применение обычно абсурдно. В данной книге все функции, возвращающие единственное значение (или один массив), записываются малыми (строчными) буквами в виде:
f_name(Список_параметров)
Тем самым мы исключаем искусственное выделение имен функций большими (заглавными) буквами, принятое в справочной системе MATLAB. Напоминаем, что как в командной строке, так и в текстах m-файлов функции записываются только малыми буквами. Для функций, возвращающих ряд значений или массивов (например X, Y, Z,…), запись имеет следующий вид:
[X. Y, Z....]
=
f_name(Список_параметров)
Важное значение имеет двойственность операторов и функций. Многие операторы имеют свои аналоги в виде функций. Так, например, оператор "+" имеет аналог в виде функции sum. Команды, записанные в виде:
Command argument
Нередко имеют форму записи и в виде функции:
Command(
'argument'
)
Примеры:
>
>
help sin SIN Sine.
SIN(X) is the sine of the elements of X.
Overloaded methods
help sym
/
sin.m
>
>
help(
'sin'
) SIN Sine.
SIN(X) is the sine of the elements of X.
Overloaded methods
help sym
/
sin.m
>
>
type(
'sin'
)
sin is a built
-
in function.
>
>
type sin
sin is a built
-
in function.
Указанная двойственность лежит в основе выбора между процедурным и функциональным типами программирования, каждый из которых имеет своих поклонников и противников и может (в той или иной мере) подходить для решения различных классов задач. При этом переход от одного типа программирования к другому возможен в пределах одной программы и происходит настолько естественно, что большинство пользователей даже не задумывается над тем, каким же типом (или стилем) программирования они преимущественно пользуются.
Некоторые ограничения
Поскольку язык программирования системы MATLAB ориентирован на структурное программирование, в нем нет номеров строк (присущих до недавнего времени Бейсику) и программных операторов безусловного перехода GO TO. Имеются лишь управляющие структуры следующих типов: условных выражений if… else…else…if…end, циклы for…end и while…end. Их форма похожа на ту, которая используется в языке Pascal (т. е. область действия управляющих структур начинается их заголовком, но без слова begin, а заканчивается словом end). С позиций теории структурного программирования этих средств достаточно для решения любых задач. В MATLAB имеются также операторы-переключатели типа case.
Однако в MATLAB исключены те средства, возможности которых можно реализовать уже имеющимися средствами. Зато резко увеличен набор средств программирования для решения математических задач, прежде всего сводящихся к матричным вычислениям и реализации современных численных методов.
Программирование простых задач в среде MATLAB очень напоминает программирование на Бейсике. Во многих случаях программы на Бейсике можно почти дословно перевести на язык системы, учтя небольшие отличия в синтаксисе этих языков. Это нельзя трактовать как отсутствие у языка MATLAB индивидуальных черт. Любители Си, Паскаля или Фортрана также заметят сходство этих языков с языком программирования MATLAB. Так что правильнее считать, что этот язык имеет вполне самостоятельное значение. Он вобрал в себя лучшие средства универсальных языков программирования.