Двойственность операторов, команд и функций.

Для языка системы MATLAB различие между командами (выполняемыми в командном окне при вводе с клавиатуры) и программными операторами (выполняемыми из программы) является в известной мере условным. В самом деле, и команды, и программные операторы могут выполняться как из программы, так и в режиме прямых вычислений. Под командами в специализированной литературе [7,69-71,109,132,177] зачастую понимают средства, управляющие периферийным оборудованием, а под операторами – средства, выполняющие операции с операндами (данными).

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

Важное значение имеет двойственность операторов и функций – многие операторы имеют свои аналоги в виде функций. Так, например, оператор «+» имеет свой аналог в виде функции sum. Команды вида

Command argument

нередко имеют форму записи в виде функции

Command(‘argument’)

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

Некоторые ограничения.

В силу того, что язык программирования системы MATLAB ориентирован на структурное программирование, в нем отсутствуют номера строк (характерные, например, для языка программирования FORTRAN) и программных операторов безусловного перехода (типа GO TO или GOTO в FORTRAN). Вместе с тем, имеются управляющие конструкции следующих типов: условные выражения if…else…elseif…end, циклы for …end, и while…end, по форме похожие на ту, которые используются в языке Pascal (т.е. область действия управляющих структур начинается их заголовком, но без слова begin, а заканчивается словом end). С точки зрения теории структурного программирования перечисленных средств достаточно для решения практически любых задач. В системе MATLAB также имеются операторы-переключатели типа case (аналоги имеются, например, в языке программирования FORTRAN), облегчающие создание программных конструкций со множественным ветвлением. С другой стороны в MATLAB исключены все средства, возможности которых можно реализовать уже имеющимися средствами, при этом существенным образом увеличен набор средств для программирования решений математических задач, сводящихся, прежде всего, к матричным вычислениям и сопряженных с реализацией современных численных методов.

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

Создание и использование M-файлов

Понятие об M-файлах.

Более эффективным способом выполнения команд в системе MATLAB является применение M-файлов.

M-файлом называется текстовый файл с расширением .m, содержащий набор инструкций на языке системы MATLAB (т.е. в M-файлах хранятся программные коды). Для решения различных математических задач MATLAB предоставляет весьма мощный и удобный язык программирования высокого уровня, интуитивно понятный даже для пользователей, не являющихся профессиональными программистами. Вместе с тем цель последующего изложения, разумеется, не начать осваивать с нуля новый и неизвестный язык программирования MATLAB, ведь на протяжении всей второй главы, при изучении различных команд и функций MATLAB и их выполнении в «режиме калькулятора», по сути, рассматривались особенности данного языка. Несмотря на то, что работу в командной строке нельзя назвать программированием, тем не менее, все команды, операторы и функции, описанные ранее, составляют типичный инструментарий языка программирования системы MATLAB.

Поясним, что создать M-файл можно в любом текстовом редакторе, поддерживающим формат ASCII-файлов (например, текстовый процессор Microsoft Word). Вместе с тем, в системе MATLAB имеется собственный, рекомендуемый к использованию встроенный редактор M-файлов, который отличают удобные визуальные средства создания и отладки программ. В этом редакторе можно набрать команды, выполнить их сразу или частично, а после сохранить в файле, который можно использовать в дальнейшем.

M-файлы должны иметь уникальные имена. Длина имен при этом не ограничивается, но лишь первый 31 символ учитывается при идентификации имени. При исполнении программного объекта его имя сравнивается со списком имен, хранящихся в рабочей области и в директориях M-файлов. Если имя файла оказывается неуникальным, соответствующий программный объект не исполняется и выдается сообщение об ошибке, а если уникальным, то программный объект исполняется в интерпретирующем режиме.

Типы M-файлов.

В системе MATLAB существуют два типа M-файлов: файл-программы (Script M-Files, скрипты или сценарии) и файл-функции (Function M-Files).

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

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

Основное отличие между файл-программами и файл-функциями состоит в работе с переменными. В частности, файл-программы работают только с переменными рабочего пространства и не имеют локальных переменных, т.е. все переменные, определенные в файл-программе, после ее выполнения становятся доступными в рабочем пространстве и могут быть использованы в других файл-программах или командах, вводимых в командной строке (аналогично в файл-программе могут быть использованы все переменные, уже определенные в командном окне, т.е. файл-программа работает с данными рабочей области). Таким образом, рабочее пространство становится общим для всех файл-программ, используемых в текущем сеансе работы с MATLAB. Достоинством такого подхода является достигаемая в результате полная интеграция файл-программы с рабочим пространством, что делает фай-программы средством автоматизации интерактивного режима работы пользователя с системой MATLAB. Указанная интеграция является при этом и недостатком – так, например, если предполагается оформить в виде файл-программы отдельный фрагмент решения некоторой задачи, его следует всегда вызывать в одной и той же программной обстановке (что, очевидно, выполняется далеко не всегда). Кроме того, файл-программе в момент ее вызова нельзя передать в виде параметров дополнительную информацию, не содержащуюся в рабочем пространстве. При выполнении нескольких файл-программ также исключительно важно следить за тем, чтобы в них были согласованы общие переменные.

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

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

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

Создание файл-программ.

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

