M-файлы, программ и функций
Тема 3.4.М-файлы и программирование средствами MatLab
Основные понятия и средства программированиям в MatLab
M-файлы, программ и функций
Работа с m-файлами
Редактор m-файлов
Основные операторы m-языка
Основные понятия и средства программированиям в MatLab
До сих пор мы в основном использовали систему MatLab в режиме непосредственного счета –в командном режиме (командном окне). Однако при решении серьезных задач возникает необходимость сохранения используемых последовательностей вычислений, а также их дальнейшей модификации. Иными словами, существует необходимость программированиярешения задач.
Это может показаться отходом от важной цели, которая преследуется разработчиками большинства математических систем, – выполнения математических вычислений без использования традиционного программирования. Однако это не так. Выше было показано, что множество математических задач решается в системе MatLab без программирования. С использованием языков высокого уровня для их решения потребовалось бы написать и оттестировать сотни программ.
Практически невозможно предусмотреть в одной, даже самой большой и мощной, математической системе возможность решения всех задач, которые могут интересовать пользователя. Программирование в системе MatLab является эффективным средством ее расширения и адаптации к решению специфических проблем. Оно реализуется с помощью языка программированиясистемы MatLab.
Большинство объектов этого языка, в частности все команды, операторы и функции, одновременно являются объектами входного языкаобщения с системой в командном режиме работы. Так что фактически мы приступили к описанию языка программирования системы MatLab с первых строк данной книги.
Так в чем же отличие входного языка от языка программирования? В основном – в способе фиксации создаваемых ими кодов. Сессии в командном режиме работы не сохраняются в памяти компьютера. А вот программы на языке программирования MatLab сохраняются в виде текстовых файлов (m-файлов). При этом могут сохраняться как целые программы в виде файлов-программ, так и отдельные программные модули — функции. Кроме того, важно, что программа может менять структуру алгоритмов вычислений в зависимости от входных данных и данных, создаваемых в ходе вычислений.
С позиций программиста язык программирования системы является типичным проблемно-ориентированнымязыком программирования высокого уровня. Точнее говоря, это даже язык сверхвысокого уровня, содержащий сложные операторы и функции, реализация которых на обычных языках (например, Бейсике, Паскале илиС++) потребовала бы много усилий и времени. К таким функциям относятся матричные функции, функции быстрого преобразования Фурье и др., а к операторам – операторы построения разнообразных графиков, генерации матриц определенного вида.
Итак, программами в системе MatLab являются программы, оформленные как m-файлы текстового формата, содержащие запись программ в виде программных кодов. Язык программирования системы MatLab имеет следующие средства:
· данные различного типа;
· константы и переменные;
· операторы, включая операторы математических выражений;
· встроенные команды и функции;
· функции пользователя;
· управляющие структуры;
· системные операторы и функции;
· средства расширения языка.
Тексты программ в системе MatLab пишутся на языке высокого уровня, достаточно понятном для пользователей умеренной квалификации в области программирования. Язык программирования MatLab является типичным интерпретатором.
Интерпретация означает, что MatLab не создает исполняемых конечных программ. Они существуют лишь в виде m-файлов, для выполнения, которых необходима среда MatLab. Однако для программ на языке MatLab созданы компиляторы, транслирующие программы MatLab в коды языков программирования С и C++. Это решает задачу создания исполняемых программ, первоначально разрабатываемых в среде MatLab. Компиляторы для системы MatLab являются вполне самостоятельными программными средствами.
Начальное представление о переменных, встроенных константах и функциях уже было дано в предшествующих главах.
В MatLab определены следующие основные типы данных, в общем случае представляющих собой многомерные массивы:
· single— числовые массивы с числами одинарной точности;
· double — числовые массивы с числами удвоенной точности;
· char — строчные массивы с элементами-символами;
· sparse — наследует свойства double, разреженные матрицы с элементами-числами удвоенной точности;
· сеll— массивы ячеек; ячейки, в свою очередь, тоже могут быть массивами;
· struct — массивы структур с полями, которые также могут содержать массивы;
· function_handle — дескрипторы функций:
· int32, uint32 — массивы 32-разрядных чисел со знаком и без знаков;
· int16,uint16 — массивы 16-разрядных целых чисел со знаком и без знаков;
· int8, uint8 — массивы 8-разрядных целых чисел со знаками и без знаков.
Каждому типу данных можно соотнести некоторые характерные для него операции, называемые методами. Поскольку в иерархии типов данных сверху находятся данные типа array, это значит, что все виды данных в MatLab являются массивами.
Язык программирования системы MatLab вобрал в себя почти все средства, необходимые для реализации различных технологий программирования:
· процедурного;
· операторного;
· функционального;
· логического;
· структурного (модульного);
· объектно-ориентированного;
· визуально-ориентированного.
В основе процедурной, операторнойи функциональнойтехнологии программирования лежат процедуры, операторы и функции, используемые как основные объекты языка. Эти типы объектов присутствуют в MatLab. Логическоепрограммирование реализуется в MatLab с помощью логических операторов и функций.
Наиболее ярко в MatLab представлены идеи структурного программирования. Подавляющее большинство функций и команд языка представляют собой вполне законченные модули, обмен данными между которыми происходит через их входные параметры, хотя возможен обмен информацией и через глобальные переменные. Программные модули оформлены в виде текстовых m-файлов, которые хранятся на диске и подключаются к программам по мере необходимости. Важно отметить, что в отличие от многих языков программирования, применение тех или иных модулей не требует предварительного объявления, а для создания и отладки самостоятельных модулей MatLab имеет все необходимые средства. Подавляющее большинство команд и функций системы MatLab поставляется в виде таких модулей.
Объектно-ориентированноепрограммирование также широко представлено в системе MatLab. Оно особенно актуально при программировании задач графики. Что качается визуально-ориентированногопрограммирования, то в MatLab оно представлено в основном в пакете моделирования заданных блоками устройств и систем Simulink.
Здесь необходимо отметить, что для языка системы MatLab различие между командами (выполняемыми при вводе с клавиатуры) и программными операторами (выполняемыми из программы) является условным. И команды, и программные операторы могут выполняться как из программы, так и в режиме прямых вычислений.
В общем видефункцияпреобразует одни данные в другие. Для многих функций характерен возврат значений в ответ на обращение к ним с указанием списка входных параметров–аргументов. Например, говорят, что функция sin(x)в ответ на обращение к ней возвращает значение синуса аргумента х. Поэтому функцию можно использовать в арифметических выражениях, например 2*sin(x+1). Для операторов (и команд), не возвращающих значения, такое применение обычно абсурдно.
Важным фактором является двойственность операторов и функций. Многие операторы имеют свои аналоги в виде функций. Так, например, оператор «+» имеет аналог в виде функции sum().Команды, записанные в виде Commandargument нередко имеют форму записи и в виде функцииCommand(' argument').
Указанная двойственность лежит в основе выбора между процедурным и функциональным подходами к программированию, каждый из которых имеет своих поклонников и противников и может (в той или иной мере) подходить для решения различных классов задач. При этом переход от одного подхода программирования к другому возможен в пределах одной программы и происходит настолько естественно, что большинство пользователей даже не задумывается над тем, каким же подходом (или стилем) программирования они преимущественно пользуются.
Имеющиеся в языке MatLab управляющие структуры: условных операторы if... else...elseif...end, case,циклыfor...end и while...end, похожи на те, которые используются в языках Бейсик, ПаскальиС++.
Программирование простых задач в среде MatLab очень напоминает программирование на языкеBаsic. Во многих случаях программы на языкеBаsic можно почти дословно перевести на язык системы, учтя небольшие отличия в синтаксисе этих языков.
m-файлы, программ и функций
Итак, мы установили, что работа в командном режиме (сессия) не является программированием. Внешним атрибутом последнего в MatLab служит задание последовательности действий по программе, записанной в виде m-файла. Для создания m-файлов может использоваться как редактор, встроенный в MatLab, так и любой текстовый редактор. Подготовленный и записанный на диск m-файлс соответствующим именем становится частью системы, и его можно вызывать как из командной строки, так и из другого m-файла. Имеется два типа m-файлов: файлы-программы и файлы-функции. Важно, что в процессе своего создания они проходят синтаксический контроль с помощью встроенного в систему MatLab редактора/отладчикаm-файлов.
Файл-программа, именуемый также Script-файлом, является просто записью последовательности команд без входных и выходных параметров. Он имеет следующую структуру:
-Имя_файла |
% Основной комментарий % Дополнительный комментарий Тело файла с любыми выражениями |
Файлы-программы имеют следующие особенности:
· они не имеют входных и выходных аргументов;
· работают с данными из рабочей области;
· в процессе выполнения не компилируются;
· представляют собой зафиксированную в виде файла последовательность операций, полностью аналогичную той, что используется во время сессии.
Основным комментарием является первая строка текстовых комментариев, а дополнительным – последующие строки комментариев. Это связано с тем, что основной комментарий выводится при выполнении команд lookfor и helpимя_каталога. Полный комментарий выводится при выполнении команды help Имя_файла. В качестве примера рассмотрим файл-программу PlotSinи пример вызова ее.
Пример 3.4.1 m-файла |
% Построение графика синусоиды линией красного цвета % с масштабной сеткой в интервале [xmin.xmax] x=xmin:0.1:xmax; plot(x,sin(x),е6'r') gridon |
Пример 3.4-1 сессии |
>>xmin=-1; >>xmax=1; >> |
Первые две строки m-файла Пример 3.4-1 – это комментарий, остальные – тело файла. Знак %в комментариях должен начинаться с первой позиции строки. В противном случае команда helpname_файла не будет воспринимать комментарий и возвратит сообщение вида