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_файла не будет воспринимать комментарий и возвратит сообщение вида