Ввод операторов. В главном меню следует выбрать пункт New, и далее в ниспадающем меню указать Script (для файл-программы, как в рассматриваемом примере) или Function (для файл-функции), в результате чего откроется окно редактора M-файлов (рис. 2.29.1).

В окне следует ввести приведенную ниже последовательность команд:

x=-2:0.05:2;

[X,Y]=meshgrid(x);

Z=sqrt(X.^2+Y.^2);

surf(X,Y,Z)

Заметим, что почти каждая из команд в программе завершается точкой с запятой, что позволяет предотвратить вывод в командное окно результатов выполнения отдельных команд при выполнении программы.

При создании M-файлов каждый оператор для удобства визуального восприятия целесообразно записывать в отдельной строке. Для перехода к следующей строке необходимо нажать клавишу Enter. Длинное выражение можно разместить в нескольких строк, причем для разделения выражения на несколько строк применяется символ многоточия (…). Если в конце какой-либо строки, содержащей длинное выражение поставить многоточие и нажать Enter, то ввод выражения можно будет продолжить с новой строки.

При необходимости отдельные части программы можно дополнять комментариями, помогающими впоследствии вспомнить назначение той или иной команды и/или программы в целом. Комментарием считается строка программы, которая начинается со знака процента (%), расположенного в первой позиции строки. Комментарии можно вводить либо в отдель-

Рис. 2.29.1. Окно редактора M-файлов системы MATLAB.

ную строку (или несколько строк), либо добавлять после операторов. Строки с комментариями при выполнении программы игнорируются. Так, например, рассматриваемую программу можно снабдить комментариями:

% Создание массивов координат точек трехмерной поверхности

x=-2:0.05:2;

[X,Y]=meshgrid(x);

Z=sqrt(X.^2+Y.^2);

% Визуализация трехмерной поверхности

surf(X,Y,Z)

Следует обратить внимание на возможность (нерекомендуемую) задания комментария на русском языке (предпочтительнее использовать английский язык или транслит).

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

help имя_M-файла

Создание файл-программ. Завершив ввод файл-программы, ее следует сохранить, например, в текущем каталоге MATLAB. Для этого в главном меню следует выбрать пункт Save и далее в ниспадающем окне указать Save As. В результате в появившемся диалоговом окне Select File for Save As раскроется каталог MATLAB папки Документы, который по умолчанию определен в качестве текущего рабочего каталога. В поле Имя файла следует ввести имя файл-программы (например, sample) вместо появившегося по умолчанию Untitled. В поле Тип файла автоматически отобразиться требуемый тип файлов – MATLAB Code files (*.m), его изменять не следует (рис. 2.29.2).

Рис. 2.29.2. Диалоговое окно Select File for Save As.

Таким образом, создаваемый файл может иметь произвольное имя, но фиксированное расширение, состоящее из одной буквы m. Любой текстовый файл, содержащий произвольный код на M-языке и имеющий оговоренное выше расширение принято называть M-файлом. Заметим, что созданный M-файл, разумеется, можно сохранить не только в текущем, но и в любом другом каталоге (это касается как файл-программ, так и файл-функций), однако в таком случае необходимо будет установить пути поиска, ведущие к этому файлу. Для этого следует в главном меню следует выбрать пункт Set Path, с помощью которого вызывается диалоговое окно с тем же именем (рис. 2.29.3). В этом окне отображается список всех зарегистрированных в системе MATLAB путей доступа. Для добавления нового каталога в список путей доступа служит кнопка Add Folder… этого окна, которая, в свою очередь, порождает целый ряд дополнительных диалоговых окон, работа с которыми достаточно очевидна. После того, как в список путей доступа добавлен новый каталог, в нем можно сохранить файл с созданной в редакторе файл-программой.

Выполнение файл-программ. Выполнить созданную файл-программу можно выбрав в главном меню пункт Run и далее в ниспадающем окне указать Run: Sample. В результате выполнения файл-программы на экране отобразится окно с графиком заданной поверхности (рис. 2.29.4).

Альтернативным способом запуска файл-программы на исполнение является ввод в командном окне имени M-файла, содержащего текст файл-программы (при этом явно указывать расширение нельзя, так как это приведет к возникновению ошибочной ситуации) и нажатие клавиши Enter.

При работе с редактором M-файлов имеется возможность запустить на выполнение только часть команд, из которых состоит M-файл. Для этого

Рис. 2.29.3. Диалоговое окно Set Path.

Рис. 2.29.4. График поверхности.

нужно выделить, например, с помощью мыши, требуемый блок команд и нажать на пункт Run Section главного меню.

После выполнения файл-программы в рабочем пространстве становятся доступными все переменные, которые были в ней определены. В этом можно убедиться, взглянув на окно Workspaceна рабочем столе системы

MATLAB, либо введя в командное окно команду whos.

Редактирование файл-программ. Для изменения созданного M-файла, (например в целях модифицирования поверхности, создание которой рассматривалось выше, либо для задания иных интервалов ее построения), требуется внести соответствующие изменения в текст программы и вновь запустить файл-программу. Сохранить изменения текущего файла можно, выбрав пункт Save и далее в ниспадающем окне указать Save.

Создание файл-функций.

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