Самоучитель по MatLab
|
Введение
В наши дни компьютерная математика получила должную известность и интенсивно развивается как передовое научное направление на стыке математики и информатики. Это нашло отражение в крупной монографии и в целом ряде книг и обзоров автора данной книги, начавшего осваивать это направление еще в начале 80-х гг. прошлого века.
Программируемые микрокалькуляторы и персональные компьютеры уже давно применяются для математических расчетов. Для подготовки программ использовались различные универсальные языки программирования. В начале 90-х гг. на смену им пришли специализированные системы компьютерной математики (СКМ).
Среди них наибольшую известность получили системы Eureka, Mercury, Mathcad, Derive, Mathematica 2/3/4, Maple V R3/R4/R5 и Maple 6 и др. Каждая из этих систем имеет свои достоинства и недостатки и заслуживает отдельного рассмотрения. Повышенный интерес наших пользователей к подобным системам подтверждают результаты выпуска в последние годы целого ряда книг на русском языке, посвященных указанной теме. В списке литературы данной книги даны лишь основные из этих публикаций. За рубежом по каждой серьезной СКМ на web-сайтах их разработчиков можно найти перечни, включающие сотни наименований книг.
В данной книге рассматривается система MATLAB®, прошедшая многолетний путь развития от узко специализированного матричного программного модуля, используемого только на больших ЭВМ, до универсальной интегрированной СКМ, ориентированной на массовые персональные компьютеры класса IBM PC и Macintosh и рабочие станции UNIX и имеющей мощные средства диалога, графики и комплексной визуализации . MATLAB представляет собой хорошо апробированную и надежную СКМ, рассчитанную на решение самого широкого круга математических задач с представлением данных в универсальной (но не навязываемой пользователям) матричной форме, предложенной фирмой Math Works, Inc.
Система MATLAB предлагается разработчиками (фирма Math Works, Inc.) как лидирующий на рынке, в первую очередь в системе военно-промышленного комплекса, в аэрокосмической отрасли и автомобилестроении, язык программирования высокого уровня для технических вычислений с большим числом стандартных пакетов.прикладных программ. Система MATLAB вобрала в себя не только передовой опыт развития и компьютерной реализации численных методов, накопленный за последние три десятилетия, но и весь опыт становления математики за всю историю человечества. Около миллиона легально зарегистрированных пользователей уже применяют эту систему. Ее охотно используют в своих научных проектах ведущие университеты и научные центры мира. Популярности системы способствует ее мощное расширение Simulink, предоставляющее удобные и простые средства, в том числе визуальное объектно-ориентированное программирование, для моделирования линейных и нелинейных динамических систем, а также множество других пакетов расширения системы.
К сожалению, в России неоправданно мало публикаций по системе MATLAB. Помимо обзоров и первой книги по этой системе, в течение ряда лет серьезных изданий, посвященных MATLAB, практически не было. Наконец, в 1997-1999 гг. появились книги, содержащие перевод части фирменных справочников по системе MATLAB 4.0/5.2. При этом книга описывает лишь отдельные средства упрощенной студенческой версии системы MATLAB 5.0. Стали появляться и книги по пакетам расширения этой системы, и учебные курсы по системе MATLAB. Между тем за рубежом системе MATLAB посвящены сотни книг (их список можно найти на Web-узле фирмы Math Works, Inc., разработавшей эту систему), и еще сотни книг посвящены системе Maple V Release 5, ядро которой входит в состав пакетов расширения MATLAB 6.
Таким образом, интерес к системе MATLAB остается у нас неудовлетворенным. Особенно это относится к учебной литературе по новейшим реализациям системы MATLAB, в первую очередь MATLAB 6. Система MATLAB 6.0 появилась в конце 2000 г., а система MATLAB 6.1 (в которой весьма существенно переработаны пакеты расширения, но в ядро системы добавлены лишь две команды для работы со звуком и команда strfind, дополняющая возможности подробно описанной в книге функции findstr) — в июле 2001 г. MATLAB 6 является последней (на момент подготовки рукописи этой книги) реализацией системы MATLAB. В новой реализации системы не только расширены ее возможности, но и радикально переработан и улучшен интерфейс пользователя, существенно обновился состав пакетов расширений.
Хотя учебный курс по MATLAB 5.3 был выпущен в начале 2001 г., на момент подготовки рукописи данной книги публикаций по новейшей версии MAT-LAB 6 на русском языке вообще не было. Настоящая книга призвана ликвидировать этот пробел. Она подготовлена на основе существенно переработанного учебного курса, но в отличие от него посвящена уже новейшей 12-й реализации системы MATLAB, известной также как MATLAB 6. MATLAB 6 сразу получила широкую известность у нас в России. Как это ни печально, известность пришла во многом благодаря появлению большого числа «пиратских» компакт-дисков, содержащих полные и вполне работоспособные поставки MATLAB 6.0 со всеми ее дорогостоящими пакетами расширения (но, естественно, без русскоязычной документации).Данная книга представляет собой учебный курс по системе MATLAB 6, построенный в виде доступных и органично связанных друг с другом уроков. Описание пакетов расширения MATLAB ввиду большого объема материала по ним было решено вынести в отдельную книгу. При этом предполагаются ее существенно переработанные переиздания, посвященные каждой из версий MATLAB 6. Кроме того, существует учебный курс издательства «Питер» по визуальному моделированию в среде MATLAB, фокусирующийся на средствах Simulink [44]. Впрочем, некоторые примеры применения пакетов расширения в данную книгу включены, как и довольно подробный обзор этих пакетов (урок 23).
Отличия новой реализации MATLAB 6 от предшествующих версий 5.* настолько значительны, что вряд ли стоит пользоваться настоящим изданием для знакомства с предшествующими версиями MATLAB. Читателям, использующим MATLAB 5.*, в том числе любителям Macintosh, VAX/micro VAX и SunOS, можно рекомендовать уже упомянутую ранее изданную литературу по этим системам, все еще верой и правдой служащим многим пользователям. MATLAB 5 — развивающаяся система, которая будет обслуживать пользователей RISC- и VAX-станций Compaq в системах реального времени, пользователей компьютеров Apple, компьютеров на базе процессоров семейства Motorola 68000 и всех тех, кому важна совместимость с Macintosh, Next или RISC-серверами и рабочими станциями под управлением OpenVMS. Новейшие патчи к системам MATLAB 5 можно всегда получить с web-узла фирмы Math Works.
Оглавление книги может служить подробным тематическим указателем, а помещенный в конце книги алфавитный указатель поможет читателю быстро найти интересующие его сведения. Операторы и функции MATLAB 6 описаны настолько подробно, что книга может служить руководством пользователя по этой системе и выполнять функции самоучителя. В целом книга имеет вполне законченный характер и полезна всем, кто собирается изучать или уже использует любую реализацию системы MATLAB 6.
Урок №1.
Знакомство с матричной лабораторией MATLAB
История появления системы MATLAB
Современная компьютерная математика предлагает целый набор интегрированных программных систем и пакетов программ для автоматизации математических расчетов: Eureka, Gauss, TK Solver!, Derive, Mathcad, Mathematica, Maple V и др. Возникает вопрос: «А какое место занимает среди них система MATLAB?»
MATLAB — одна из старейших, тщательно проработанных и проверенных временем систем автоматизации математических расчетов, построенная на расширенном представлении и применении матричных операций. Это нашло отражение в названии системы — MATrix LABoratory — матричная лаборатория. Однако синтаксис языка программирования системы продуман настолько тщательно, что эта ориентация почти не ощущается теми пользователями, которых не интересуют непосредственно матричные вычисления.
Матрицы широко применяются в сложных математических расчетах, например при решении задач линейной алгебры и математического моделирования статических и динамических систем и объектов. Они являются основой автоматического составления и решения уравнений состояния динамических объектов и систем. Примером может служить расширение MATLAB — Simulink. Это существенно повышает интерес к системе MATLAB, вобравшей в себя лучшие достижения в области быстрого решения матричных задач.
. Однако в настоящее время MATLAB далеко вышла за пределы специализированной матричной системы и стала одной из наиболее мощных универсальных интегрированных СКМ. Слово «интегрированная» указывает на то, что в этой системе объединены удобная оболочка, редактор выражений и текстовых комментариев, вычислитель и графический программный процессор. В новой версии используются такие мощные типы данных, как многомерные массивы, массивы ячеек, массивы структур, массивы Java и разреженные матрицы, что открывает возможности применения системы при создании и отладке новых алгоритмов матричных и основанных на них параллельных вычислений и крупных баз данных.
В целом MATLAB — это уникальная коллекция реализаций современных численных методов компьютерной математики, созданных за последние три десятка лет. Она вобрала в себя и опыт, правила и методы математических вычислений, накопленные за тысячи лет развития математики. Это сочетается с мощными средствами графической визуализации и даже анимационной графики. Систему с прилагаемой к ней обширной документацией вполне можно рассматривать как фундаментальный многотомный электронный справочник по математическому обеспечению ЭВМ — от массовых персональных компьютеров до супер-ЭВМ.
Увы, пока представленный полностью лишь на английском и частично на японском языках!
Система MATLAB была разработана Молером (С. В. Moler) и с конца 70-х гг. широко использовалась на больших ЭВМ. В начале 80-х гг. Джон Литл (John Little) из фирмы MathWorks, Inc. разработал версии системы PC MATLAB для компьютеров класса IBM PC, VAX и Macintosh. В дальнейшем были созданы версии для рабочих станций Sun, компьютеров с операционной системой UNIX и многих других типов больших и малых ЭВМ. Сейчас свыше десятка популярных компьютерных платформ могут работать с системой MATLAB. К расширению системы были привлечены крупнейшие научные школы мира в области математики, программирования и естествознания. И вот теперь появилась новейшая версия этой системы — MATLAB 6. Одной из основных задач системы было предоставление пользователям мощного языка программирования, ориентированного на математические расчеты и способного превзойти возможности традиционных языков программирования, которые многие годы использовались для реализации численных методов. При этом особое внимание уделялось как повышению скорости вычислений, так и- адаптации системы к решению самых разнообразных задач пользователей.
Возможности MATLAB весьма обширны, а по скорости выполнения задач система нередко превосходит своих конкурентов. Она применима для расчетов практически в любой области науки и техники. Например, очень широко используется при математическом моделировании механических устройств и систем, в частности в динамике, гидродинамике, аэродинамике, акустике, энергетике и т. д. Этому способствует не только расширенный набор матричных и иных операций и функций, но и наличие пакета расширения (toolbox) Simulink, специально предназначенного для решения задач блочного моделирования динамических систем и устройств, а также десятков других пакетов расширений.
В обширном и постоянно пополняемом комплексе команд, функций и прикладных программ (пакетов расширения, пакетов инструментов, (toolbox)) [Пакет инструментов, пакет расширения, прикладная программа — почти синонимы при переводе термина toolbox, но пакет инструментов собственно MATLAB 6 рассматривается как один из toolbox всей системы, включающей MATLAB 6, Simulink и другие пакеты. Редакция старалась максимально сохранить авторский стиль, но следует помнить, что и под прикладной программой, и иод пакетом расширения автор имеет в виду toolbox в терминах MATLAB. — Примеч. ред.
] системы MATLAB содержатся специальные средства для электротехнических и радиотехнических расчетов (операции с комплексными числами, матрицами, векторами и полиномами, обработка данных, анализ сигналов и цифровая фильтрация), обработки изображений, реализации нейронных сетей, а также средства, относящиеся к другим новым направлениям науки и техники. Они иллюстрируются множеством практически полезных примеров. К разработкам расширений для системы MATLAB привлечены многие научные школы мира и руководящие ими крупные ученые и педагоги университетов.
Важными достоинствами системы являются ее открытость и расширяемость. Большинство команд и функций системы реализованы в виде текстовых m-файлов (с расширением .m) и файлов на языке Си, причем все файлы доступны для модификации. Пользователю дана возможность создавать не только отдельные файлы, но и библиотеки файлов для реализации специфических задач.
Поразительная легкость модификации системы и возможность ее адаптации к решению специфических задач науки и техники привели к созданию десятков пакетов прикладных программ (toolbox), намного расширивших сферы применения системы. Некоторые из них, например Notebook (интеграция с текстовым процессором Word и подготовка «живых» электронных книг), Symbolic Math и Extended Symbolic Math (символьные вычисления с применением ядра системы Maple V R5) и Simulink (моделирование динамических систем и устройств, заданных в виде системы блоков), настолько органично интегрировались с системой MATLAB, что стали ее составными частями. Аннотационное описание этих и ряда других пакетов дано в уроке 23. Более подробно, хотя в версиях для выпуска 11.
Возможности систем MATLAB
Возможности прежних версий MATLAB 4.x
Уже первые ориентированные на Microsoft Windows версии системы (MATLAB 4.x) обладали мощными средствами. В области математических вычислений:
В области реализации численных методов:
В области программирования:
В области визуализации и графики:
Эти средства сочетались с открытой архитектурой систем, позволяющей изменять уже существующие функции и добавлять свои собственные. Входящая в состав MATLAB программа Simulink дает возможность имитировать реальные системы и устройства, задавая их моделями, составленными из функциональных блоков. Simulink имеет обширную и расширяемую пользователями библиотеку блоков и простые средства задания и изменения их параметров.
Возможности версий MATLAB 5.x
В версиях системы MATLAB 5.x введены новые мощные средства. Улучшенная среда программирования:
Графический интерфейс пользователя (GUI):
Новые типы данных:
Средства программирования:
Математические вычисления и анализ данных:
Новые возможности обычной графики:
Презентационная графика и звук:
Интерактивная документация:
Версия MATLAB 5.3.1 (выпуск 11.1) интегрирует в своем составе 42 программных продукта, среди которых основу составляют базовая система MATLAB и новая реализация пакета расширения Simulink 3.1. В систему введен ряд новых компонентов, включая следующие:
Из других возможностей версии MATLAB 5.3.1 наиболее значимыми являются следующие:
Возможности новейшей версии MATLAB 6
Новейшая версия системы MATLAB 6 не только имеет перечисленные выше возможности предшествующих версий, но и характеризуется целым рядом новых и важных возможностей:
Simulink поступает к пользователям с более 100 встроенными блоками, в состав которых входят наиболее необходимые функции моделирования. Блоки сгруппированы в библиотеки в соответствии с их назначением: источники сигнала, приемники, дискретные, непрерывные, нелинейные, математика, функции и таблицы, сигналы и системы. В дополнение к обширному набору встроенных блоков Simulink имеет расширяемую библиотеку блоков благодаря функции создания пользовательских блоков и библиотек. Вы можете настраивать не только функциональность встроенных и пользовательских блоков, но также пользовательский интерфейс, используя значки и диалоги. Например, вы можете создать блоки для моделирования поведения специальных механических, электрических и программных компонентов, как, например, моторы, преобразователи, серво-клапаны, источники питания, энергетические установки, фильтры, шины, модемы,
Все это говорит о том, что двенадцатый выпуск системы (MATLAB 6.0 + Simu-link 4.0 + Stateflow 4.0 + ...) подвергся не косметической, а самой серьезной переработке, выдвигающей эту систему на абсолютно новый уровень развития и применения.
Интеграция с другими программными системами
В последние годы разработчики математических систем уделяют огромное внимание их интеграции и совместному использованию. Это не только расширяет класс решаемых каждой системой задач, но и позволяет подобрать для них самые лучшие и наиболее подходящие инструментальные средства. Решение сложных математических задач сразу на нескольких системах существенно повышает вероятность получения корректных результатов — увы, как математики так и математические системы способны ошибаться, особенно при некорректной постановке задач неопытными пользователями.
С системой MATLAB могут интегрироваться такие популярные математические системы, как Mathcad, Maple V и Mathematica. Есть тенденция и к объединению
математических систем с современными текстовыми процессорами. Так, новое средство последних версий MATLAB — Notebook — позволяет готовить документы в текстовом процессоре Word 95/97/2000 [Здесь и далее Word 95 и Word 97 — синонимы соотвественно Microsoft Word 7 из пакета Microsoft Office 95 и Microsoft Word 8 из пакета Microsoft Office 97. — Примеч. ред.] со вставками в виде документов MATLAB и результатов вычислений, представленных в численном, табличном или графическом виде. Таким образом, становится возможной подготовка «живых» электронных книг, в которых демонстрируемые примеры могут быть оперативно изменены. Так, вы можете менять условия задач и тут же наблюдать изменение результатов их решения. В версии MATLAB 6 предусмотрены также улучшенные средства для экспорта графики в слайды презентационной программы Microsoft PowerPoint.
В MATLAB задачи расширения системы решаются с помощью специализированных пакетов расширения — наборов инструментов (Toolbox). Многие из них содержат специальные средства для интеграции с другими программами, поддержки объектно-ориентированного и визуального программирования, для генерации различных приложений. Краткое описание пакетов расширения дано в уроке 23. Кроме того, этой теме посвящены отдельные книги.
В состав системы MATLAB входит ядро одной из самых мощных, популярных и хорошо апробированных систем символьной математики (компьютерной алгебры) Maple V Release 5. Оно используется пакетами расширения Symbolic Math Toolbox и Extended Symbolic Math Toolbox, благодаря которым в среде MATLAB стали доступны принципиально новые возможности символьных и аналитических вычислений.
Новые свойства системе MATLAB придала ее интеграция с программной системой Simulink, созданной для моделирования динамических систем и устройств, заданных в виде системы блоков. Базируясь на принципах визуально-ориентированного программирования, Simulink позволяет выполнять моделирование сложных устройств с высокой степенью достоверности и с прекрасными средствами представления результатов. Помимо естественной интеграции с пакетами расширения Symbolic Math и Simulink MATLAB интегрируется с десятками мощных пакетов расширения, описанными в уроке 23, и значительно более подробно, хотя в версиях для выпуска И, в монографии.
В свою очередь, многие другие математические системы, например Mathcad и Maple, допускают установление объектных и динамических связей с системой MATLAB, что позволяет использовать в них эффективные средства MATLAB для работы с матрицами. Эта прогрессивная тенденция интегрирования компьютерных математических систем, несомненно, будет продолжена.
Ориентация на матричные операции
Напомним, что двумерный массив чисел или математических выражений принято называть матрицей. А одномерный массив называют вектором. Примеры векторов и матриц даны ниже:{l, 2, 3, 4} — вектор из 4 элементов;
1 2 3 4
5 6 7 8 матрица размера 3x4;
9 8 7 6
а | а+b | а+b/с |
х | у*х | z |
1 | 2 | 3 |
матрица с элементами разного типа.
Векторы и матрицы характеризуются размерностью и размером. Размерность определяет структурную организацию массивов в виде строки (размерность 1), страницы (размерность 2), куба (размерность 3) и т. д. Так что вектор является одномерным массивом, а матрица представляет собой двумерный массив с размерностью 2. MATLAB допускает задание и использование многомерных массивов, но в этой главе мы пока ограничимся только одномерными и двумерными массивами — векторами и матрицами.
Размер вектора — это число его элементов, а размер матрицы определяется числом ее строк т и столбцов п. Обычно размер матрицы указывают как тхп. Матрица называется квадратной, если m = n, то есть число строк матрицы равно числу ее столбцов.
Векторы и матрицы могут иметь имена, например V — вектор или М — матрица. В данной книге имена векторов и матриц набираются полужирным шрифтом. Элементы векторов и матриц рассматриваются как индексированные переменные, например:
Система MATLAB выполняет сложные и трудоемкие операции над векторами и матрицами даже в режиме прямых вычислений без какого-либо программирования. Ею можно пользоваться как мощнейшим калькулятором, в котором наряду с обычными арифметическими и алгебраическими действиями могут использоваться такие сложные операции, как инвертирование матрицы, вычисление ее собственных значений и принадлежащих им векторов, решение систем линейных уравнений, вывод графиков двумерных и трехмерных функций и многое другое.
Интересно отметить, что даже обычные числа и переменные в MATLAB рассматриваются как матрицы размера 1x1, что дает единообразные формы и методы проведения операций над обычными числами и массивами. Данная операция обычно называется векторизацией. Векторизация обеспечивает и упрощение записи операций, производимых одновременно над всеми элементами вектрров и матриц, и существенное повышение скорости их выполнения. Это также означает, что большинство функций может работать с аргументами в виде векторов и матриц. При необходимости вектора и матрицы преобразуются в массивы, и значения вычисляются для каждого их элемента.
Расширяемость системы
Какой бы мощной ни была та или иная математическая система, она не способна включить в себя все средства, которые могут потребоваться сотням тысяч пользователей. Поэтому важно, чтобы система была достаточно гибкой и способной адаптироваться к различным задачам пользователей самых разных категорий — начинающих и опытных математиков, инженеров и научных работников, аспирантов и студентов вузов и даже школьников.
MATLAB — расширяемая система, и ее легко приспособить к решению нужных вам классов задач. Ее огромное достоинство заключается в том, что это расширение достигается естественным путем и реализуется в виде так называемых т-файлов (с расширением .m). Иными словами, расширения системы хранятся на жестком диске компьютера и в нужный момент вызываются для использования точно так же, как встроенные в MATLAB (внутренние) функции и процедуры.
Благодаря текстовому формату m-файлов пользователь может ввести в систему любую новую команду, оператор или функцию и затем пользоваться ими столь же просто, как и встроенными операторами или функциями. При этом в отличие от таких языков программирования, как Бейсик, Си или Паскаль не требуется никакого объявления этих новых функций. Это роднит MATLAB с языками Лого и Форт, имеющими словарную организацию операторов и функций и возможности пополнения словаря новыми определениями-словами. Но, поскольку новые определения в системе MATLAB хранятся в виде файлов на диске, это делает набор операторов и функций практически неограниченным.
В базовый набор слов системы входят спецзнаки, знаки арифметических и логических операций, арифметические, алгебраические, тригонометрические и некоторые специальные функции, функции быстрого преобразования Фурье и фильтрации, векторные и матричные функции, средства для работы с комплексными числами, операторы построения графиков в декартовой и полярной системах координат, трехмерных поверхностей и т. д. Словом, MATLAB предоставляет пользователю обширный набор готовых средств (большая часть из них — это внешние расширения в виде m-файлов).
Дополнительный уровень системы образуют ее пакеты расширения (toolbox). Они позволяют быстро ориентировать систему на решение задач в той или иной предметной области: в специальных разделах математики, в физике и в астрономии, в области нейтронных сетей и средств телекоммуникаций, в математическом моделировании, проектировании событийно-управляемых систем и т. д. Благодаря этому MATLAB обеспечивает высочайший уровень адаптации к решению задач конечного пользователя.
Мощные средства программирования
Многие математические системы создавались исходя из предположения, что пользователь будет решать свои задачи, практически не занимаясь программированием. Однако с самого начала было ясно, что подобный путь имеет недостатки
и, вообще говоря, порочен. Ведь многие задачи нуждаются в развитых средствах программирования, которые упрощают запись алгоритмов задач и порой открывают новые методы создания алгоритмов.
С одной стороны, MATLAB содержит огромное число операторов и функций, которые решают множество практических задач, для чего ранее приходилось готовить достаточно сложные программы. К примеру, это функции обращения или транспонирования матриц, вычисления значений производной или интеграла и т. д. и т. п. Число таких функций с учетом пакетов расширения системы уже достигает многих тысяч и непрерывно увеличивается.
Но, с другой стороны, система MATLAB с момента своего создания создавалась как мощный математико-ориентированный язык программирования высокого уровня. И многие рассматривали это как важное достоинство системы, свидетельствующее о возможности ее применения для решения новых, наиболее сложных математических задач.
Система MATLAB имеет входной язык, напоминающий Бейсик (с примесью Фортрана и Паскаля). Запись программ в системе традиционна и потому привычна для большинства пользователей компьютеров. К тому же система дает возможность редактировать программы с помощью любого привычного для пользователя текстового редактора. Имеет она и собственный редактор с отладчиком. Отказ от присущего системе Mathcad «шика» — задания задач в виде формул — компенсируется заметным увеличением скорости вычислений — при прочих равных условиях она почти на порядок выше, чем у системы Mathcad. А это немаловажное достоинство!
Язык системы MATLAB в части программирования математических вычислений намного богаче любого универсального языка программирования высокого уровня. Он реализует почти все известные средства программирования, в том числе объектно-ориентированное и (средствами Simulink) визуальное программирование. Это дает опытным программистам необъятные возможности для самовыражения.
Визуализация и графические средства
В последнее время создатели математических систем уделяют огромное внимание визуализации решения математических задач. Говоря проще, это означает, что постановка и описание решаемой задачи и результаты решения должны быть предельно понятными не только тем, кто решает задачи, но и тем, кто в дальнейшем их изучает или просто просматривает. Большую роль в визуализации решения математических задач играет графическое представление результатов, причем как конечных, так и промежуточных.
Визуализация постановки задачи в MATLAB решается применением приложения Notebook и назначением именам функций достаточно ясных имен (идентификаторов). А визуализация результатов вычислений достигается применением обширных средств графики, в том числе анимационной, а также использованием (там, где это нужно) средств символьной математики.
Новая версия MATLAB напрочь избавилась от некоторой примитивности графиков, которая была присуща первым версиям этой системы. Теперь новые графические средства Handle Graphics (дескрипторная или описательная графика) позволяют создавать полноценные объекты графики высокого разрешения, как геометрического, так и цветового. Возможности этой графики поддерживаются объектно-ориентированным программированием, средства которого также имеются в языке программирования системы MATLAB.
Реализуются, причем с повышенной скоростью, построения графиков практически всех известных в науке и технике типов. Широко практикуется функциональная закраска сложных поверхностей, в том числе с интерполяцией по цвету. Возможен учет всевозможных световых эффектов — вплоть до бликов на поверхности сложных фигур при освещении их различными источниками света и с учетом свойств материалов отражающих поверхностей. Применение дескрипторной графики позволяет создавать и типовые элементы пользовательского интерфейса — кнопки, меню, информационные и инструментальные панели и т. д., то есть реализовать элементы визуально-ориентированного программирования.
Графики выводятся отдельно от текстов в отдельных окнах. На одном графике можно представить множество кривых, отличающихся цветом (при цветном дисплее) и отличительными символами (кружками, крестиками, прямоугольниками и т. д.). Графики можно выводить в одно или в несколько окон. Наконец, в статьях и книгах формата Notebook, реализованных при совместной работе системы MATLAB с популярным текстовым процессором Microsoft Word 95/97/2000, графики могут располагаться вместе с текстом, формулами и результатами вычислений (числами, векторами и матрицами, таблицами и т. д.). В этом случае степень визуализации оказывается особенно высокой, поскольку документы класса Notebook по существу являются превосходно оформленными электронными книгами с действующими (вычисляемыми) примерами.
Особенно привлекательной выглядит возможность построения трехмерных поверхностей и фигур. Если в MATLAB 4 рендеринг трехмерных фигур осуществлялся только при помощи фирменного механизма painters, а в MATLAB 5 был добавлен программный рендеринг при помощи Z-буфера, то в MATLAB б основным является индустриальный стандарт Open GL. Он может поддерживаться аппаратно графическими ускорителями. Система автоматически подбирает наиболее оптимальный механизм рендеринга. По сравнению с системой Mathcad построение трехмерных фигур средствами MATLAB происходит почти на порядок быстрее. Кроме того, при построении таких графиков используется достаточно совершенный алгоритм удаления невидимых линий, что наряду с большими размерами графиков и возможностью интерполяции по цвету делает построенные трехмерные поверхности и фигуры весьма эстетичными и наглядными. Фигуры могут быть прозрачными. Уже в ранних версиях была введена эффектная возможность быстрого вращения графиков в любом направлении. В MATLAB 5.3.1 и 6 она улучшена — теперь вращать в пространстве можно даже плоскость с двумерными графиками.
Введен также ряд средств на основе графического интерфейса пользователя (GUI — Graphic User Interface), привычного для операционных систем Windows 95/98/Ме/ 2000/NT4. Это панели инструментов, редактор и отладчик m-файлов, красочная
демонстрация возможностей и т. д. Есть и возможность создавать свои средства пользовательского интерфейса.
Техническая документация по системе
Система MATLAB поставляется с обширной технической документацией и с развитой справочной системой. Система помощи реализована как в стандартном для систем MATLAB варианте — в интерактивном командном режиме, так и в форме гипертекстовых страниц с просмотром их браузером помощи. Кроме того, имеется обширный пакет электронных документов в формате PDF (отдельный компакт-диск в версии 6.0), для просмотра которых используется приложение Acrobat Reader (распространяется бесплатно) или Adobe Acrobat. Ниже перечислены наиболее важные из этих документов (далеко не все) для версии MATLAB 6.0 с указанием их объема в страницах: О «Getting Started with MATLAB» — начальное знакомство с системой MATLAB.
Итак, объем фирменной документации только по системе MATLAB 6.0 достигает почти 5000 страниц, что делает ее трудно обозримой. Тем более с учетом того, что эта документация является англоязычной.
Состав документации может несколько меняться в зависимости от типа поставок. Помимо этого, различные поставки системы могут содержать и другую техническую документацию, руководство по работе с системой Simulink, описание пакета символьных вычислений и т. д.
Документацию по системе MATLAB можно рассматривать как многотомный электронный (и обычный) справочник по современным численным методам и средствам их реализации на ЭВМ, включая персональные компьютеры. Одновременно — это одно из самых полных электронных справочных пособий по математике и многочисленным сферам ее применения. К сожалению, пока указанная документация поставляется с системой только на английском и на японском языках. Поскольку эта документация доступна каждому пользователю, рискнувшему установить достаточно полную версию MATLAB 6.0 на свой компьютер, ссылок на нее в списке литературы данного издания нет.
Данная книга дает достаточно полное описание почти всех средств базовой системы MATLAB. Тем не менее настоятельно рекомендуется обращаться к указанной документации всякий раз, когда требуется полное знакомство с той или иной областью применения системы, с ее редкими функциями, операторами или иными средствами, которые не нашли отражения в данной книге ввиду ограниченного (в сравнении с объемом указанной документации) объема.
MATLAB в Интернете
Представление математических систем в глобальной сети Интернет сегодня становится нормой. Свои сайты (страницы) в Интернете имеют все фирмы-разработчики математических систем.
Главная страница фирмы MathWorks
Рис. 1.1. Главная страница web-сайта фирмы MathWorks
Math Works, Inc. — создатель системы MATLAB — также имеет свой, регулярно обновляемый сайт (www.mathworks.com). О важности общения с ним говорит то обстоятельство, что в меню версии MATLAB 6.0 появилась позиция Web, дающая доступ к основным разделам этой страницы. Первая же команда позиции меню The Math Works Web Site дает выход на главную страницу web-сайта фирмы Math Works (рис. 1.2).
Следует отметить, что данная команда исполняется только в том случае, если на компьютере установлен какой-либо из браузеров для работы в сети Интернет, например входящий в состав операционной системы Windows 98 браузер Microsoft Internet Explorer 5.0. Приведенные далее копии экрана, иллюстрирующие отражение MATLAB в Интернете, получены при использовании именно этого браузера. В команной строке можно набрать команду support, которая откроет этот же сайт в окне браузера помощи, входящего в состав самой MATLAB.
Непосредственное подключение к Интернету изначально не требуется. Однако, разумеется, вы можете выйти на web-страницу фирмы Math Works и прямо с помощью браузера даже без установленной на вашем ПК системы MATLAB. Этот процесс подробно описан в книге и в других книгах об Интернете.
Регистрация через Интернет
Если вы удостоились чести стать легальным пользователем системы MATLAB, то первое, что надо сделать, — это установить систему на ваш компьютер и зарегистрироваться в фирме Math Works.
Рис. 1.2. Интернет-страница MATLAB Access фирмы MathWorks
Отдельный урок 2 посвящен тому, как надо устанавливать (инсталлировать) систему. Если система у вас уже установлена, то остается зарегистрироваться. Это можно сделать по телефону (номер указан в документации), по обычной почте (слишком долго и муторно) и через Интернет (проще всего, если есть доступ).
Math Works обычно дает срок в 30 суток для регистрации. До истечения этого срока вы можете ставить систему на свой ПК и спокойно работать с ней, например, оценивая то, нужна ли она вам или нет. Однако спустя этот срок возможность запуска системы будет заблокирована и вам придется вспомнить о необходимости регистрации. Лучше, естественно, сделать это быстрее, не откладывая это не слишком сложное дело на долгий срок.
Для регистрации через Интернет надо исполнить команду Membership в уже упомянутой позиции Web меню. После этого автоматически будет запущена система соединения с вашим Интернет-провайдером и начнется загрузка страницы MATLAB Access (доступ в MATLAB) с указанным адресом. На рис. 1.2 показано, как выглядит эта страница при использовании браузера Microsoft Internet Explorer 5.0.
Рис. 1.3. Раздел страницы фирмы MathWorks с регистрационной формой
Эта страница содержит гиперссылки на другие страницы сайта. На ней можно найти и раздел, посвященный регистрации MATLAB (рис. 1.3). Как нетрудно заметить, форма начинается с поля, в которое надо ввести номер лицензии. Он указывается в документации, поставляемой с получаемой системой.
Регистрационную форму следует заполнить, чтобы стать официально зарегистрированным пользователем системы MATLAB. Только в этом случае фирма MathWorks обеспечивает техническую и иную поддержку системы MATLAB. После
регистрации пользователь получает быстрый доступ к ресурсам web-сайта фирмы Math Works. Фамилия пользователя и его данные заносятся в базу данных о пользователях системы, и она появляется над строкой основных гиперссылок основной страницы — рис. 1.4. Разумеется, что фамилия и гиперссылка над ней с именем «access» (доступ) появляются только на странице пользователя, выполнившего регистрацию, и отсутствуют при просмотре web-страницы другими пользователями.
Рис. 1.4. Меню гиперссылок главной страницы Web-сайта фирмы MathWorks с фамилией легального
пользователя системы MATLAB 6.0
Заметим, что основная страница фирмы MathWorks регулярно обновляется и на рис. 1.1 она представлена на момент подготовки рукописи этой книги (март 2001 г.). На ней рекламируется 12-я реализация (12-й выпуск) системы (система MAT-LAB 6.0 с интегрированными пакетами расширения, включая пакет Simulink 4.0).
Поддержка системы MATLAB фирмой MathWorks
Зарегистрированные пользователи (а частично и другие) могут воспользоваться специально организованной фирмой MathWorks службой поддержки системы MATLAB. Для выхода на web-страницу такой поддержки из системы MATLAB достаточно исполнить команду Technical Support Knowledge Base. Будет загружена страница с разделом Support, показанная на рис. 1.5.
На этой странице имеется множество гипертекстовых ссылок (подчеркнутых снизу), открывающих доступ к различным ресурсам web-сайта фирмы MathWorks.
Рис. 1.5. Страница с разделом Support фирмы MathWorks
MATLAB в образовании
Как уже отмечалось, MATLAB широко используется в технике, науке и образовании.
Рис. 1.6. Web-страница, посвященная использованию MATLAB в образовании
Рис. 1.7. Web-страница, посвященная книгам по системе MATLAB
В качестве примера на рис. 1.6 показана web-страница, иллюстрирующая применение MATLAB в образовании. На этой странице сообщается о существовании студенческих версий системы MATLAB и специальных академических лицензий для приобретения MATLAB работниками науки и образования по льготным ценам.
Рис. 1.8. Фрагмент web-страницы
На одной из страниц (рис. 1.7) можно найти данные о публикациях по системе MATLAB. (всех версий). Уже из начала этой страницы видно, что число опубликованных книг по этой системе и ее компонентам и расширениям превышает 400. Это говорит об огромном интересе к системе MATLAB во всем мире.
Книги классифицируются по отношению к тому или иному компоненту системы. Есть и раздел по книгам на разных языках (не на английском). Увы, в разделе по русскоязычным книгам имеется только одна книга, показанная на странице, приведенной на рис. 1.8.
На сайте фирмы можно найти информацию как о программных продуктах фирмы, так и о пакетах ее расширения, примеры решения различных задач и т. д.
Обновление системы MATLAB через Интернет
Интернет позволяет производить обновление программных продуктов. Так, обратившись на сайте фирмы Math Works к странице Downloads (рис. 1.9), вы получите доступ к FTP (File Transfer Protocol) серверу фирмы Math Works и сможете загрузить студенческую версию системы MATLAB.
Рис. 1.9. Web-страница с анкетой, открывающей доступ к разделу Downloads (перекачка файлов)
Можно также получить версии системы с ограниченным 30 днями сроком действия — Trial (Пробные). Однако следует отметить, что перекачка даже упрощенных версий системы по нашему Интернету — большая проблема, поскольку файлы системы очень громоздки, и надо много часов для их перекачки. Вы можете заказать у фирмы компакт-диски с системой. Таким же образом делается обновление прежних версий системы, например MATLAB 5.3.1 до новейшей версии 6.0.
Некоторые пользователи ухитряются растягивать время работы с демонстрационной (и вполне работоспособной) версией MATLAB, переводя часы компьютера на то время, в течение которого доступ к этой версии открыт. Судя по тому что MathWorks снисходительно смотрит на это (допуская такую возможность), то для многих это и впрямь неплохой способ продлить удовольствие от общения с системой MATLAB на длительное время. Однако надо помнить, что в этом случае вы уже лишаетесь официальной технической и прочей поддержки фирмы MathWorks. Да и неудобств от этого более чем достаточно. Не говоря уже о моральной ущербности такого трюка.
Доступ к FTP-серверу фирмы MathWorks
Еще одна полезная услуга — доступ к FTP-серверу фирмы MathWorks, на котором хранится великое множество файлов системы MATLAB и файлов с примерами ее применения. Рис. 1.10 показывает одну из страниц FTP-сервера с файлами раз-тела Toolbox системы MATLAB. В этом разделе имеется множество папок с фай-ами. Адрес этой страницы виден в поле адресов браузера.
Рис. 1.10. Страница FTP-сервера фирмы MathWorks
Процесс загрузки файлов хорошо известен пользователям Интернета, и нет смысла описывать его в деталях. Ограничимся примером, показывающим, как можно скачать файл одной из функций Бесселя (рис. 1.11). Этот файл сразу же загружается в редактор m-файлов системы MATLAB и готов к немедленному использованию. Фактически это означает возможность расширения и модификации системы через Интернет.
Эта возможность полезна и в том случае, если вы случайно стерли или неудачно модифицировали какой-то из m-файлов системы. Вы можете получить из Интернета его оригинальную копию и восстановить работу вашей системы MATLAB.
Рис. 1.11. Пример перекачки m-файла системы MATLAB прямо в редактор m-файлов
Данные о системных ресурсах и пакетах расширения
Если вас интересуют данные о системных ресурсах или пакетах расширения системы MATLAB, то их тоже нетрудно получить из Интернета.
Страница, показанная на рис. 1.12, дает представление о всех продуктах и услугах фирмы Math Works. Она открывается исполнением команды Product в позиции Web меню системы MATLAB 6.0.
На этой странице есть и данные о многочисленных пакетах расширения системы MATLAB 6.0.
Приведенных данных достаточно для знакомства с Web-узлом фирмы MathWorks и оценки предлагаемых ею услуг по получению и сопровождению программных продуктов.
Версии Windows 98, Millennium Edition, NT4,2000, как и Windows 95 OSR2 и старше, поступают к вам с уже установленным программным обеспечением OpenGL. Но для того, чтобы использовать новый, впервые введенный в MATLAB 6 режим рендеринга графики Open GL, на компьютеры Windows 95 версий ниже OSR2 вам необходимо предварительно установить программное обеспечение Open GL.
Это можно сделать, скачав программу с FTP-сервера фирмы Microsoft_ftp:// ftp.microsoft.com/softlib/msfiles/opengl95.exe или зайдя на web-узел поддерживаемой Silicon Graphics организации Open GL Foundation.www.sgi.com. С MATLAB 6 проверено программное обеспечение Open GL Microsoft для Windows 95 и NT, CosmoGL (версия Open GL компании Cosmo Software — дочерней фирмы Silicon Graphics) и совместимое с OpenGL программное обеспечение Mesa (www.mesa3d.org).
Рис. 1.12. Web-страница с данными о продукции фирмы MathWorks
Но даже.если вы имеете Windows95 OSR2 и старше, вам есть смысл зайти на web-узел www.sgi.com. Там вы сможете установить последние драйверы Open GL для своих видеокарт (в том числе и интегрированных в материнские платы), даже если вы не знаете точное название своей видеокарты.
Теперь для того, чтобы MATLAB 6 могла ненавязчиво продемонстрировать свои новые эффекты трехмерной графики в стиле «Терминатора» и «Парка Юрского периода», вам достаточно щелкнуть на кнопках управления вашей версии Windows Пуск > Настройка > Панель управления > Экран > Настройка > Цветовая палитра > True Color. Приключения начинаются!
Что нового мы узнали?
В этом уроке мы научились:
Урок №2.
Установка системы и первые навыки работы
Установка и файловая система MATLAB
Запуск MATLAB и работа в режиме диалога
Первый опыт работы
MATLAB в роли суперкалькулятора
Числа, константы и системные переменные
Текстовые комментарии
Переменные, их создание, изменение и уничтожение
Операторы и функции
Сообщения об ошибках и исправление ошибок
Работа с векторами и матрицами
Сохранение и загрузка рабочей области сессии
Ведение дневника
Завершение работы с системой
Установка и файловая система MATLAB
Новая версия системы MATLAB 6 — весьма громоздкий программный 1 комплекс, который (при полной установке) требует до 1000-1500 Мбайт дисковой памяти (в зависимости от конкретной поставки, полноты справочной системы и числа устанавливаемых пакетов прикладных программ). Поэтому он поставляются исключительно на компакт-дисках. Полный комплект системы размещается на двух компакт-дисках только для чтения (CD-ROM), на одном из которых размещены PDF-файлы документации.
Для успешной установки MATLAB необходимы следующие минимальные средства:
компьютер с микропроцессором не ниже Pentium и математическим сопроцессором, рекомендуются процессоры Pentium PRO, Pentium II, Pentium III, Pentium IV или AMD Athlon;
устройство считывания компакт дисков (привод CD-ROM) (для установки), мышь, 8-разрядный графический адаптер и монитор, поддерживающие не менее 256 цветов;
операционная система Windows 95/98 (оригинальная или второе издание) / Me (Millennium Edition) /2000/ (допускается также NT4 с сервис-пакетами 5 или 6а);
ОЗУ емкостью 64 Мбайт для минимального варианта системы (рекомендуется иметь память не менее 128 Мбайт);
до 1500 Мбайт дискового пространства при полной установке всех расширений и всех справочных систем.
Для использования расширенных возможностей системы нужны графический ускоритель, Windows-совместимые звуковая карта и принтер, текстовый процессор Microsoft Word 95/97/ 2 2000 для реализации Notebook, компиляторы языков Си/Си++ и/или ФОРТРАН для подготовки собственных файлов расширения и браузер Netscape Navigator 4.0 и выше или Microsoft Internet Explorer 4.0 и выше. Для просмотра файлов справочной системы в формате PDF нужна программа Adobe Reader или Adobe Acrobat 3.0 и выше.
Компилятор Compaq Visual Fortran 5.0 или 6.1;
Microsoft Visual Си/С++ версий 5.0 или 6.0;
Borland Си/С++ версий 5.0, 5.02;
Borland C++Builder версий 3.0, 4.0 или 5.0;
WATCOM Си/Си++ версий 10.6 или 11 (фирмой Sybase более не поставляется версия этих компиляторов, необходимая для работы управляющих компьютеров под DOS);
LCC 2.4 (в комплекте с MATLAB).
Только в Linux версии поддерживается компилятор .GNU C++.
Мы рассматриваем систему, ориентированную на IBM PC (Intel80X86/ Pentium) — совместимые компьютеры под управлением Microsoft Windows как наиболее распространенные. Math Works рекомендует графические видеокарты Accel Eclipse фирмы Accel Graphics для аппаратной поддержки новых, введенных в MATLAB 6, эффектов трехмерной графики (расчет сцены и рендеринг Open GL) на этой платформе. Но наряду с ними MathWorks тщательно протестировала чисто программные драйверы операционных систем Windows. Если ваш графический ускоритель, аппаратно поддерживающий Open GL, другого типа, фирма MathWorks, Inc. его не протестировала со своей обычной легендарной скрупулезностью. Но это не значит, что искажения трехмерной графики неизбежны. Если у вас будут сомнения, вы всегда сможете программно отключить аппаратную поддержку Open GL, прежнему эффективно используя свой графический ускоритель для обработки шгонов, и задействовать только тщательно проверенное MathWorks программное обеспечение Open GL.
Возможна работа MATLAB 6 на ряде других компьютерных платформ: Lintel (ядро Linux 2.2x на Intel Pentium или AMD Athlon), Sun SPARC/UltraSPARC (Solaris 2.6, 2.7, 2.8), Silicon Graphics (рабочие станции на процессорах R12000, R10000, R5000 под IRIX64, IRIX 6.5x), Compaq(DEC) Alpha (Tru64UNIX 4.0f, 5.0), HP (HP700 (HP-UX10.2), HP9000 (HP-UX10.2 или HP-UX11), IBM RS/6000 (AIX 4.3.3). MathWorks протестировала графические ускорители Sun 3D Creator (Solaris 2.6, 2.7, 2.8) и ускорители моделей Silicon Graphics на платформах IRIX/IRIX 64 6.5x для проверки поддержки Open GL на UNIX платформах. Отличия между платформами, таким образом, в основном связаны со скоростью выполнения, в особенности при выводе трехмерной графики при расчете сцены и рендеринге новым, введенным только в данной версии, механизмом Open GL, и с отдельными деталями интерфейса. Как гарантирует MathWorks, отличия совсем (или для платформ HP и IBM почти) не затрагивают базового набора возможностей ядра и пакетов прикладных программ. Например, пользователи Linux Red Hat 7.0 и Slackware 7.0, 7.1, как и пользователи на RISC-платформах IBM и HP, не должны использовать виртуальную машину Java и должны запускать MATLAB 6.0 с параметром nojvm (matl ab-nojvm). Но и это ограничение не распространяется на пользователей RedHat 6.2, Mandrake 7.1, SuSE 6.4, Debian 2.1 и 2.2. Поэтому читатели, работающие с MATLAB 6.0 на любой платформе, могут пользоваться всеми или большей частью материалов данной книги. Для Macintosh поддерживается только версия MATLAB 5.2.1, для пользователей OpenVMS рекомендуется стабилизированная на этой платформе MATLAB 5.2.
Установка системы обычно не имеет никаких специфических особенностей и подобна установке других программных продуктов. Но в среде Windows 2000/NT4 установить и первый раз запустить систему должен администратор системы. От вас требуется задать свое имя (фамилию), сокращенное название организации и пароль, который указывается на установочном компакт-диске или в имеющемся на нем файле. Возможны типичная установка и выборочная, в ходе которой вам предлагается выбор компонентов системы. Последняя предпочтительнее, так как из-за огромного объема системы ее полная установка не всегда возможна.
Прежде чем начинать установку системы, рекомендуется ознакомиться с описанием компонентов. В уроке 23 дается аннотационное (а в монографии — более подробное, хотя в версиях для выпуска 11) описание наиболее важных пакетов прикладных программ — дополнительных компонентов (пакетов инструментов, пакетов расширения, (toolbox)) системы MATLAB. Нет никакого смысла использовать все компоненты, поскольку вы всегда сможете по мере необходимости изменить набор установленных компонентов системы. Установив только нужные компоненты, вы можете уменьшить затраты памяти на жестком диске в несколько раз.
Рис. 2.1. Начало установки — открытие окна Мастера установки
Для установки системы на ПК достаточно вставить первый установочный компакт-диск в устройство считывания компакт-дисков. Диск запускается автома тически, и Мастер установки проверяет, нет ли необходимости обновить или установить виртуальную машину Java фирмы Microsoft. Если такая необходимость есть, то вам надо согласиться с предложением Мастера установки. После того как Мастер установки установит или обновит виртуальную машину Java Microsoft, нужно обязательно ответить согласием на предложение перезагрузить компьютер (restart). Если Мастер установки не предложил вам обновить вашу виртуальную машину Java, но в процессе установки сообщит, что необходимый класс Java отсутствует, не прерывайте установку и не извлекайте компакт-диск. Вам достаточно выбрать Пуск > Выполнить > Обзор, выбрать в папке msutils вашего первого установочного компакт-диска файл msjavx86.exe и запустить его. После установки виртуальной машины Java и перезагрузки компьютера установка MATLAB продолжится автоматически. В самом начале установки собственно MATLAB Мастер установки выводит временное окно — заставку системы. При этом копируются вспомогательные файлы MathWorks Installer (Мастера установки), что показано на рис. 2.1.
Установка осуществляется с помощью ряда окон Мастера установки. Одно из них и показано на рис. 2.1. Прочтя его текст, надо нажать кнопку Next (Далее). Появится подббное окно с запросом на ввод персонального номера лицензии — рис. 2.2. Введя номер лицензии и подтвердив его щелчком на кнопке Next (Далее), можно получить окно с текстом лицензионного соглашения — рис. 2.3. Если вы с ним согласны, следует вновь щелкнуть кнопку Next (Далее).
Рис. 2.2. Окно с запросом персонального номера лицензии
Следующее окно (рис. 2.4) требует ввода пользователем своего имени и названия организации. Их можно сократить, как показано на рис. 2.4.
Рис. 2.3. Окно с текстом лицензии
Выполнив эти установки и щелкнув кнопку Next (Далее) (она становится доступной, если данные введены верно), можно получить окно с полем для указания имени папки, в которую будет установлена система, и с полным перечнем компонентов системы. Это окно представлено на рис. 2.5. В нем следует установить флажки напротив названий нужных компонентов.
Рис. 2.4. Окно установки имени пользователя и организации
Рис. 2.5. Окно выбора компонентов системы MATLAB
Здесь обратите особое внимание на указание свободного места в выбранном разделе жесткого диска и на данные о занимаемом системой объеме дискового пространства. Он должен быть заметно меньше, чем объем свободного пространства выбранного раздела диска, поскольку в нем, как правило, размещаются и служебные файлы операционной системы Windows 95/98/Me/ 2000/NT4, в частности временные файлы.
Рис. 2.6. Предупреждение об отсутствии папки для установки системы MATLAB 6.0
Если объема выбранного раздела явно недостаточно, то, во-первых, просмотрите другие разделы жесткого диска, а во-вторых, умерьте свои аппетиты в части установки расширений системы. Скорее всего, большинство этих расширений вам просто не понадобится, поскольку относится к не интересующим вас разделам науки и техники. Кроме того, система помощи может, например, оставаться на компакт-диске, так как вы сможете установить путь к файлам справочной системы на компакт-диске из пользовательского интерфейса после установки системы.
Обратите внимание и на выбор папки для размещения файлов системы MAT-LAB 6.0 — их тысячи! Если вы решили сменить предложенное вам название и место размещения папки для системы, то в случае отсутствия папки, название которой было введено вами, Мастер установки. (MathWorks Installer) выведет окно с сообщением об этом (рис. 2.6).
Вы должны согласиться с предложением о задании новой папки, щелкнув кнопку Yes (Да), или вернуться к окну рис. 2.5, щелкнув кнопку No (Нет). После этого и после выбора необходимых компонентов надо щелкнуть кнопку Next (Далее). Затем начинается самый длительный этап установки. Все файлы системы разар-хивируются и переносятся в создаваемые для них папки. Этот процесс сопровождается контролем по линейным индикаторам (рис. 2.7).
Рис. 2.7. Процесс установки системы MATLAB
Иногда возможно появление окон с сообщением о наличии на вашем компьютере каких-либо файлов, которые входят в состав системы MATLAB. В этом случае вам предоставляется возможность сохранить существующий файл или записать на его место новый файл системы MATLAB. Последнее, пожалуй, более целесообразно, так как MATLAB — очень сложная и объемная система и лучше не рисковать устанавливать ее с «чужими» файлами.
Процесс установки на компьютере Pentium II 350 МГц с 32-скоростным приводом CD-ROM идет довольно медленно и занимает больше часа при полной установке системы. Он может затянуться на несколько часов на менее мощном ПК. После установки надо произвести перезагрузку компьютера или временно отложить ее.
Запуск MATLAB без перезагрузки компьютера не рекомендуется, поскольку может протекать некорректно. Так что если вы отложили перезагрузку компьютера, не забудьте провести ее перед первым запуском системы MATLAB.
Система MATLAB состоит из многих тысяч файлов, находящихся в множестве папок. Полезно иметь представление о содержании основных папок, поскольку это позволяет быстро оценить возможности системы — например, узнать, какие операторы, функции или графические команды входят в систему.
В MATLAB особое значение имеют файлы двух типов — с расширениями .mat и .т. Первые являются бинарными файлами, в которых могут храниться значения переменных. Вторые представляют собой текстовые файлы, содержащие внешние программы, определения команд и функций системы. Именно к ним относится большая часть команд и функций, в том числе задаваемых пользователем для решения своих специфических задач. Нередко встречаются и файлы с расширением .с (коды на языке Си), файлы с откомпилированными кодами MATLAB с расширением .тех и другие. Исполняемые файлы имеют расширение .ехе.
Особое значение имеет папка MATLAB/TOOLBOX/MATLAB. В ней содержится набор стандартных m-файлов системы. Просмотр этих файлов позволяет детально оценить возможности поставляемой конкретной версии системы. Ниже перечислены основные подпапки с этими файлами (деление на категории условно, на самом деле все подпапки находятся в общей папке MATLAB/TOOLBOX/MATLAB).
Подпапка команд общего назначения:
General — команды общего назначения: работа со справкой, управление окном MATLAB, взаимодействие с операционной системой и т. д.
Подпапки операторов, конструкций языка и системных функций:
ops — операторы и специальные символы;
tang — конструкции языка программирования;
strfun — строковые функции;
iofun — функции ввода/вывода;
timefun — функции времени и дат;
datatypes — типы и структуры данных.
Подпапки основных математических и матричных функций:
elmat — команды создания элементарных матриц и операций с ними;
elfun — элементарные математические функции;
specfun — специальные математические функции;
matfun — матричные функции линейной алгебры;
datafun — анализ данных и преобразования Фурье;
polyfun — полиномиальные функции и функции интерполяции;
funfun — функции функций и функции решения обыкновенных дифференциальных уравнений;
soarfun — функции разреженных матриц.
Подпайки команд графики:
graph2d — команды двумерной графики;
graph3d — команды трехмерной графики;
specgraph — команды специальной графики;
graphics — команды дескрипторной графики;
uitools — графика пользовательского интерфейса.
Полный состав файлов каждой подпапки (их список содержится в файле соп-tents.m) можно вывести на просмотр с помощью команды help имя, где имя — название соответствующей подпапки.
Запуск MATLAB и работа в режиме диалога
В этой книге предполагается, что MATLAB используется в среде операционной системы Windows 95 или Windows 98/Me/2000. Копии сеансов работы MATLAB даны именно для этих случаев. Однако пользователи, работающие с Windows NT4, также могут обращаться к материалам данной книги без каких-либо ограничений, поскольку отличия касаются лишь мелких деталей пользовательского интерфейса. Это справедливо, хотя в меньшей мере, и для пользователей систем MATLAB на иных платформах.
Рис. 2.8. Подготовка к запуску MATLAB
Рис. 2.8 иллюстрирует подготовку к запуску системы MATLAB 6.0 из главного меню операционной системы Windows 98 со стандартным видом рабочего стола, подобным использованному в Windows 95. Для раскрытия главного меню активизируется кнопка Пуск (Start), расположенная внизу рабочего стола слева, или можно щелкнуть на значке с логотипом системы на рабочем столе Windows.
Далее мы не всегда будем повторять полное название системы — MATLAB 6.0 — и ограничимся сокращенным названием MATLAB.
После запуска MATLAB (см. рис. 2.8) на экране появляется основное окно системы MATLAB, показанное на рис. 2.9. Обычно это окно раскрыто не полностью и занимает часть рабочего стола. Вы можете раскрыть окно полностью, щелкнув на средней из трех кнопок, расположенных в конце титульной (верхней) строки окна. Левая кнопка сворачивает окно в кнопку с именем приложения, помещаемую в панель задач Windows 95/98, а правая закрывает окно и прекращает работу с MATLAB. Система готова к проведению вычислений в командном режиме. При этом вы можете не обращать внимания на новации пользовательского интерфейса, привнесенного операционными системами Windows 95 и 98/Me/2000/NT4, в виде расширяемого окна и панели инструментов. Мы обсудим их роль позже. Тем не менее сразу бросается в глаза существенное изменение интерфейса у системы MATLAB 6.0 по сравнению с предшествующей версией MATLAB 5.3.I.
Для уточнения версии системы следует вывести окно с информацией о системе (команда About MATLAB (О MATLAB) в меню Help (Помощь). Это окно представлено на рис. 2.10 в центре. Из него видно, что запущена версия 6.0 (R12) от 22 сентября 2000 г. Поскольку номер лицензии имеет конфиденциальный характер, вместо него на рисунке показан 0.
Рис. 2.9. Окно системы MATLAB после запуска и выполнения простых вычислений
Рис. 2.10. Окно с логотипом системы MATLAB 6.0
Полезно знать, что в начале запуска автоматически выполняется команда rnatl abrc, которая исполняет загрузочный файл matlabrc.m и файл startup.m, если таковой существует. Эти файлы выполняют начальную настройку терминала системы и задают ряд ее параметров. В частности, могут быть заданы пути доступа к другим файлам, необходимым для корректной работы системы MATLAB. Таким образом, опытные пользователи могут выполнить настройку системы под свои запросы. Однако в большинстве случаев особой необходимости в этом нет. Поскольку указанные файлы имеют текстовый формат, их легко просмотреть с помощью какого-либо текстового редактора или с помощью команды type в командном режиме работы MATLAB.
Сеанс работы с MATLAB принято именовать сессией (session). Сессия, в сущности, является текущим документом, отражающим работу пользователя с системой MATLAB. В ней имеются строки ввода, вывода и сообщений об ошибках. Входящие в сессию определения переменных и функций, расположенные в рабочей области памяти, но не саму сессию, можно записать на диск (файлы формата .mat), используя команду save (Сохранить). Команда load (Загрузить) позволяет считать с диска данные рабочей области. Фрагменты сессии можно оформить в виде дневника с помощью команды diary (Дневник). Позже мы обсудим эти команды подробно.
Новый и старый облик системы MATLAB 6.0
Пользователи, уже имеющие опыт работы с системами MATLAB, будут приятно (а кое-кто, напротив, неприятно) удивлены новациями пользовательского интерфейса системы MATLAB 6.0. В новой версии пользовательского интерфейса не осталось и следа от прежней строгой скромности.
В новой версии вид окна системы (рис. 2.9) уже вполне отвечает канонам современного интерфейса. Пользовательский интерфейс многооконный и имеет ряд средств прямого доступа к различным компонентам системы. Бросается в глаза новый пункт меню — Web. Он дает прямой выход в Интернет (см. урок 1).
В панели инструментов добавлена позиция ввода ранее отмененной операции и меню просмотра файловой системы с кнопкой его открытия. Но самые решительные изменения произошли в левой части общего окна системы — здесь появились окна доступа к компонентам системы Launch Pad/Workspace (Панель запуска/ Рабочая область) и окно Current Directory (текущей папки).
Надо прямо признать, что особой необходимости в этих новациях нет, поскольку старые пользователи уже привыкли к крайней простоте интерфейса систем MATLAB. Учтя это, разработчики системы ввели в позицию View (Вид) меню команду Desktop Layout > Command Windows Only (Только командное окно). Стоит ее исполнить, как вид окна системы будет очень напоминать добрый старый интерфейс версий MATLAB 5.* — рис. 2.11.
Рис. 2.11. Упрощенный интерфейс системы MATLAB 6.0
Если вы все же хотите вкусить прелести нового интерфейса, то исполните в той же позиции меню команду Desktop Layout > Default (Интерфейс по умолчанию). Там же вы найдете и другие возможности модификации вида интерфейса системы MATLAB 6.0.
Операции строчного редактирования
При работе с MATLAB в командном режиме действует простейший строчный редактор. Его команды перечислены в табл. 2.1.
Таблица 2.1. Команды строчного редактора MATLAB
Ctrl+b |
Перемещение курсора вправо на один символ |
Ctrl+f |
Перемещение курсора влево на один символ |
Ctrl +r |
Перемещение курсора вправо на одно слово |
Ctrl +1 |
Перемещение курсора влево на одно слово |
Home или Ctrl+a |
Перемещение курсора в начало строки |
End или Ctrl +e |
Перемещение курсора в конец строки |
Ctrl+рu Ctrl+n |
Перелистывание предыдущих команд вверх или вниз для подстановки в строку ввода |
Del или Ctrl+d |
Стирание символа справа от курсора |
Ctrl+h |
Стирание символа слева от курсора |
Ctrl+k |
Стирание до конца строки |
Esc |
Очистка строки ввода |
Ins |
Включение/выключение режима вставки |
PgUp |
Перелистывание страниц сессии вверх |
PgDn |
Перелистывание страниц сессии вниз |
Эти возможности кажутся примитивными, но позволяют пользователю быстро работать в стиле первых версий MATLAB для MS-DOS. Они обеспечивают важное свойство новых версий систем — их совместимость со старыми версиями в части преемственности навыков работы. Позже вы увидите, что в новых версиях есть вполне современный редактор со средствами отладки создаваемых документов — m-файлов.
Обратите особое внимание на применение клавиш вверх и вниз. Они используются для подстановки после маркера строки ввода » ранее введенных строк, например для их исправления, дублирования или дополнения. При этом указанные клавиши обеспечивают перелистывание ранее введенных строк снизу вверх или сверху вниз. Такая возможность существует благодаря организации специального стека, хранящего строки с исполненными ранее командами.
Команды управления окном
Полезно сразу усвоить некоторые команды управления окном командного режима:
clс — очищает экран и размещает курсор в левом верхнем углу пустого экрана.
home — возвращает курсор в левый верхний угол окна.
echo <file_name> on — включает режим вывода на экран текста Script-файла (файла-сценария).
echo <file_name> off — выключает режим вывода на экран текста Script-файла.
echo <fi1e_name> — меняет режим вывода на противоположный.
echo on all — включает режим вывода на экран текста всех m-файлов.
echo off all — отключает режим вывода на экран текста всех m-файлов.
mоrе on — включает режим постраничного вывода (полезен при просмотре больших m-файлов).
mоrе off — отключает режим постраничного вывода (в этом случае для просмотра больших фалов надо пользоваться линейкой прокрутки).
В версии MATLAB 6.0 обе команды clc и home действуют аналогично — очищают экран и помещают курсор в левый верхний угол окна командного режима работы. Команды echo позволяют включать или выключать отображение текстов m-файлов при каждом обращении к ним. Как правило, отображение текста файлов сильно загромождает экран и часто не является необходимым. При больших размерах файлов начало их текста (листинга) убегает далеко за пределы области просмотра (текущего окна командного режима). Поэтому для просмотра длинных листингов файлов полезно включить постраничный вывод командой more on. Различие между m-файлами сценариев и функций мы обсудим позже.
MATLAB в роли суперкалькулятора
Система MATLAB создана таким образом, что любые (подчас весьма сложные) вычисления можно выполнять в режиме прямых вычислений, то есть без подготовки программы. Это превращает MATLAB в необычайно мощный калькулятор, который способен производить не только обычные для калькуляторов вычисления (например, выполнять арифметические операции и вычислять элементарные функции), но и операции с векторами и матрицами, комплексными числами, рядами и полиномами. Можно почти мгновенно задать и вывести графики различных функций — от простой синусоиды до сложной трехмерной фигуры.
Работа с системой в режиме прямых вычислений носит диалоговый характер и происходит по правилу «задал вопрос, получил ответ». Пользователь набирает на клавиатуре вычисляемое выражение, редактирует его (если нужно) в командной строке и завершает ввод нажатием клавиши ENTER. В качестве примера на рис. 2.9 уже были показаны простейшие вычисления — вычисление выражения 2+3 и значения sin(l).
Даже из таких простых примеров можно сделать некоторые поучительные выводы:
для указания ввода исходных данных используется символ »;
данные вводятся с помощью простейшего строчного редактора;
для блокировки вывода результата вычислений некоторого выражения после него надо установить знак ; (точка с запятой);
если не указана переменная для значения результата вычислений, то MATLAB назначает такую переменную с именем ans;
знаком присваивания является привычный математикам знак равенства =, а не комбинированный знак :=, как во многих других языках программирования и математических системах;
результат вычислений выводится в строках вывода (без знака »);
встроенные функции (например, sin) записываются строчными буквами, и их аргументы указываются в круглых скобках;
диалог происходит в стиле «задал вопрос — получил ответ».
Следующий пример (он показан на рис. 2.11) иллюстрирует применение системы MATLAB для выполнения простых векторных операций. В этом примере задается четырехэлементный вектор V со значениями элементов 1, 2, 3 и 4. Далее (сосредоточьте на этом внимание!) вычисляются функции синуса и экспоненты с аргументом в виде вектора, а не скаляра.
Две записи для вектора — V=[l 2 3 4] и V=[1,2,3.4] — являются идентичными. Таким образом, векторы задаются списком своих элементов, разделяемых пробелами или запятыми. Список заключается в квадратные скобки. Для выделения п- го элемента вектора V используется выражение V(n). Оно задает соответствующую индексированную переменную.
В большинстве математических систем вычисление sin(V) и exp(V), где V — вектор, сопровождалось бы выдачей ошибки, поскольку функции sin и ехр должны иметь аргумент в виде скалярной величины. Однако MATLAB — матричная система, а вектор является разновидностью матрицы с размером 1х n. Поэтому в нашем случае результат вычислений будет вектором того же размера, что и аргумент V, но элементы возвращаемого вектора будут синусами или экспонентами от элементов вектора V.
Рис. 2.12. Простейшие операции с матрицей
Еще один пример (рис. 2.12) демонстрирует простейшие операции с матрицей. Здесь задана матрица М с размером 2x2 и вычислена матрица MX=sin(M).
Матрица задается в виде ряда векторов, представляющих ее строки и заключенных в квадратные скобки. Для разделения элементов векторов используется пробелили запятая, а для отделения одного вектора от другого — точка с запятой. Для выделения отдельного элемента матрицы М используется выражение вида M(j,i), где М — имя матрицы, j — номер строки и 1 — номер столбца.
Как видно из приведенных примеров, ввод исходных выражений для вычислений в системе MATLAB осуществляется в самом обычном текстовом формате. В этом же формате выдаются результаты вычислений, за исключением графических. Приведем пример записи вычислений, показанных на рис. 2.8 и 2.9:
То get started, select "MATLAB Help" from the Help menu.
» 2+3
ans=
5
» sin(l)
ans=
0.8415
» type sin
sin is a built-in function.
» help sin
SIN Sine.
SIN(X) is the sine'of the elements of X.
Overloaded methods
help sym/sin.m
» V=[l 2 3 4]
V =
1 2 3 4 » sin(V) ans =
0.8415 0.9093 0.1411 -0.7568
» 3*V
ans =
3 6 9 12
» V^2
??? Error using ==> ^
Matrix must be square.
» V.^2
ans=
1 4 9 16
» V+2
ans =
3 4 5 6
»
Примечание
Обратите внимание на форму ответов при выполнении простых операций без указания переменной, которой присваивается результат. В таких случаях MATLAB сам назначает переменную ans, которой присваивается результат и значение которой затем выводится на экран.
Сравните эти записи с записями в реальных сессиях (рис. 2.9 и 2.11). Вы наверняка отметите, что они практически идентичны. Разве что в текстовых вариантах примеров для экономии бумаги, на которой печаталась эта книга, убраны пропуски между строками. Мы будем показывать представление сессий в виде прямых копий экрана только в том случае, когда это связано со спецификой проведения вычислений, например когда они сопровождаются выводом графиков или демонстрацией элементов пользовательского интерфейса. В остальных случаях будет использоваться представление сессии прямо в тексте книги в представленном выше текстовом формате — основном для командного режима работы с системой MATLAB. При этом строки ввода будут отмечаться маркером ввода » в их начале. Ради компактности записи пустые строки будут опускаться.
О переносе строки в сессии
В некоторых случаях вводимое математическое выражение может оказаться настолько длинным, что для него не хватит одной строки. В этом случае часть выражения можно перенести на новую строку с помощью знака многоточия «...» (3 или более точек), например:
s = 1-1/2 + 1/3- 1/4 + 1/5 - 1/6 + 1/7 ... 1/8 + 1/9 - 1/10 + 1/11 - 1/12:
Этот прием может быть весьма полезным для создания наглядных документов, у которых предотвращается заход строк в невидимую область окна. Вообще говоря, максимальное число символов в одной строке командного режима — 4096, а в m-файле — не ограничено, но со столь длинными строками работать неудобно. В ранних версиях в одной строке было не более 256 символов.
Основные объекты MATLAB
Понятие о математическом выражении
Центральным понятием всех математических систем является математическое выражение. Оно задает то, что должно быть вычислено в численном (реже символьном) виде. Вот примеры простых математических выражений:
2+3
2.301*sin(x)
4+ехр(3)/5
sqrt(y)/2
sin(pi/2)
Математические выражения строятся на основе чисел, констант, переменных, операторов, функций и разных спецзнаков. Ниже даются краткие пояснения сути этих понятий.
Действительные и комплексные числа
Число — простейший объект языка MATLAB, представляющий количественные данные. Числа можно считать константами, имена которых совпадают с их значениями. Числа используются в общепринятом представлении о них. Они могут быть целыми, дробными, с фиксированной и плавающей точкой. Возможно представление чисел в хорошо известном научном формате с указанием мантиссы и порядка числа.
Ниже приводятся примеры представления чисел:
0
2
-3
2.301 0.00001 123.45бе-24
-234.456е10
Как нетрудно заметить, в мантиссе чисел целая часть отделяется от дробной не запятой, а точкой, как принято в большинстве языков программирования. Для отделения порядка числа от мантиссы используется символ е. Знак «плюс» у чисел не проставляется, а знак «минус» у числа называют унарным минусом. Пробелы между символами в числах не допускаются.
Числа могут быть комплексными: z =Rе(x)+Im(x)*i. Такие числа содержат действительную Re(z) и мнимую Im(z) части. Мнимая часть имеет множитель i или j, означающий корень квадратный из -1:
3i
2j
2+3i
-3.141i
-123.456+2.7e-3i
Функция real (z) возвращает действительную часть комплексного числа, Re(z), a функция imag(z) — мнимую, Im(z). Для получения модуля комплексного числа используется функция abs(z), а для вычисления фазы — angle(Z). Ниже даны простейшие примеры работы с комплексными числами:
»i
ans=
0 +1.0000i
» j
ans =
0 + 1.0000i
» z=2+3i
z =
2.0000 + 3.0000i
» abs(z)
ans =
3.6056
» real(z)
ans=
2
» imag(z)
ans =
3
» angle(z)
ans =
0.9828
В MATLAB не принято делить числа на целые и дробные, короткие и длинные и т. д., как это принято в большинстве языков программирования, хотя задавать числа в таких формах можно. Вообще же операции над числами выполняются в формате, который принято считать форматом с двойной точностью. Такой формат удовлетворяет подавляющему большинству требований к численным расчетам, но совершенно не подходит для символьных вычислений с произвольной (абсолютной) точностью. Символьные вычисления MATLAB может выполнять с помощью специального пакета расширения Symbolic Math Toolbox.
Константы и системные переменные
Константа — это предварительно определенное числовое или символьное значение, представленное уникальным именем. Числа (например 1, -2 и 1.23) являются безымянными числовыми константами.
Другие виды констант в MATLAB принято назвать системными переменными, поскольку, с одной стороны, они задаются системой при ее загрузке, а с другой — могут переопределяться. Основные системные переменные, применяемые в системе MATLAB, указаны ниже:
i или j — мнимая единица (корень квадратный из -1);
pi - число п - 3.1415926...;
eps — погрешность операций над числами с плавающей точкой (2- 52 );
realmin — наименьшее число с плавающей точкой (2- 1022 );
realmax — наибольшее число с плавающей точкой (2 1023 );
inf — значение машинной бесконечности;
ans — переменная, хранящая результат последней операции и обычно вызывающая его отображение на экране дисплея;
NaN — указание на нечисловой характер данных (Not-a-Number).
Вот примеры применения системных переменных:
»
2*pi ans =
6.2832
» eps
ans =
2.2204е-016
» real min
ans=
2.2251e-308
» realmax
ans=
1.7977e+308
» 1/0
Warning: Divide by zero,
ans=
Inf
» 0/0
Warning: Divide by zero,
ans =
NaN
Как отмечалось, системные переменные могут переопределяться. Можно задать системной переменной eps иное значение, например eps=0.0001. Однако важно то, что их значения по умолчанию задаются сразу после загрузки системы. Поэтому неопределенными в отличие от обычных переменных системные переменные не могут быть никогда.
Символьная константа — это цепочка символов, заключенных в апострофы, например:
'Hello my friend!'
'Привет'
'2+3'
Если в апострофы помещено математическое выражение, то оно не вычисляется и рассматривается просто как цепочка символов. Так что ' 2+3' не будет возвращать число 5. Однако с помощью специальных функций преобразования символьные выражения могут быть преобразованы в вычисляемые. Соответствующие функции преобразования будут рассмотрены в дальнейшем.
Текстовые комментарии
Поскольку MATLAB используется для достаточно сложных вычислений, важное значение имеет наглядность их описания. Она достигается, в частности, с помощью текстовых комментариев. Текстовые комментарии вводятся с помощью символа %, например так:
Bit is factorial function
Примечание
В каждой большой программе есть свои «ложки дегтя». В 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
Таким образом, оператор : является весьма удобным средством задания регулярной последовательности чисел. Он широко используется при работе со средствами построения графиков. В дальнейшем мы расширим представление о возможностях этого оператора.
Сообщения об ошибках и исправление ошибок
Важное значение при диалоге с системой MATLAB имеет диагностика ошибок. Вряд ли есть пользователь, помнящий точное написание тысяч операторов и функций, входящих в систему MATLAB и в пакеты прикладных программ. Поэтому никто не застрахован от ошибочного написания математических выражений или команд. MATLAB диагностирует вводимые команды и выражения и выдает соответствующие сообщения об ошибках или предупреждения. Пример вывода сообщения об ошибке (деление на 0) только что приводился.
Рассмотрим еще ряд примеров. Введем, к примеру, ошибочное выражение » sqr(2)
и нажмем клавишу ENTER. Система сообщит об ошибке:
??? Undefined function or variable 'sqr'.
Это сообщение говорит о том, что не определена переменная или функция, и указывает, какая именно — sqr. В данном случае, разумеется, можно просто набрать правильное выражение. Однако в случае громоздкого выражения лучше воспользоваться редактором. Для этого достаточно нажать клавишу вниздля перелистывания предыдущих строк. В результате в строке ввода появится выражение » sqr(2)
с курсором в его конце. В версии MATLAB 6 можно теперь нажать клавишу Tab. Система введет подсказку, анализируя уже введенные символы. Если вариантов несколько, клавишу Tab придется нажать еще раз. Из предложенных системой трех операторов выбираем sqrt. Теперь с помощью клавиши вниз вновь выбираем нужную строку и, пользуясь клавишей влево , устанавливаем курсор после буквы г. Теперь нажмем клавишу вверх, а затем клавишу ENTER. Выражение примет следующий вид:
» sqrt(2)
ans= 1.4142
Если бы был только один вариант окончания введенных символов, то после нажатия клавиши Tab система бы закончила наш ввод без перевода строки. Вычисления дают ожидаемый результат — значение квадратного корня из двух.
В системе MATLAB внешние определения используются точно так же, как и встроенные функции и операторы. Никаких дополнительных указаний на их применение делать не надо. Достаточно лишь позаботиться о том, чтобы используемые определения действительно существовали в виде файлов с расширением .m. Впрочем, если вы забудете об этом или введете имя несуществующего определения, то система отреагирует на это звуковым сигналом (звонком) и выводом сообщения об ошибке:
» hsin(1)
??? Undefined function or variable 'hsin'.
» sinh(1)
ans= 1.1752
В этом примере мы забыли (нарочно), какое имя имеет внешняя функция, вычисляющая гиперболический синус. Система подсказала, что функция или переменная с именем hsin не определена ни как внутренняя, ни как m-функция. Зато далее мы видим, что функция с именем sinh есть в составе функций системы MATLAB — она задана в виде М-функции. Между тем в последнем примере мы не давали системе никаких указаний на то, что следует искать именно внешнюю функцию! И это вычисление прошло так же просто, как вычисление встроенной функции, такой как sin. Разумеется, скорость вычислений по внешним определениям несколько ниже, чем по встроенным функциям или операторам.
При этом вычисления происходят следующим образом: вначале система быстро определяет, имеется ли введенное слово среди служебных слов системы. Если да, то нужные вычисления выполняются сразу, если нет, система ищет m-файл с соответствующим именем на диске. Если файла нет, то выдается сообщение об ошибке, и вычисления останавливаются. Если же файл найден, он загружается с жесткого диска в память машины и исполняется. Этот алгоритм аналогичен применяемому в развиваемых и адаптируемых к задачам пользователя языкам программирования ЛОГО и ФОРТ [7, 8].
Иногда в ходе вывода результатов вычислений появляется сокращение NaN (от слов Not a Number — не число). Оно обозначает неопределенность, например вида 0/0 или Inf/Inf, где Inf — системная переменная со значением машинной бесконечности. Могут появляться и различные предупреждения об ошибках (на английском языке). Например, при делении на 0 конечного/ числа появляется предупреждение «Warning: Devide by Zero.» («Внимание: Деление на ноль»). Диапазон чисел, представимых в системе, лежит от 10- 308 до 10+ 308 .
Вообще говоря, в MATLAB надо отличать предупреждение об ошибке от сообщения о ней. Предупреждения (обычно после слова Warning) не останавливают вычисления и лишь предупреждают пользователя о том, что диагностируемая ошибка способна повлиять на ход вычислений. Сообщение об ошибке (после знаков ???) останавливает вычисления.
Форматы чисел
По умолчанию MATLAB выдает числовые результаты в нормализованной форме с четырьмя цифрами после десятичной точки и одной до нее. Многих такая форма представления не всегда устраивает. Поэтому при работе с числовыми данными можно задавать различные форматы представления чисел. Однако в любом случае все вычисления проводятся с предельной, так называемой двойной, точностью. Для установки формата представления чисел используется команда » format name где name — имя формата. Для числовых данных name может быть следующим сообщением: short — короткое представление в фиксированном формате (5 знаков), short e — короткое представление в экспоненциальном формате (5 знаков мантиссы и 3 знака порядка), long — длинное представление в фиксированном формате (15 знаков), long e — длинное представление в экспоненциальном формате (15 знаков мантиссы и 3 знака порядка), hex — представление чисел в шестнадцатеричной форме; bank — представление для денежных единиц.
Для иллюстрации различных форматов рассмотрим вектор, содержащий два элемента-числа:
х=[4/3 1.2345е-6]
В различных форматах их представления будут иметь следующий вид:
|
|
|
|
|
|
format short format short e format long format long e format bank |
1.3333 1.3333E+000 1.333333333333338 1.333333333333338E+000 1.33 |
0.0000 1.2345E-006 0.000001234500000 1.234500000000000E-006 0.00 |
|
|
|
|
|
|
Задание формата сказывается только на форме вывода чисел. Вычисления все равно происходят в формате двойной точности, а ввод чисел возможен в любом удобном для пользователя виде.
Формирование векторов и матриц
Особенности задания векторов и матриц
Описанные выше простые правила вычислений распространяются и на гораздо более сложные вычисления, которые (при использовании обычных языков программирования типа Бейсик или Паскаль) требуют составления специальных программ. MATLAB — система, специально предназначенная для проведения сложных вычислений с векторами, матрицами и массивами. При этом она по умолчанию предполагает, что каждая заданная переменная — это вектор, матрица или массив. Все определяется конкретным значением переменной. Например, если задано Х=1, то это значит, что X —это вектор с единственным элементом, имеющим значение 1. Если надо задать вектор из трех элементов, то их значения следует перечислить в квадратных скобках, разделяя пробелами. Так, например, присваивавание
» V=[l 2 3]
V=
1 2 3
задает вектор V, имеющий три элемента со значениями 1, 2 и 3. После ввода вектора система выводит его на экран дисплея.
Задание матрицы требует указания нескольких строк. Для разграничения строк используется знак ; (точка с запятой). Этот же знак в конце ввода предотвращает вывод матрицы или вектора (и вообще результата любой операции) на экран дисплея. Так, ввод
» М=[1 2 3: 4 5 6; 7 8 9];
задает квадратную матрицу, которую можно вывести:
» M
M =
1 2 3
4 5 6
7 8 9
Возможен ввод элементов матриц и векторов в виде арифметических выражений, содержащих любые доступные системе функции, например:
» V= [2+2/(3+4) exp(5) sqrt(l0)]:
» V
V =
2.2857 148.4132 3.1623
Для указания отдельного элемента вектора или матрицы используются выражения вида V(1) или M(i. j). Например, если задать
» М(2. 2)
arts= 5
то результат будет равен 5. Если нужно присвоить элементу M(i. j) [ В тексте программ MATLAB лучше не использовать i и j как индексы, так как i и j — обозначение квадратного корня из -1. Но можно использовать I и J. — Примеч. ред. ] новое значение х, следует использовать выражение
M(ij)=x
Например, если элементу М(2, 2) надо присвоить значение 10, следует записать
» М(2. 2)=10
Выражение М( i) с одним индексом дает доступ к элементам матрицы, развернутым в один столбец. Такая матрица образуется из исходной, если подряд выписать ее столбцы.
Следующий пример поясняет такой доступ к элементам матрицы М:
» М=[1 2 3: 4 5 6: 7 8 9]
М =
1 2 3
4 5 6
7 8 9
» М(2)
ans =
4
» M(8)
ans =
6
» M(9)
ans =
9
» М(5)=100;
» М
М =
1 2 3
4 100 6
7 8 9
Возможно задание векторов и матриц с комплексными элементами, например:
» i=sqrt(-l):
» СМ =[1 2: 3 4] + i*[5 6: 7 8]
или
» СМ - [1+5*1 2+6*1: 3+7*1 4+8*1]
Это создает матрицу:
CM=
1.0000 + 5.00001 2.0000 + 6.00001
3.0000 + 7.00001 4.0000 + 8.00001
Наряду с операциями над отдельными элементами матриц и векторов система позволяет производить операции умножения, деления и возведения в степень сразу над всеми элементами, т. е. над массивами. Для этого перед знаком операции ставится точка. Например, оператор * означает умножение для векторов или матриц, а оператор .* —поэлементное умножение всех элементов массива. Так, если М — матрица, то М.*2 даст матрицу, все элементы которой умножены на скаляр — число 2. Впрочем, для умножения матрицы,на скаляр оба выражения — М*2 и М.*2 — оказываются эквивалентными.
Имеется также ряд особых функций для задания векторов и матриц. Например, функция magic(n) задает магическую матрицу размера пхп, у которой сумма всех столбцов, всех строк и даже диагоналей равна одному и тому же числу:
» M=magic(4)
М =
|
|||||
|
16 |
2 |
3 |
13 |
|
|
5 |
11 |
10 |
8 |
|
|
9 |
7 |
6 |
12 |
|
|
4 |
14 |
15 |
1 |
|
» sum(M)
ans=
34 34 34 34
» sum(M')
ans=
34 34 34 34
» sum(diag(M))
ans=
34
» M(1.2)+M(2.2)+M(3.2)+M(4.2)
ans= 34
Уже сама по себе возможность создания такой матрицы с помощью простой функции magic заинтересует любителей математики. Но векторных и матричных функций в системе множество, и мы их детально рассмотрим в дальнейшем. Напомним, что для стирания переменных из рабочей области памяти служит команда clear.
Объединение малых матриц в большую
Описанный способ задания матриц позволяет выполнить операцию конкатенации — объединения малых матриц в большую. Например, создадим вначале магическую матрицу размера 3x3:
» A=magic(3)
А=
|
||||
|
8 |
1 |
6 |
|
|
3 |
5 |
7 |
|
|
4 |
9 |
2 |
|
|
Теперь можно построить матрицу, содержащую четыре матрицы:
» В-[А А+16:А+32 А+16]
В =
|
8 |
1 |
6 |
24 |
17 |
22 |
|
|
3 |
5 |
7 |
19 |
21 |
23 |
|
|
4 |
9 |
2 |
20 |
25 |
18 |
|
|
40 |
33 |
38 |
24 |
17 |
22 |
|
|
35 |
37 |
39 |
19 |
21 |
23 |
|
|
36 |
41 |
34 |
20 |
25 |
18 |
|
Полученная матрица имеет уже размер 6x6. Вычислим сумму ее столбцов:
» sum(B)
ans =
126 126 126 126 126 126
Любопытно, что она одинакова для всех столбцов. А для вычисления суммы стро! используем команду
» sum(B.')
ans =
78 78 78 174 174 174
Здесь запись В.' означает транспонирование матрицы В, т. е. замену строк столб цами. На этот раз сумма оказалась разной. Это отвергает изначально возникши предположение, что матрица В тоже является магической. Для истинно магической матрицы суммы столбцов и строк должны быть одинаковыми:
» D=magic(6)
D=
|
35 |
1 |
6 |
26 |
19 |
24 |
|
|
3 |
32 |
7 |
21 |
23 |
25 |
|
|
31 |
9 |
2 |
22 |
27 |
20 |
|
|
8 |
28 |
33 |
17 |
10 |
15 |
|
|
30 |
5 |
34 |
12 |
14 |
16 |
|
|
4 |
36 |
29 |
13 |
18 |
11 |
|
|
» sum(D)
ans=
111 111 111 111 111 111
» sum(D.')
ans=
111 111 111 111 111 111
Более того, для магической матрицы одинаковой является и сумма элементов по основным диагоналям (главной диагонали и главной антидиагонали).
Удаление столбцов и строк матриц
Для формирования матриц и выполнения ряда матричных операций возникает необходимость удаления отдельных столбцов и строк матрицы. Для этого используются пустые квадратные скобки [ ]. Проделаем это с матрицей М:
» М=[1 2 3; 4 5 6; 7 8 9]
М =
|
||||
|
1 |
2 |
3 |
|
|
4 |
5 |
6 |
|
|
7 |
8 |
9 |
|
|
Удалим второй столбец используя оператор : (двоеточие):
» М(:.2)=[ ]
1 3
4 6
7 9
А теперь, используя оператор : (двоеточие), удалим вторую строку:
» М(2.:)=[ ]
М =
1 3
7 9
Операции с рабочей областью и текстом сессии
Дефрагментация рабочей области
По мере задания одних переменных и стирания других рабочая область перестает быть непрерывной и начинает содержать «дыры» и всякий «мусор». Это рано или поздно может привести к ухудшению работы системы или даже к нехватке оперативной памяти. Подобная ситуация становится возможной, если вы работаете с достаточно большими массивами данных.
Во избежание непроизводительных потерь памяти при работе с объемными данными (а векторы, матрицы и массивы относятся к таковым) следует использовать команду pack, осуществляющую дефрагментацию рабочей области. Эта команда переписывает все определения рабочей области на жесткий диск, очищает рабочую область и затем заново считывает все определения без «дыр» и «мусора» в рабочую область.
Сохранение рабочей области сессии
Переменные и определения новых функций в системе MATLAB хранятся в особой области памяти, именуемой рабочей областью. MATLAB позволяет сохранять значения переменных в виде бинарных файлов с расширением .mat Для этого служит команда save, которая может использоваться в ряде форм:
save fname — записывается рабочая область всех переменных в файле бинарного формата с именем fname.mat;
save fname X — записывает только значение переменной X;
save fname X Y Z — записывает значения переменных X, Y и Z.
После этих параметров можно указать ключи, уточняющие формат записи файлов:
-mat — двоичный МАТ-формат, используемый по умолчанию;
-ascii — ASCII-формат единичной точности (8 цифр);
-ascii -double — ASCII-формат двойной точности (16 цифр);
-ascii -double -tabs — формат с разделителем и метками табуляции;
V4 — запись МАТ-файла в формате версии MATLAB 4;
-append — добавление в существующий МАТ-файл.
Возможно использование слова save и в формате функции, а не команды, например:
save ('fname', 'varT . 'var2')
В этом случае имена файлов и переменных задаются строковыми константами.
Следует отметить, что возможности сохранения всего текста сессии, формируемой в командном режиме, команда save не дает. И не случайно! Дело в том, что сессия является результатом проб и ошибок, и ее текст наряду с правильными определениями содержит сообщения об ошибках, переопределения функций и переменных и много прочей «шелухи». Необходимости сохранять такое «творчество» обычно нет. А если есть — для этого служит команда diary, описанная чуть ниже.
Тем не менее это не значит, что вы не имеете возможности записать только то рациональное зерно, которое родилось в ходе попыток реализации ваших алгоритмов и методов решения задач. Надо просто воспользоваться редактором и отладчиком, которые позволяют (после отладки программы) получить документ в корректной форме без синтаксических и иных ошибок. Такой документ сохраняется в текстовом формате в виде файла с расширением .m.
Ведение дневника
Мы отмечали, что сессии не записываются на диск стандартной командой save. Однако если такая необходимость есть, можно воспользоваться специальной командой для ведения так называемого дневника сессии:
diary filename — ведет запись на диск всех команд в строках ввода и полученных результатов в виде текстового файла с указанным именем;
diary off — приостанавливает запись в файл;
diary on — вновь начинает запись в файл.
Таким образом, чередуя команды diary off и diary on, можно сохранять нужные фрагменты сессии в их формальном виде. Команду diary можно задать и в виде функции diary('file'), где строка 'file' задает имя файла. Следующий пример поясняет технику применения команды diary:
» diary myfile.m
» 1+2
ans =
3
» diary off
» 2+3
ans =
5
» diary on
» sin(l)
ans =
0.8415
» diary off
Нетрудно заметить, что в данном примере первая операция — 1+2=3 — будет записана в файл myfile.m, вторая — 2+3=5 — не будет записана, третья операция — sin(1)=0.8415 — снова будет записана. Таким образом, будет создан файл сценария (Script-файл) следующего вида:
1+2
ans =
3
diary off sin(1)
ans =
0.8415
diary off
Он приведен в том виде, как записан, т. е. с пробелами между строк. Одна из распространенных ошибок начинающих пользователей — попытка запустить подобный файл в командной строке указанием его имени:
» myfile
??? ans =
|
Missing variable or function.
Error in ==> С:\MATLAB\bin\niyfile.m
On line 3 --> ans =
Обычно это приводит к ошибкам, так как данный файл — это просто текстовая запись команд и результатов их выполнения, не проверяемая на корректность и содержащая ряд строк, ошибочных с позиций синтаксиса языка программирования MATLAB — например, выражения ans =. Зато команда type позволяет просмотреть текст такого файла со всеми записанными действиями:
» type myfile
1+2
ans=
3
diary off.
ans=
0.8415
diary off
Во избежание отмеченных казусов рекомендуется записывать файл с расширением, отличным от .m, например .txt. Это позволит встраивать подобные текстовые файлы дневника сессии в документы, содержащие ее описание.
Загрузка рабочей области сессии
Для загрузки рабочей области ранее проведенной сессии (если она была сохранена) можно использовать команду load:
load fname ... — загрузка ранее сохраненных в файле fname.mat определений со спецификациями на месте многоточия, подобными описанным для команды save (включая ключ -mat для загрузки файлов с расширением .mat обычного бинарного формата, используемого по умолчанию);
1oad( 'fname'....) — загрузка файла fname.mat в форме функции.
Если команда (или функция) load используется в ходе проведения сессии, то произойдет замена текущих значений переменных теми значениями, которые были сохранены в считываемом МАТ-файле.
Для задания имен загружаемых файлов может использоваться знак *, означающий загрузку всех файлов с определенными признаками. Например, load demo*.mat означает загрузку всех файлов с началом имени demo, например demol, demo2, demoa, demob и т. д. Имена загружаемых файлов можно формировать с помощью операций над строковыми выражениями.
Завершение вычислений и работы с системой
Иногда из-за ошибок в программе или из-за сложности решаемой задачи MATLAB «зацикливается» и перестает выдавать результаты либо непрерывно выдает их, хотя в этом уже нет необходимости. Для прерывания вычислений в этом случае достаточно нажать одновременно клавиши Ctrl и С (латинское).
Завершение работы с системой
Для завершения работы с системой можно использовать команды exit, quit (которые сохраняют содержимое рабочей области и выполняет другие действия в соот ветствии с файлом сценария finish.m) или комбинацию клавиш Ctrl+Q. Если необходимо сохранить значения всех переменных (векторов, матриц) системы, то перед вводом команды exit следует дать команду save нужной формы. Команда load после загрузки системы считывает значения этих переменных и позволяет начать работу с системой с того момента, когда она была прервана.
На этом мы закончим начальную экскурсию в технику матричных вычислений системы MATLAB. Мы расширим представления о ней в последующих уроках.
Что нового мы узнали?
В этом уроке мы научились:
Устанавливать и запускать систему MATLAB.
Редактировать документы и управлять их окном.
Выполнять простые расчеты.
Работать с числами, константами и переменными разного типа.
Задавать текстовые комментарии.
Использовать наиболее распространенные операторы и функции.
Распознавать сообщения об ошибках и предупреждения.
Задавать разные форматы чисел.
Осуществлять простые операции с матрицами.
Вести дневник сессии.
Дефрагментировать, сохранять и загружать рабочую область.
Завершать работу с системой.
Урок №3.
Основы графической визуализации вычислений
Особенности графики системы MATLAB
Построение графика функций одной переменной
Столбцовые диаграммы
Построение трехмерных графиков
Вращение графиков мышью
Контекстное меню графиков
Управление форматом графиков
Особенности графики системы MATLAB
Начиная с версии MATLAB 4.0, впервые ориентированной на Windows, графические средства системы MATLAB были существенно улучшены. Основные отличительные черты графики в новой версии MATLAB 6:
существенно улучшенный интерфейс графических окон;
введение новой панели инструментов Camera для интерактивного изменения условий видимости объекта;
расширенные возможности форматирования графики;
возможность создания графики в отдельных окнах;
возможность вывода нескольких графических окон;
возможность перемещения окон по экрану и изменения их размеров;
возможность перемещения области графики внутри графического окна;
задание различных координатных систем и осей;
высокое качество графики;
широкие возможности использования цвета;
легкость установки графических признаков — атрибутов;
снятие ограничений на число цветов;
обилие параметров команд графики;
возможность получения естественно выглядящих трехмерных фигур и их сочетаний;
простота построения трехмерных графиков с их проекцией на плоскость;
возможность построения сечений трехмерных фигур и поверхностей плоскостями;
функциональная многоцветная и полутоновая окраска;
возможность имитации световых эффектов при освещении фигур точечным источником света;
возможность создания анимационной графики;
возможность создания объектов для типового интерфейса пользователя.
С понятием графики связано представление о графических объектах, имеющих определенные свойства. В большинстве случаев об объектах можно забыть, если только вы не занимаетесь объектно-ориентированным программированием задач графики. Связано это с тем, что большинство команд высокоуровневой графики, ориентированной на конечного пользователя, автоматически устанавливает свойства графических объектов и обеспечивает воспроизведение графики в нужных системе координат, палитре цветов, масштабе и т. д.
На более низком уровне решения задач используется ориентированная на программиста дескрипторная графика (Handle Graphics), при которой каждому графическому объекту в соответствие ставится особое описание — дескриптор, на который возможны ссылки при использовании графического объекта. Дескрипторная графика позволяет осуществлять визуальное программирование объектов пользовательского интерфейса — управляющих кнопок, текстовых панелей и т. д. Команды дескрипторной графики могут использоваться в высокоуровневой графике, например, для удаления осей, изменения цвета и т. д. в уже построенных графических объектах. Эти обширные возможности делают графику MATLAB одной из лучших среди графических подсистем систем компьютерной математики (СКМ).
Несмотря на обилие графических команд, их синтаксис достаточно прост и легко усваивается даже начинающими пользователями. Руководствуясь правилом описания «от простого к сложному», мы рассмотрим сначала графику функций одной переменной, а затем трехмерную графику, специальную, анимационную и, наконец, дескрипторную.
Хотя данная книга не предусматривает исчерпывающе полного описания всех команд графики системы MATLAB, большинство команд графики будет рассмотрено с примерами, которые можно считать дополнительными к тем, которые приведены в документации по системе.
Построение графика функций одной переменной
В режиме непосредственных вычислений доступны практически все возможности системы. Широко используется, например, построение графиков различных функций, дающих наглядное представление об их поведении в широком диапазоне изменения аргумента. При этом графики строятся в отдельных масштабируемых и перемещаемых окнах.
Возьмем вначале простейший пример — построение графика синусоиды. Следует помнить, что MATLAB (как и другие СКМ) строит графики функций по ряду точек, соединяя их отрезками прямых, т. е. осуществляя линейную интерполяцию функции в интервале между смежными точками. Зададим интервал изменения аргумента х от 0 до 10с шагом 0.1. Для построения графика достаточно вначале задать вектор х=0:0.1:10, а затем использовать команду построения графиков plot(sin(x)). Это показано на рис. 3.1.
Вектор х задает интервал изменения независимой переменной от 0 до 10 с шагом 0.1. Почему взят такой шаг, а не, скажем, 1? Дело в том, что plot строит не истинный график функции sin(x), а лишь заданное числом элементов вектора х число точек. Эти точки затем просто соединяются отрезками прямых, т. е. осуществляется кусочно-линейная интерполяция данных графика. При 100 точках полученная кривая глазом воспринимается как вполне плавная, но при 10-20 точках она будет выглядеть состоящей из отрезков прямых.
Графики MATLAB строит в отдельных окнах, называемых графическими окнами. С первого взгляда видны отличия графического окна, показанного на рис. 3.1, от командного окна MATLAB. В главном меню окна появилась позиция Tools (Инструменты), которая позволяет вывести или скрыть инструментальную панель, видимую в верхней части окна графики на рис. 3.1. Средства этой панели (мы их рассмотрим полнее в дальнейшем) позволяют легко управлять параметрами графиков и наносить на них текстовые комментарии в любом месте.
Рис. 3.1. Пример построения графика синусоиды
Построение в одном окне графиков нескольких функций
Более подробное описание графического окна будет дано в уроке 5. А пока пойдем дальше и попытаемся построить графики сразу трех функций: sin(x), cos(#) и sin (x)/х. Прежде всего отметим, что эти функции могут быть обозначены переменными, не имеющими явного указания аргумента в виде у(х):
»y1=sin(x); y2=cos(x); y3=sin(x)/x;
Такая возможность обусловлена тем, что эти переменные являются векторами — как и переменная х. Теперь можно использовать одну из ряда форм команды
plot: plot(a1.f1.a2.f2.a3.f3,...).
где al, а2, аЗ,.„ — векторы аргументов функций (в нашем случае все они — х), a f1, f2, f3,... —векторы значений функций, графики которых строятся в одном окне. В нашем случае для построения графиков указанных функций мы должны записать следующее:
» plot(x,y1,x,y2,x.y3)
Можно ожидать, что MATLAB в этом случае построит, как обычно, точки графиков этих функций и соединит их отрезками линий. Но, увы, если мы выполним эти команды, то никакого графика не получим вообще. Не исключен даже сбой Б работе программы. Причина этого казуса уже обсуждалась в предыдущем уроке — при вычислении функции y3=sin(x)/x, если х представляет собой массив (вектор), то нельзя использовать оператор матричного деления /.
Этот пример еще раз наглядно указывает на то, что чисто поверхностное применение даже такой мощной системы, как MATLAB, иногда приводит к досадным срывам. Чтобы все же получить график, надо вычислять отношение sin(x) к хс помощью оператора поэлементного деления массивов ./. Этот случай поясняет рис. 3.2.
Рис. 3.2. Построение графиков трех функций
Обратите внимание на то, что хотя на этот раз MATLAB построил графики всех трех функций, в окне командного режима появилось предупреждение о делении на 0 — в момент, когда х=0. Это говорит о том, что piot «не знает» о том, что неопределенность sin(x)/x=0/0 устранимая и дает 1. Это недостаток практически всех систем для численных вычислений.
Графическая функция fplot
Разумеется, MATLAB имеет средства для построения графиков и таких функций, как sin(x)/x, которые имеют устранимые неопределенности. Не обсуждая эти средства подробно, просто покажем, как это делается, с помощью другой графической команды —
fplot: fplott'f(x)'. [xmin xmax])
Она позволяет строить функцию, заданную в символьном виде, в интервале изменения аргумента х от xmin до xmax без фиксированного шага изменения х. Один из вариантов ее применения демонстрирует рис. 3.3. Хотя в процессе вычислений предупреждение об ошибке (деление на 0) выводится, но график строится правильно, при х=0 sinx/x=l. Обратите также внимание на две используемые команды: clear (очистить)— очистка графического окна и grid on (сетка)— включение отображения сетки, которая строится пунктирными линиями.
Рис. 3.3. Построение графика sin(x)/x функцией fplot
На рис. 3.3 представлено также меню File (Файл) окна графики. Нетрудно заметить, что оно содержит типовые файловые операции. Однако они относятся не к файлам документов, а к файлам графиков. В частности, можно присваивать имя записываемым на диск рисункам с графиками.
Позже мы более подробно рассмотрим возможности различных графических команд. В частности, покажем, как можно задавать определенный цвет и стиль линий, как менять вывод координатных осей, наносить на графики различные текстовые надписи и выполнять множество иных операций форматирования графиков для придания им более наглядного вида, соответствующего требованиям пользователя. Мы также обсудим множество новых форм применения графических команд, резко расширяющих их возможности построения графиков всех мыслимых типов.
Столбцовые диаграммы
В прикладных расчетах часто встречаются графики, именуемые столбцовыми диаграммами, отражающие содержание некоторого вектора V. При этом каждый элемент вектора представляется столбцом, высота которого пропорциональна значению элемента. Столбцы нумеруются и масштабируются по отношению к максимальному значению наиболее высокого столбца. Выполняет построение такого графика команда bar(V) (рис. 3.4).
Столбцовые диаграммы — лишь один из многих типов графиков, которые может строить система MATLAB. Особенно часто столбцовые диаграммы используются при представлении данных финансово-экономических расчетов.
Рис. 3.4 дает также представление о меню Tools (Инструменты) окна графики, появившемся начиная с версии MATLAB 5.3.1 (выпуск 11.1). Нетрудно заметить, что кроме возможности вывода инструментальной панели здесь имеется целый ряд других команд, которые будут рассмотрены в дальнейшем. Это команды вывода свойств графических объектов, изменения масштаба графика, добавления осей и т. д.
Рис. 3.4. Построение столбцовой диаграммы значений элементов вектора
Построение трехмерных графиков
Столь же просто обеспечивается построение графиков сложных поверхностей. Надо только знать, какой командой реализуется тот или иной график. Например, для построения графика поверхности и ее проекции в виде контурного графика на плоскость под поверхностью достаточно использовать следующие команды (см. урок 6):
» [X.Y]=meshgrid(-5:0.1:5);
» Z=X.*sin(X+Y);
» meshc(X.Y,Z)
Окно с построенным графиком показано на рис. 3.5.
Рис. 3.5. Окно с графиками поверхности и ее проекции на плоскость под фигурой
Раньше пришлось бы убить много дней на составление и отладку нужной для построения такого графика программы. В MATLAB же можно в считанные секунды изменить задающую поверхность функцию Z(X, Y) и тут же получить новый график поверхности с окраской, в данном случае заданной вектором Z, и с ее проекцией на плоскость XY. На рис. 3.5 показано также открытое меню Help (Помощь) окна трехмерной графики.
Мы ограничимся этими примерами построения графиков как достаточно простыми и типовыми. Из них следует важный вывод — для решения той или иной частной задачи надо знать соответствующие команды и функции. В этом вам помогут как данная книга, так и справочная система MATLAB.
Вращение графиков мышью
Можно поворачивать построенную фигуру мышью и наблюдать ее под разными углами. Рассмотрим эту возможность на примере построения логотипа системы MATLAB — мембраны. Для этого, введя команду membrane, получим исходный график, представленный на рис. 3.6.
Рис. 3.6. Построение мембраны — логотипа системы MATLAB
Для вращения графика достаточно активизировать последнюю справа кнопку панели инструментов с изображением пунктирной окружности со стрелкой. Теперь, введя курсор мыши в область графика и нажав левую кнопку мыши, можно круговыми движениями заставить график вращаться вместе с обрамляющим его параллелепипедом (рис. 3.7).
Любопытно, что в версии MATLAB 6 вращать можно и двумерные графики, наблюдая поворот плоскости, в которой они построены. Никакого программирования такое вращение не требует.
Рис. 3.7. Вращение трехмерной фигуры мышью
Контекстное меню графиков
Для переключения в режим редактирования графика нужно щелкнуть на кнопке Edit Plot (Редактировать график) с изображением курсора-стрелки. В этом режиме графиком можно управлять с помощью контекстного меню, вызываемого щелчком правой кнопки мыши. Вид этого меню при курсоре, расположенном в области трехмерного графика вне построенных трехмерных графических объектов, показан на рис. 3.8. С помощью мыши можно также выделить график. Щелчок левой клавишей выводит рамку вокруг рисунка (см. рис. 3.8). Теперь на график можно наносить стрелки, поясняющие надписи (кнопка с буквой А) и т. д.
Рис. 3.8. График в состоянии редактирования и контекстное меню
Основы форматирования двумерных графиков
Графики в системе MATLAB строятся обманчиво просто. Связано это с тем, что многие свойства графиков установлены по умолчанию. К таким свойствам относятся вывод или скрытие координатных осей, положение их центра, цвет линии графика, ее толщина и т. д. и т. п. Позже будет показано, как свойства и вид графиков можно менять в широких пределах с помощью параметров команд графики. Однако этот путь требует хорошего знания деталей языка программирования и дескрипторной графики системы MATLAB.
В новой версии MATLAB 6 для изменения свойств графиков (их форматирования) используются принципы визуального контроля за стилем (видом) всех объектов графиков. Это позволяет легко, просто и наглядно придать графикам должный вид перед записью их в виде файлов на диск. Можно сказать, что в этой части реализованы отдельные принципы визуально-ориентированного программирования графических средств.
Здесь мы рассмотрим возможности форматирования графиков, которые, образно говоря, лежат на поверхности. Систематизированное описание интерфейса системы MATLAB 6.0, в том числе интерфейса графических окон, дается в уроке 5.
Форматирование линий графиков
MATLAB имеет возможность легко настраивать и корректировать свойства графиков с помощью специальных средств. В новой версии MATLAB 6.0 они существенно изменены. Так, в предшествующей версии для настройки (форматирования) графиков использовался специальный редактор свойств — Graphics Properties Editor (Редактор свойств графики). Его можно было вызвать из меню File окна командного режима MATLAB с помощью команды Show Graphics Properties Editor (Показать редактор свойств графики).
В новой версии MATLAB форматирование графиков стало более строгим и удобным. При этом ранее упомянутый редактор свойств графиков перестал так именоваться, и команда Show Graphics Properties в новой версии отсутствует. Ее заменяют команды Figure Properties (свойства фигуры) и Axis Properties (свойства осей) со всеми необходимыми настройками.
При построении графиков появляется графическое окно. Иногда оно бывает скрыто ранее имеющимися окнами как системы MATLAB, так и других работающих в среде Windows 95/98/Me/2000/NT4 приложений. Если вы не увидели графика, заданного для построения, то поищите его в списке открытых окон (приложений), нажимая клавиши Alt + Tab, и выберите из списка нужное окно. Окна графики имеют изображение логотипа системы MATLAB. По умолчанию они выводятся с панелью инструментов с рядом кнопок вполне очевидного назначения.
Щелкнув на кнопке Edit Plot (Редактировать график) в панели инструментов окна графики и щелкнув по графику, можно заметить, что график выделился: вокруг него появилась рамка. Теперь, указав курсором мыши на тот или иной объект графика и щелкнув снова левой клавишей, можно наблюдать выделение объекта и появление окна его форматирования.
Например, указав в режиме редактирования мышью на линию графика (и дважды быстро щелкнув левой клавишей), можно увидеть окно форматирования линий графика, показанное на рис. 3.9 слева. Часть окна графики с выделенным графиком видна справа. Обратите внимание на появление на линии графика ряда черных квадратиков, — они используются для указания курсором мыши именно на линию графика, а не на другие объекты.
Рис. 3.9. Окно графика и окно форматирования линий
В этом окне открыта главная для операций форматирования вкладка — Style (Стиль). Она устанавливает стиль отображения линии, т. е. ее вид (например, сплошная линия или пунктирная), ширину и цвет, а также параметры маркеров, отмечающих опорные точки графиков.
Полезно знать, что кнопка Apply (Применить) позволяет применить сделанные установки к графику до закрытия окна диалога. Кнопка О К вводит сделанные установки и закрывает окно диалога. Назначение других кнопок очевидно.
Форматирование маркеров опорных точек
В нашем случае опорные точки задаются ранжированной переменной х, имеющей ряд значений от -15 до +15 с шагом 0.1. Эти точки появляются на графике, если в поле свойств маркера Marker Properties (Свойства маркера) из меню Style (Стиль) выбрать стиль маркера. На рис. 3.10, к примеру, показано построение графика с маркерами опорных точек в виде окружностей.
Рис. 3.10. Пример задания параметров маркеров и построения графика с ними
Можно задавать размеры маркеров, цвет их закраски и цвет окантовки. Так, на рис. 3.10 при его просмотре на экране цветного дисплея маркеры имеют вид окружностей с условным размером 4, цветом окантовки красным и цветом закраски желтым. Маркеры можно задавать в виде окружностей, прямоугольников, крестиков, ромбиков и т. д. Применение маркеров делает графики более наглядными.
Форматирование линий и маркеров для графика нескольких функций
Если строится график нескольких функций, то можно форматировать линии и маркеры каждой кривой отдельно. Выполним следующие команды:
» х=-6:.1:6;
» plot(x,sin(x),x,sin(x). ^ 3,x,sin(x).^5):
Рис. 3.11 показывает пример такого форматирования для графика, полученного исполнением этих команд.
Кстати, обратите внимание на то, как заданы степени синуса. Записать эти выражения в виде sin(x)^3 и cos(x)^5 будет грубейшей ошибкой, поскольку х здесь вектор. Операторы ^ в данном случае дают поэлементное возведение в степень, что и нужно для построения графиков этих функций.
Рис. 3.11. Пример форматирования для графика трех функций
Форматирование осей графиков
Аналогично описанным выше правилам выполняется форматирование и других объектов графиков. Например, указав курсором мыши на оси графиков (на них тоже есть метки в виде черных квадратиков) и дважды щелкнув левой клавишей мыши, можно увидеть появление окна форматирования объектов дескрипторной графики Property Editor (Редактор свойств, Графический редактор свойств) (рис. 3.12), настроенного на форматирование осей.
Рис. 3.12. Пример форматирования осей графика
Окно графического редактора свойств дескрипторной графики имеет множество вкладок, настройки которых довольно очевидны, и ничто не мешает читателю поэкспериментировать с ними несколько минут. Это позволит понять простоту и одновременно высокую эффективность средств форматирования объектов графики. Например, вы можете задать линейный или логарифмический масштаб осей (вкладка Scale (Масштаб), открытая на рис. 3.12), нормальное или инверсное направление осей ( X, У, а в случае трехмерных графиков и Z), показ сетки (параметр Grid Show), изменить стиль осей и цвета фона (вкладка Style (Стиль)), нанести у осей надписи (вкладка Label (Ярлык)) и пр.
Рис. 3.13 показывает график синусоиды после некоторых операций по форматированию осей. Здесь (кстати, как и на рис. 3.12) задано построение сетки Grid по осям X и Y, построение надписей (просто буквы X и Y) по координатным осям и построение титульной надписи. Заодно на рис. 3.13 показано в открытом виде меню расширенных инструментальных средств графического окна. Его команды подробно обсуждаются в уроке 5. Словом, с объектами графики можно сделать все, что угодно! Некоторые из возможностей форматирования объектов графики мы рассмотрим позже, по мере описания типов графиков.
Рис. 3.13. Пример построения графика синусоиды после форматирования осей
Если компьютер оснащен должным набором шрифтов, то надписи на графиках могут быть сделаны на русском языке — рис. 3.13 хорошо иллюстрирует эту важную для наших пользователей возможность. На нем титульная надпись сделана на русском языке. Средства форматирования надписей дают обширные возможности по выбору набора шрифтов, их стиля, размеров символов и их цвета.
Нанесение надписей и стрелок прямо на график
Дополнительно на график можно нанести надписи с помощью кнопки панели инструментов с буквой А. Место надписи фиксируется щелчком мыши. На рис. 3.14 показан отформатированный график с текстовым блоком, созданным таким образом в левой верхней части поля графика.
Здесь показано контекстное меню правой клавиши мыши, поясняющее выбор размера символов надписи (и другие возможности этого меню). Напоминаем, что это меню появляется при щелчке правой кнопки мыши на заданном объекте. В этом меню имеются все команды, доступные для данного объекта в данной ситуации.
Рис. 3.14. Нанесение надписи на отформатированный график
Полученную таким образом надпись можно выделить и перенести мышью в любое другое место. Рис. 3.15 показывает процесс создания еще двух надписей с переносом их текстового блока в нужное место. Надписи сделаны с разным размером символов и разным стилем. Особенно приятно, что при задании на надписи возведения в степень знаком ^ надпись на экране отображается в естественном математическом виде (степень в виде верхнего индекса).
Рис. 3.15. Окончательно отформатированный график трех функций
На рис. 3.15, в частности, показано задание надписей разным стилем, а также задание стрелки с помощью соответствующей кнопки панели инструментов. Это стрелку в режиме редактирования графика можно перемещать и вращать мышью, а также менять ее длину. Можно также наносить на график и обычные линии (без стрелки).
Построение легенды и шкалы цветов на графике
Дополнительно можно изменить размеры графика (см. меню Tools (Инструменты) и его команды Zoom In (Увеличить)и Zoom Out (Уменьшить)), начать поворот графика мышью (команда Rotate 3D), добавить отрезок прямой или иной графический примитив (подменю Add) и подключить к графику легенду — пояснение в виде отрезков линий со справочными надписями, размещаемое внутри графика или около него. Поскольку наш график содержит три кривые, то легенда представляет собой обозначение этих трех линий в правом верхнем углу рисунка (рис. 3.16). Каждая линия имеет тот же цвет, что и на графике (и тот же стиль).
Рис. 3.16. Окончательно сформированный график
Следует еще раз отметить, что все описанные возможности форматирования графиков доступны и программным способом, путем задания соответствующих графических команд, параметров и примитивов. Например команда text(х,у, 'legend') позволяет задать надпись 'legend' с началом, имеющим координаты (х, у). Если после первого апострофа перед текстом поместить параметр \leftarrow, то надпись (легенда) появится после стрелки с острием, обращенным влево. Аналогично параметр \rightarrow после надписи задает вывод стрелки после надписи с острием, обращенным вправо. Эта возможность позволяет помечать не только кривые, но и отдельные точки на них. Возможно также применение команды legend('s1', 's2',...), выводящей легенду обычного вида — отрезки линий графиков с поясняющими надписями 's1', 's2' и т.д.
Перемещение графика в графическом окне
Обычно график занимает фиксированное положение в центре графического окна. Однако в режиме редактирования графиков, когда курсор мыши находится в области графика, в контекстном меню правой клавиши мыши есть команда Unlock Axes Position (Отключить позиционирование осей). Она снимает фиксацию положения координатных осей графика и позволяет двигать его мышью вместе с осями. Это иллюстрирует рис. 3.17.
Рис. 3.17. Пример перемещения графика
Интересно, что при перемещении графика его легенда и цветовая диаграмма остаются на прежнем месте.
Применение графической «лупы»
На панели инструментов есть кнопки с изображение лупы и знаками + и -. С их помощью выполняются команды Zoom In (+)(Увеличить) и Zoom Out (-) (Уменьшить). Это позволяет увеличивать или уменьшать масштаб просмотра изображения. При этом команда Zoom In интересна еще одной возможностью — с ее помощью можно выделять часть графика перемещением мыши с нажатой левой клавишей — рис. 3.18.
Рис. 3.18. Пример выделения части графика
Рис. 3.19. Пример просмотра части графика
Область выделения отмечается прямоугольником из тонких точечных линий. Отпустив левую клавишу мыши, можно наблюдать построение выделенной части графика на всем окне — рис. 3.19. С помощью команды Zoom Out можно восстановить график в прежнем масштабе. Таким образом реализуется графическая «лупа».
Работа с камерой 3D-графики
В отличие от двумерных (2D) графиков форматирование трехмерных графиков содержит ряд дополнительных возможностей. Покажем их на простом примере построения 3D-графики с помощью следующих простых команд:
» Z=peaks(40):
» mesh(Z);
Рис. 3.20. Пример построения каркасного 3D-графика
Здесь первая команда создает массив точек поверхности с помощью одного из ряда встроенных в ядро системы MATLAB готовых описаний таких поверхностей.
Рис. 3.21. Пример форматирования трехмерного графика
Вторая команда просто строит эту поверхность по опорным точкам с использованием интерполяции для промежуточных точек. Таким образом создается цветная каркасная поверхность, как бы сотканная из разноцветных проволок. На рис. 3.20 показано построение этой поверхности вместе со специальной панелью инструментов трехмерной графики, названной в оригинале Camera (Камера).
Несмотря на множество кнопок, пользование панелью инструментов 3D-графики достаточно просто, если представить себе, что вы смотрите на предмет через объектив фотокамеры. Наглядные рисунки на кнопках поясняют смысл их действия — это перемещение и вращение 3D-рисунков относительно тех или иных координатных осей, включение отображения перспективы, изменение цветовой схемы и др.
Рис.. 3.22 . Cтоп кадр вращения трехмерного графика
Рис. 3.21 показывает, что приемы форматирования двумерной графики можно использовать при работе с трехмерной графикой — вывод надписи на график, вывод легенды (кстати, теперь объемной) и шкалы цветов.
Для управления положением и вращением трехмерного графика можно использовать клавиши перемещения курсора. Эффект вращения графика иллюстрирует рис. 3.22, где показан график рис. 3.21 после его поворота при нажатой клавише —>. В отличие от поворота мышью (также возможного) перемещение и повороты с помощью клавиш курсора при выбранном типе перемещения дают плавное перемещение или вращение фигуры. Таким образом осуществляется анимация (оживление) трехмерной графики.
Заключительные замечания по графике
Итак, мы рассмотрели основные приемы форматирования графиков, в основном используя средства панели инструментов и отдельные, достаточно очевидные, команды из меню графического окна. Более подробно интерфейс пользователя графического окна будет описан в уроке 5.
Хотя многие приемы форматирования графики заимствованы из технологии визуально-ориентированного программирования, в базовой системе MATLAB (без дополнительных пакетов расширения (toolbox)) все еще отсутствует полноценная возможность такого программирования, даже с учетом расширенных возможностей дескрипторной графики. Это видно уже из того, что вносимые форматированием изменения в графиках не сопровождаются генерацией программных кодов, которые в последующем при их вызове с новыми параметрами порождали бы построение графиков с новыми параметрами. Пользователь может лишь записать на диск копии созданных графиков в формате растрового изображения (.bmp) и использовать их в целях иллюстрации своих материалов.
Однако средства MATLAB позволяют опытным программистам создать расширения системы с визуально-ориентированной технологией программирования. Самым наглядным примером этого является система моделирования динамических объектов Simulink с набором моделей из готовых блоков. При этом автоматически создается не только сложная графическая блок-схема моделируемого устройства, но и система уравнений состояния, решение которой и является основой моделирования.
Что нового мы узнали?
В этом уроке мы научились:
Строить графики функций одной переменной.
Строить столбцовые диаграммы.
Строить трехмерные графики.
Вращать графики мышью.
Использовать контекстное меню графиков.
Управлять форматом графиков.
Урок №4.
Работа со справкой и примерами
Работа с интерактивной справкой
Справка по объекту, группе объектов, ключевым словам
Просмотр текстов примеров и m-файлов
Работа со справочной системой
Просмотр документации в формате PDF
Демонстрационные примеры
Запуск приложения Simulink
Интерактивная справка из командной строки
Вызов списка разделов интерактивной справки
MATLAB имеет интерактивную систему помощи, которая реализуется в командном режиме с помощью ряда команд. Одной из них является команда
» help
которая выводит весь список папок, содержащих m-файлы с определениями операторов, функций и иных объектов, присущих конкретной реализации системы MATLAB. Ниже приводится этот список для системы MATLAB 6.0:
|
HELP topics: |
|
|
matlab\general |
- General purpose commands. |
|
matlab\ops |
- Operators and special characters. |
|
matlab\lang |
- Programming language constructs. |
|
matlab\elmat |
- Elementary matrices and matrix manipulation. |
|
matlab\elfun |
- Elementary math functions. |
|
matlab\specfun |
- Specialized math functions. |
|
matlab\matfun |
- Matrix functions - numerical linear algebra. |
|
matlab\datafun |
- Data analysis and Fourier transforms. |
|
matlab\audio |
- Audio support. |
|
matlab\polyfun |
- Interpolation and polynomials. |
|
matlab\funfun |
- Function functions and ODE solvers. |
|
matlab\sparfun |
- Sparse matrices. |
|
matlab\graph2d |
- Two dimensional graphs. |
|
matlab\graph3d |
- Three dimensional graphs. |
|
matlab\specgraph |
- Specialized graphs. |
|
matlab\graphics |
- Handle Graphics. |
|
matlab\uitools |
- Graphical user interface tools. |
|
matlab\strfun |
- Character strings. |
|
matlab\iofun |
- File input/output. |
|
matlab\timefun |
- Time and dates. |
|
matlab\datatypes |
- Data types and structures. |
|
matlab\verctrl |
- Version control . |
|
matlab\winfun |
- Windows Operating System Interface Files (DDE/ActiveX) |
|
matlab\demos |
- Examples and demonstrations. |
|
tool box\ local |
- Preferences . |
|
simulink\simulink |
- Simulink |
|
simulink\blocks |
- Simulink block library. |
|
simulink\simdemos |
- Simulink 4 demonstrations and samples. |
|
simdemos\aerospace |
- Simulink: Aerospace model demonstrations and samples. |
|
simdemos\automoti ve |
- Simulink: Automotive model demonstrations and samples. |
|
||
|
s1mdemos\simfeatures - Simulink: Feature demonstrations and samples. |
|
|
simdemos\simgeneral |
- Simulink: General model demonstrations and samples. |
|
simdemos\simnew |
- Simulink: New features model demonstrations and samples. |
|
simulink\dee |
- Differential Equation Editor |
|
stateflow\statef1ow |
- Statef low |
|
stateflow\sfdemos |
- Statef low demonstrations and samples. |
|
statef low\ coder |
- Statef low Coder |
|
rtw\rtw |
- Real -Time Workshop |
|
rtw\rtwdemos |
- Real -Time Workshop Demonstrations: |
|
asap2\asap2 |
- (No table of contents file) |
|
asap2\user |
- (No table of contents file) |
|
cdma \cdma |
- CDMA Reference Blockset. |
|
cdma \cdmamasks |
- CDMA Reference Blockset mask 'helper functions. |
|
cdma \cdmamex |
- CDMA Reference Blockset S-Functions. |
|
cdma\cdmademos |
- CDMA Reference Blockset demonstrations and examples. |
|
commbl ks\commblks |
- Communications Blockset. |
|
commbl ks\commmasks |
- Communications Blockset mask helper functions. |
|
commbl ks\commmex |
- Communications Blockset S-functions. |
|
commbl ks\commbl ksdemos |
- Communications Blockset Demos. |
|
commbl ks\commbl ksobsol ete |
- Archived Simulink Files from Communications ToolboxVersion 1.5. |
|
||
|
comm\comm |
- Communications Toolbox. |
|
comm\commdemos |
- Communications Toolbox Demonstrations. |
|
comm\commobsolete |
- Archived MATLAB Files from Communications Toolbox Version 1.5. |
|
||
|
control \control |
- Control System Toolbox. |
|
control \ctrlguis |
- Control System Toolbox -- GUI support functions. |
|
control \ctrl obsolete |
- Control System Toolbox -- obsolete commands. |
|
control \ctrlutll |
- (No table of contents file) |
|
control \ctrl demos |
- Control System Toolbox -- Demos. |
|
dspblks\dspblks |
- DSP Blockset. |
|
dspblks\dspmasks |
- DSP Blocks'et mask helper functions. |
|
dspblks\dspmex |
- DSP Blockset S-Function MEX-files. |
|
dspblks\dspdemos |
- DSP Blockset demonstrations and examples. |
|
dsprtw\ut11_c |
- (No table of contents file) |
|
daq\daq |
- Data Acquisition Toolbox. |
|
daq\daqdemos |
- Data Acquisition Toolbox - Data Acquisition Demos. |
|
database\database |
- Database Toolbox. |
|
database\dbdemos |
Database Toolbox Demonstration Functions. |
|
database\vqb |
- Visual Query Builder functions. |
|
datafeed\datafeed |
- Datafeed Toolbox. |
|
datafeed\dfgui |
Datafeed Toolbox Graphical User Interface |
|
toolbox\dlals |
- Dials & Gauges Blockset |
|
tool box\exl Ink |
- (No table of contents file) |
|
fil terdesl gn\ filterdesi gn |
- Filter Design Toolbox. |
|
filterdesi gn\quantl zati on |
- (No table of contents file) |
|
fi1terdesi gn\ filtdesdemos |
- Filter Design Toolbox Demonstrations. |
|
finderiv\finderiv |
- Financial Derivatives Toolbox. |
|
ftseries\ftseries |
- Financial Time Series Toolbox |
|
ftseries\ftsdemos |
- (No table of contents file) |
|
ftseries\ftsdata |
- (No table of contents file) |
|
ftseries\ftstutorials |
- (No table of contents file) |
|
finance\ finance |
- Financial Toolbox. |
|
finance\calendar |
- Financial Toolbox calendar functions. |
|
finance\findemos |
- Financial Toolbox demonstration functions. |
|
finance\finsupport |
- (No table of contents file) |
|
|
|
|
|
|
|
toolbox\fixpo1nt |
- Fixed-Point Blockset |
|
|
fixpoint \fxpdemos |
- Fixed- Point Blockset Demos |
|
|
f1xpoint\obsolete |
- Obsolete Fixed-Point Blockset |
|
|
fuzzy\ fuzzy |
- Fuzzy Logic Toolbox. |
|
|
fuzzy \fuzdemos |
- Fuzzy Logic Toolbox Demos. |
|
|
garch\garch |
- GARCH Toolbox. |
|
|
garch\garchdemos |
- (No table of contents file) |
|
|
images\ images |
- Image Processing Toolbox. |
|
|
images\imdemos |
- Image Processing Toolbox --- demos and sample images |
|
|
instrument\ i nst rument |
- Instrument Control Toolbox. |
|
|
i nstrument\ Instrumentdemos |
- (No table of contents file) |
|
|
Imi\lmictrl |
- LMI Control Toolbox: Control Applications |
|
|
Imi\lmilab |
- LMI Control Toolbox |
|
|
toolbox\compiler |
- MATLAB Compiler |
|
|
toolbox\rptgen |
- , MATLAB Report Generator |
|
|
map\map |
- Mapping Toolbox |
|
|
map\mapdisp |
- Mapping Toolbox Map Definition and Display. |
|
|
map\mapproj |
- Mapping Toolbox Projections. |
|
|
mpc \mpccmds |
- Model Predictive Control Toolbox. |
|
|
mpc \mpcdemos |
- Model Predictive Control Toolbox |
|
|
motdsp\motdsp |
- Motorola DSP Developer's Kit |
|
|
motdsp\motdspmex |
- Motorola DSP Developers Kit |
|
|
motdspasm\bin |
- (No table of contents file) |
|
|
motdsp\motdspblks |
- Motorola DSP Developers Kit block libraries |
|
|
motdsp\motdspmasks |
- Motorola DSP blockset mask helper functions. |
|
|
motdsp\motdspdemos |
- MOTDSP Toolbox demonstrations and examples: |
|
|
mutools\conmands |
- Mu-Analysis and Synthesis Toolbox. |
|
|
mutools\subs |
- Mu-Analysis and Synthesis Toolbox. |
|
|
nnet\nnet |
- Neural Network Toolbox. |
|
|
nnet\nnutlls |
- (No table of contents file) |
|
|
nnet\nncontrol |
- Neural Network Toolbox Control System Functions. |
|
|
nnet\nndemos |
- Neural Network Demonstrations. |
|
|
nnet\nnobsolete |
- (No table of contents file) |
|
|
toolbox\ncd |
- Nonlinear Control Design Blockset |
|
|
toolbox\optim |
- Optimization Toolbox. |
|
|
toolbox\pde |
- Partial Differential Equation Toolbox. |
|
|
powersys\powersys |
- Power System Blockset. |
|
|
powersys \ powerdemo |
- Power System Blockset Demos. |
|
|
rtw\ada |
- Real -Time Workshop Ada Coder |
|
|
targets\ecoder |
- Real -Time Workshop Embedded Coder |
|
|
toolbox\reqmgt |
- Requirements Management Interface. |
|
|
tool box\ robust |
- Robust Control Toolbox. |
|
|
toolbox\sb2sl |
- SB2SL (converts SystemBuild to Simulink) |
|
|
signal\signal |
- Signal Processing Toolbox. |
|
|
signal \fdatoolgui |
- Signal Processing Toolbox GUI. |
|
|
signal \sptoolgul |
- Signal Processing Toolbox GUI |
|
|
signal\sigdemos |
- Signal Processing Toolbox Demonstrations. |
|
|
rtw\accel |
- Simulink Accelerator |
|
|
simulink\mdldiff |
- Model Differencing for Simulink and Stateflow |
|
|
simulink\simcoverage |
- Simulink Model Coverage Tool |
|
|
toolbox\rptgenext |
- Simulink Report Generator |
|
|
toolbox\splines |
- Spline Toolbox. |
|
|
toolbox\stats |
- Statistics Toolbox. |
|
|
toolbox\symbolic |
- Symbolic Math Toolbox. |
|
|
ident\ident |
- System Identification Toolbox. |
|
|
ident\idobsolete |
- (No table of contents file) |
|
|
|
|
|
|
|
ident\idguis |
- (No table of contents file) |
ident\idutils |
- (No table of contents file) |
Ident\iddemos |
- (No table of contents file) |
ident\idhelp |
- (No table of contents file) |
wavelet\wavelet |
- Wavelet Toolbox. |
wavelet\wavedemo |
- Wavelet Toolbox Demonstrations. |
xpc\xpc |
- xPC Target |
build\xpcblocks |
- (No table of contents file) |
xpc\xpcdemos |
- xPC Target -- demos and sample script files. |
kernel \embedded |
- xPC Target Embedded Option |
MATLABR12\work |
- (No table of contents file) |
For more help on |
directory/topic, type "help topic". |
Этот внушительный список дает наглядное представление о пакетах прикладных программ - пакетах инструментов (пакетах расширений) (toolbox), увеличивающих возможности системы MATLAB и содержащих массу серьезных примеров применения системы.
Примечание
Следует отметить, что набор входящих в список средств зависит от набора пакетов расширения, которыми располагает версия системы MATLAB, заказанная или полученная конкретным пользователем. Этот набор может заметно отличаться от приведенного. Кроме того, в MATLAB 6.0 для доступа к пакетам расширения может потребоваться указание пути к их файлам на диске в панели браузера файловой системы.
Справка по конкретному объекту
Для получения справки по какому-либо конкретному объекту используются команды
» help имя
или
» doc имя
где имя — имя объекта, для которого требуется вывод справочной информации. Мы уже приводили пример помощи по разделу операторов ops. Ниже дается пример для функции вычисления гиперболического синуса, намеренно введенной с неверным указанием имени:
» help hsln hsin.m
not found.
Нетрудно заметить, что система помощи сообщает, что для функции с именем hsin соответствующий m-файл отсутствует. Введем имя верно:
» help slnh
SINH Hyperbolic sine.
SINH(X) Is the hyperbolic sine of the elements of X.
Overloaded methods
help sym/slnh.m
Теперь полученное сообщение содержит информацию о функции slnh. Хотя имена функций в MATLAB задаются малыми (строчными) буквами, в сообщениях справочной системы имена функций и команд выделяются большими (прописными) буквами. Этот не слишком удачный прием использован для выделения заголовка текста справки в виде имени функции. В данной книге мы отказались от такого приема, вводящего начинающих пользователей в заблуждение.
Аналогичным образом можно получить справку по константам и другим объектам языка MATLAB. Ниже дан пример обращения к справке о числе п:
» help pi
PI 3.1415926535897
PI= 4*atan(1) = imagdog(-l)) = 3.1415926535897
При всей примитивности справки help надо отметить ее высокую эффективность. Особенно популярна интерактивная справка у пользователей, привыкших к работе с языками программирования, которые используются в среде операционной системы MS-DOS. Справка doc имя выводит более полную информацию в окне помощи в формате HTML.
Справка по группе объектов
Пользователя системы MATLAB часто интересует набор функций, команд или иных понятий, относящихся к определенной группе объектов. Выше были указаны имена основных групп объектов системы MATLAB. Ниже дан пример вызова справки по группе объектов timefun:
» help timefun
Time and dates.
Current date and time.
|
||
|
Now - Current date and time as date number. |
|
|
Date - Current date as date string. |
|
|
clock - Current date and time as date vector. |
|
|
Basic functions. |
|
|
datenum - Serial date number. |
|
|
datestr - String representation of date. |
|
|
datevec - Date components. |
|
|
Date functions. |
|
|
calendar - Calendar. |
|
|
weekday - Day of week. |
|
|
eomday - End of month. |
|
|
datetick - Date formatted tick labels. |
|
|
Timing functions. |
|
|
cputime - CPU time in seconds. |
|
|
tic. toe - Stop watch timer. |
|
|
etime - Elapsed time. |
|
|
pause - Wait in seconds. |
|
|
После уточнения состава определенной группы объектов можно получить детальную справку по любому выбранному объекту. Как это делается, было описано выше.
Справка по ключевому слову
Ввиду обилия в системе MATLAB m-функций, число которых около 800, важное значение имеет поиск m-функций по ключевым словам. Для этого служит команда
lookfor Ключевое слово
или
lookfor 'Ключевые слова'
В первом случае ищутся все m-файлы, в заголовках которых встречается заданное ключевое слово, и заголовки обнаруженных файлов выводятся на экран. Следует отметить, что широкий поиск по одному ключевому слову может подчас привести к выводу многих десятков определений и длится довольно долго.
Для уточнения и сокращения зоны поиска следует использовать вторую форму команды lookfor. Вот пример ее применения:
» lookfor 'inverse sin'
ASIN Inverse sine.
ASIN Symbolic inverse sine.
В данном случае для поиска использованы слова ' inverse sin', т. е. задан поиск арксинуса. Система поиска нашла только два вида арксинуса ASIN — обычного и в символьной форме. Число найденных определений зависит от того, с каким числом пакетов прикладных программ (пакетов расширений) поставляется версия системы MATLAB.
В следующей главе мы рассмотрим гораздо более эффектные средства справочной системы, ориентированные на работу в стиле приложений операционных систем Windows 95/98/Me/2000/NT4 с графическим пользовательским интерфейсом.
Дополнительные справочные команды
В командном режиме можно получить справочные данные с помощью ряда команд:
computer — выводит сообщение о типе компьютера, на котором установлена текущая версия MATLAB;
help script — выводит сообщение о назначении m-файлов сценариев (Script-файлов);
helрf unction — выводит сообщение о назначении и структуре m-файлов функций;
info — выводит информацию о фирме Math Works с указанием адресов электронной почты;
subscribe — позволяет создать файл с бланком регистрации;
ver — выводит информацию о версиях установленной системы MATLAB и ее компонентов;
version — выводит краткую информацию об установленной версии MATLAB,
version -Java — выводит информацию об установленной в составе MATLAB версии Ява (Java);
what — выводит имена файлов текущего каталога;
what name — выводит имена файлов каталога, заданного именем name;
whatsnew name — выводит на экран содержимое файлов readme заданного именем name класса для знакомства с последними изменениями в системе и в пакетах прикладных программ;
which name — выводит путь доступа к функции с данным именем.
Как правило, эти команды выводят довольно обширные сообщения. Ниже показаны примеры применения отдельных команд этой группы:
» computer
ans=
PCWIN
» version
ans =
6.0.0.88 (R12)
» ver
MATLAB Version 6.0.0.88 (R12) on PCWIN MATLAB License Number: 0
MATLAB Toolbox Version 6.0 (R12) 06-0ct-2000
Simulink Version 4.0 (R12) 16-Jun-2000
Stateflow Version 4.0 (R12) 04-0ct-2000
Приведенный выше сокращенный список пакетов расширения системы MAT-LAB 6.0 дает весьма ценную информацию об их версиях и датах выпуска. Он свидетельствует о весьма существенном обновлении не только базовой системы MATLAB, но и стандартных пакетов расширения (toolbox). Более полный список пакетов расширения дан в уроке 23. Рекомендуем приобрести издание [44] для работы с Simulink и издание [39] для работы с пакетами расширения. В дальнейшем мы рассмотрим и другие команды, которые могут быть отнесены к группе дополнительных справочных команд.
Примеры, вызываемые из командной строки
Вызов списка демонстрационных примеров
Одним из самых эффективных методов знакомства со сложными математическими системами является ознакомление со встроенными примерами их применения.
Система MATLAB содержит многие сотни таких примеров — практически по примеру на каждый оператор или функцию. Наиболее поучительные примеры можно найти в разделе demos, исполнив команду
» help demos
Ниже представлен выводимый этой командой список примеров:
» help demos
Examples and demonstrations.
Type 'demo' at the command line to browse more demos of
MATLAB. the Toolboxes, and SIMULINK.
MATLAB/Introduction.
Demo - Browse demos for MATLAB. Toolboxes, and SIMULINK.
MATLAB/Matrices.
Intro - Introduction to basic matrix operations in MATLAB.
Inverter - Demonstrate the inversion of a matrix.
Buckydem - Connectivity graph of the Buckminster Fuller geodesic dome.
Sparsity - Demonstrate effect of sparsity orderings.
|
||
|
Matmanip - Introduction to matrix manipulation. |
|
|
Eigmovie - Symmetric eigenvalue movie. |
|
|
Rrefmovie - Computation of Reduced Row Echelon Form. |
|
|
Delsqdemo - Finite difference Laplacian on various domains. |
|
|
Sepdemo - Separators for a finite element mesh. |
|
|
Airfoil - Display sparse matrix from NASA airfoil. |
|
|
Eigshow - Graphical demonstration of matrix eigenvalues. |
|
|
Svdshow - Graphical demonstration of matrix singular values. |
|
|
MATLAB/Numerics. |
|
|
Funfuns - Demonstrate functions that operate on other functions. |
|
|
Fitdemo - Nonlinear curve fit with simplex algorithm. |
|
|
Sunspots - FFT: the answer is 11.08, what .is the question? |
|
|
e2pi - 2D visual solutions: Which is greater. e~pi or pi x e? |
|
|
bench - MATLAB Benchmark. |
|
|
Fftdemo - Use of the fast finite Fourier transform. |
|
|
Census - Try to predict the US population in the year 2000. |
|
|
spline2d - Demonstrate GINPUT and SPLINE in two dimensions. |
|
|
Lotkademo - An example of ordinary differential equation solution. |
|
|
Quaddemo - Adaptive quadrature. |
|
|
Zerodemo - Zerofinding with fzero. |
|
|
Fplotdemo - Plot a function. |
|
|
Quake - Loma Prieta Earthquake. |
|
|
Qhulldemo - Tessellation and interpolation of scattered data. |
|
|
MATLAB/Visualization. |
|
|
graf2d - 2D Plots: Demonstrate XY plots in MATLAB. |
|
|
graf2d2 - 3D Plots: Demonstrate XYZ plots in MATLAB. |
|
|
Grafcplx - Demonstrate complex function plots in MATLAB. |
|
|
Lorenz - Plot the orbit around the Lorenz chaotic attractor. |
|
|
Imageext - Image colormaps: changing and rotating colormaps. |
|
|
Xpklein - Klein bottle demo. |
|
|
Vibes - Vibration movie: Vibrating L-shaped membrane. |
|
|
Xpsound - Visualizing sound: Demonstrate MATLAB 's sound capability. |
|
|
Imagederno - Demonstrate MATLAB 's image capability. |
|
|
Penny - Several views of the penny data. |
|
|
Earthmap - View Earth's topography. |
|
|
Xfourier - Graphic demo of Fourier series expansion. |
|
|
Colormenu - Select color map. |
|
|
Cplxdemo - Maps of functions of a complex variable. |
|
|
MATLAB/Language. |
|
|
Xplang - Introduction to the MATLAB language. |
|
|
Hndlgraf - Demonstrate Handle Graphics for line plots. |
|
|
grafSd - Demonstrate Handle Graphics for surface plots. |
|
|
Hndlaxis - Demonstrate Handle Graphics for axes. |
|
|
MATLAB/Differential equations. |
|
|
Odedemo - Demo for the MATLAB Differential Equation solvers. |
|
|
odeexamples - Browse the MATLAB ODE/DAE/BVP/PDE examples. |
|
|
MATLAB/ODEs |
|
|
Ballode - Demo of a bouncing ball. |
|
|
Brussode - Stiff problem modelling a chemical reaction (Brusselator). |
|
|
burgersode - Burger's equation solved using a moving mesh technique. |
|
|
femlode - Stiff problem with a time-dependent mass matrix. |
|
|
fem2ode - Stiff problem with a constant mass matrix. |
|
|
hblode - Stiff problem 1 of Hindmarsh and Byrne. |
|
|
Orbitode - Restricted three body problem. |
|
|
|
|
|
Rigidode - Euler equations of a rigid body without external forces. |
|
|
.Vdpode - Parameterizable van der Pol equation (stiff for large mu). |
|
|
MATLAB/DAEs |
|
|
hbldae - Stiff DAE from a conservation law. |
|
|
ampldae - Stiff OAE from an electrical circuit. |
|
|
MATLAB/BVPs |
|
|
Twobvp - BVP that has exactly two solutions. |
|
|
mat4bvp - Find the fourth eigenvalue of the Mathieu's equation. |
|
|
Shockbvp - The solution has a shock layer near x = 0. |
|
|
MATLAB/PDEs |
|
|
pdexl - Example 1 for PDEPE |
|
|
pdex2 - Example 2 for PDEPE |
|
|
pdex3 - Example 3 for POEPE |
|
|
pdex4 - Example 4 for PDEPE |
|
|
pdexS - Example 5 for PDEPE |
|
|
Extras/Gallery. |
|
|
Knot - Tube surrounding a three-dimensional knot. |
|
|
Quivdemo - Demonstrate the quiver function. |
|
|
kleinl - Construct a Klein bottle. |
|
|
Cruller - Construct cruller. |
|
|
tori4 - Hoops: Construct four linked tori. |
|
|
spharm2 - Construct spherical surface harmonic. |
|
|
Modes - Plot 12 modes of the L-shaped membrane. |
|
|
Logo - Display the MATLAB L-shaped membrane logo. |
|
|
Extras/Games. |
|
|
Fifteen - Sliding puzzle. |
|
|
Xpbombs - Minesweeper game. |
|
|
Life - Conway's Game of Life. |
|
|
Soma - Soma cube. |
|
|
Extras/Mi seel laneous . |
|
|
Truss - Animation of a bending bridge truss. |
|
|
Travel . - Traveling salesman problem. |
|
|
Spinner - Colorful lines spinning through space. |
|
|
Xpquad - Superquadrics plotting demonstration. |
|
|
Codec - Alphabet transposition coder/decoder. |
|
|
Xphide - Visual perception of objects in motion. |
|
|
Makevase - Generate and plot a surface of revolution. |
|
|
Wrldtrv - Great circle flight routes around the globe. |
|
|
Logospin - Movie of The MathWorks' logo spinning. |
|
|
Crulspin - Spinning cruller movie. |
|
|
Quatdemo - Quaternion rotation. |
|
|
Chaingui - Matrix chain multiplication optimization. |
|
|
General Demo/Helper functions. |
|
|
Cmdlnwin - Demo gateway routine for playing command line demos. |
|
|
Cmdlnbgn - Set up for command line demos. |
|
|
Cmdlnend - Clean up after command line demos. |
|
|
Finddemo - Find demos available for individual toolboxes. |
|
|
Helpfun - Utility function for displaying help text conveniently. |
|
|
Pltmat - Display a matrix in a figure window. |
|
|
MATLAB/Helper functions. |
|
|
Bucky - The graph of the Buckminster Fuller geodesic dome. |
|
|
Peaks - A sample function of two variables. |
|
|
|
|
Membrane - Generate MathWorks' logo.
See also SIMDEMOS
demos Is both a directory and a function.
DEMOS Demo list for the CDMA Reference Blockset.
Мы настоятельно рекомендуем пользователям системы MATLAB просмотреть с десяток примеров из интересующих их областей. Это займет от силы полчаса или даже меньше, но зато позволит оценить поистине неисчерпаемые возможности системы при решении сложных математических и физических задач, а также превосходные средства графической визуализации решений.
Пример — тест на быстродействие компьютера
Большинство пользователей, включая автора данной книги, очень ревниво относится к вычислительной мощности своего компьютера. Поэтому в качестве первого демонстрационного примера возьмем тест на сравнительную оценку скорости работы — bench . Исполнив команду » bench можно наблюдать исполнение комплексного теста по оценке быстродействия компьютера при работе с MATLAB. Его итоги представляются в виде столбцовой диаграммы и таблицы, которые показаны на рис. 4.1.
Рис. 4.1 . Результаты тестирования компьютера на быстродеиствие
Увы, в тесте системы MATLAB 6.0 компьютер автора занял последнее место, хотя в тесте системы MATLAB 5.3.1 он занимал достаточно почетное место в середине списка. Однако это вовсе не говорит о снижении производительности данного конкретного компьютера в новой реализации MATLAB. На самом деле производительность даже немного возросла. Просто в новом примере изрядно морально постаревший за год компьютер автора сравнивается с более новыми компьютерами. Кстати, в этом тесте ПК автора переместился на куда более почетное шестое место сверху после замены процессора на Pentium III 600 и установки видеокарты с видеопамятью 32 Мбайта и поддержкой OpenGL.
Приведенные данные говорят о том, что вычислительная мощность современного персонального компьютера (теперь у автора компьютер с процессором Pentium III 600 МГц со 100-мегагерцовой шиной под управлением Windows 98) с системой MATLAB уже приближается к таковой для суперкомпьютеров недавнего прошлого. Новые суперкомпьютеры, разумеется, куда мощнее компьютера с процессором Pentium III и даже Pentium IV, но и для них MATLAB — одна из основных систем для выполнения математических расчетов.
Что больше — e ^ pi или pi ^ e?
Рассмотрим еще один простой пример, дающий ответ на сакраментальный вопрос о том, какое значение больше — e^pi или pi^e? Для запуска этого примера надо исполнить команду » e2pi и наблюдать красочное шоу — графики степенных функций х^у и у^х с построением на них линий заданных функций и оценкой их значений. Заключительный слайд этого примера показан на рис. 4.2.
Рис. 4.2. Заключительный слайд примера e2pi
Этот пример — наглядная демонстрация перехода от узких понятий к более широким. Разумеется, вы могли бы вместо приятного обозрения слайд-шоу просто вычислить соответствующие значения:
» e=exp(1)
e =
2.7183
» e ^ pi
ans =
23.1407
» pi^e
ans =
22.4592
Так можно легко убедиться в том, что все же е ^ рi больше, чем pi^e. Но тогда это означало бы, что вы просто технарь или физик-экспериментатор, а не истинный математик. Впрочем, у каждого есть свои взгляды на применение математики. И чьи лучше — вопрос весьма спорный.
Анимация в пространстве — аттрактор Лоренца
Современная трехмерная графика — одна из причин большой популярности системы MATLAB. В этом разделе мы не будем рассматривать конкретные реализации тех или иных видов трехмерной графики. Вы можете самостоятельно вывести на экран дисплея текст (листинг) любого файла примеров трехмерной графики с помощью команды type. Ограничимся лишь тремя примерами визуализации сложных математических задач, когда используется оживление изображений — анимация.
Рис. 4.3. График, иллюстрирующий работу аттрактора Лоренца
На рис. 4.3 показан пример визуализации динамического процесса в так называемом аттракторе Лоренца (пример lorenz) — колебательной системе, создающей хаотические и довольно замысловатые колебания. Наиболее наглядна их визуализация с помощью трехмерного фазового портрета колебаний, который приведен на рис. 4.3. К сожалению, на рис. 4.3 показана лишь завершающая стадия — на экране можно реально видеть движение образующей точки во времени и убедиться в своеобразной хаотичности колебаний. Для запуска анимации надо нажать кнопку Start (Пуск) окна графики.
Встроенные фигуры
MATLAB имеет ряд встроенных фигур, которые можно легко выводить на построение простым указанием их названия. Так, введя команду knot, можно задать построение сложной пространственной фигуры узла с функциональной окраской (рис. 4.4). При запуске этого примера нажатием кнопки Spinmap можно наблюдать изменение окраски, имитирующее как бы движение жидкости внутри замкнутой трубки, образующей данную фигуру.
Рис. 4.4. Построение фигуры-узла
Таким образом, можно сделать вывод о том, что для имитации и моделирования математических и физических задач система MATLAB предоставляет значительные графические возможности — от простейших графиков функций в декартовой системе координат до сложных анимационных графиков с динамической цветной функциональной окраской. Среди множества примеров такой графики всегда можно подобрать наиболее подходящие для решения конкретных задач пользователя, в какой бы области науки, техники или образования он ни работал.
В паутине нейронных сетей
Даже десятка таких книг, как эта, едва ли хватит для исчерпывающего описания системы MATLAB со всеми ее пакетами расширения. Пакетам расширения посвящена монография [39]. Многие из таких пакетов, например по нейронным сетям, сплайнам, обработке сигналов, проектированию систем управления и т. д., относятся к самым современным и актуальным направлениям науки и техники. Нередко создание таких пакетов для системы MATLAB возглавили основатели указанных научных направлений, и по каждому такому направлению опубликованы десятки научных монографий.
Примером одного из таких направлений является пакет Neural Networks (нейронные сети). Эти сети основаны на аналогии с ячейкой нашего мозга — нейроном. Важное свойство нейрона — возможность к самообучению и распознаванию различных образных представлений и сигналов. В разделе справочной системы Examples and Demos (Примеры и демо) имеется множество конкретных примеров применения нейронных сетей. На рис. 4.5 показан вид демонстрационной панели одного из этих примеров.
Рис. 4.5. Демонстрационная панель примера на применение нейронных сетей
Вы имеете возможность задавать различные параметры нейронной сети, позволяющей распознать букву Т в ее искаженном изображении. Демонстрационная панель построена в виде виртуальной лаборатории и позволяет мышью менять вид образцов (вводя закрашенные квадратики) и оценивать погрешность и вероятность распознавания образа.
Просмотр текстов примеров и m-файлов
Хотя наблюдение за тем, как MATLAB расправляется со сложными примерами и задачами, само по себе довольно поучительно, жаждущие применить систему на деле пользователи, безусловно, захотят узнать, а как же конкретно реализовано решение той или иной задачи? Для этого вам достаточно просмотреть соответствующий демонстрационный (или любой другой) m-файл. Это можно сделать с помощью любого текстового редактора, редактора и отладчика m-файлов, встроенного в систему, или с помощью команды
type Имя_М-файла
Ниже представлена часть файла демонстрационного примера e2pi:
» type e2pi
function slide=e2pi
% This is a slideshow file for use with playshow.m and makeshow.m
% To see it run. type 'piayshow e2pi',
% ' Copyright 1984-2000 The MathWorks. Inc.
% SRevision: 5.12 $
If nargout<1.
playshow e2pi
else
%========== Slide 1 ==========
slide(l).code={
'x=0:0.16:5;'.
'y=0:0.16:5;'.
'[xx,yy]=meshgrid(x,y);',
'zz=xx.*yy-yy.~xx:',
'h=surf(x.y,zz):'.
'set(h,"EdgeColor".[0.7 0.7 0.7]);',
'view(20.50);',
'colormap(hsv);.' };
slide(l).text={
' Press the "Start" button to see an example of visualization'
' in MATLAB applied to the question:',
' "which is greater, e A pi or pi^e?"'};
Используя команду help, можно получить справку по любой конкретной функции или команде. Ввиду того что текст примера имеет довольно большой объем, мы ограничились приведением только его фрагмента, относящегося к первому слайду. Остальные слайды просто опущены — на их месте стоит многоточие.
Справочная система MATLAB 6.0
Основной доступ к справочной информации обеспечивает меню Help (Помощь). Оно открывает доступ к справочным системам MATLAB и к информации о производителе MATLAB. Меню. Help показано на рис. 4.6.
Рис. 4.6. Окно MATLAB 6.0 с открытым меню Help
Основные возможности справочной системы обсуждаются в следующих разделах. Поэтому здесь мы остановимся только на команде About MATLAB. Она выводит окно, содержащее информацию о системе. На рис. 4.7 это окно показано на фоне рабочего окна системы.
Рис. 4.7. Окно со сведениями о системе
В окне About MATLAB можно найти информацию о применяемой версии системы (в нашем случае это 6.0.0.88) и о дате ее создания (22 сентября 2000 г.). Номер лицензии ввиду его конфиденциальности опущен — точнее, заменен нулем.
Запуск справочной системы
Рис. 4.8. Основное окно справочной подсистемы
Для запуска справочной системы следует использовать одноименную команду Help меню MATLAB. При этом запустится браузер справочной системы (браузер помощи) и откроется ее окно, показанное на рис. 4.8.
Рис. 4.9. Один из документов справочной системы
Бросается в глаза, что справочная система новой версии MATLAB 6.0 существенно переработана даже внешне. Теперь она имеет вполне современный вид электронного документа. В левом окне расположены вкладки разделов справочной системы и дерево ее разделов, в правом — информация о текущем установленном разделе. От использования стандартного Интернет-браузера для вывода справочной информации в новой версии MATLAB отказались. Видимо, мода на всеобщее применение Интернет-браузеров начинает потихоньку отступать.
Каждый небольшой раздел справочной системы представлен в правом окне в виде гипертекстовой ссылки, активизация которой приводит к переходу на соответствующую HTML-страницу. На рис. 4.9 показан один из документов справочной системы, содержащий начальные данные по запуску расширения Simulink.
С помощью линейки прокрутки можно перемещаться по перечню документов справочной системы и выбирать различные темы справки. На рис. 4.10 представлена справка по разделу, посвященному созданию моделей для пакета расширения Simulink.
Несмотря на удобства справочной системы, надо отметить, что ее содержимое во многом дублирует другие справочные подсистемы MATLAB, например справки, вызываемые из командной строки и имеющиеся в виде PDF-файлов. В целом справочная система MATLAB превратилась в монстра — в версии MATLAB 6.0 только для PDF-файлов этой системы пришлось в ее поставку включить отдельный CD-ROM.
Рис. 4.10. Пример просмотра документа, посвященного созданию библиотек расширения Simulink
Виды работы справочной системы
Как видно из рис. 4.8, окно разделов справочной системы имеет четыре вкладки, соответствующие четырем видам работы справочной системы:
Contents (Содержание)— поиск информации по контексту (или попросту по обычному оглавлению с разделами справки);
Index (Индекс)— поиск информации по индексному (алфавитному) каталогу;
Search (Поиск)— поиск всех тем справки, в которые включена заданная для поиска фраза или отдельное слово;
Favorites — доступ к специальным возможностям справочной системы.
Эти виды работы могут применяться в зависимости от конкретных задач пользователя.
Работа с индексным каталогом
Мы уже привели пару примеров использования справочной системы по контексту. Теперь рассмотрим работу с индексным каталогом.
Будучи крупной математической системой, MATLAB имеет многие сотни функций, свойства которых запомнить трудно даже пользователю-профессионалу. Да и нужно ли? Справочная система MATLAB позволят найти информацию по нужной функции в считанные секунды.
Если вы знаете имя нужной вам функции, то проще всего воспользоваться индексным каталогом. Откройте в левом окне справки вкладку Index и в поле поиска (сверху) укажите имя нужной вам функции или хотя бы его начальную часть. Нажмите клавишу Enter и через секунду-другую вы получите список всех объектов, включающих заданное имя.
Поиск по всей справке
Еще один полезный вид работы со справочной системой — поиск по заданному слову или фразе. Он происходит почти аналогично ранее приведенному случаю, но при открытой вкладке Search (Поиск) в левом окне справочной системы.
При выдаче данных о функциях используется справочник по ним (Function Reference) и обеспечивается автоматический поиск нужной функции.
Новые функции системы MATLAB 6.0
Разработчики систем компьютерной математики не очень охотно включают в их состав новые функции, поскольку это чревато несовместимостью новых версий систем с прежними версиями. Тем не менее на это приходится идти.
Какие новые функции включены в систему MATLAB 6.0? Для ответа на этот вопрос просто наберите в поле поиска вкладки Search (Поиск) слово Functions (Функции) в режиме Full Text (полнотекстового поиска). Вы сразу найдете раздел New Functions (Новые функции) в левом окне и, выделив его мышью, получите в правом окне перечень новых функций.
Новых функций в системе MATLAB 6.0 совсем немного — два десятка, и в основном это довольно специфические функции. Но эффективность и возможности старых функций значительно увеличены.
Поиск функций по имени
Если вас не интересует всякая «шелуха», которой сопровождается поиск по заданному слову или фразе (особенно полнотекстовый поиск Full Text), то вы можете перейти к поиску по имени функции — тип поиска Function Name. Это предусмотрено на вкладке Search (Поиск).
Нетрудно заметить, что на этот раз найден только главный раздел функции с именем sin. Остальные разделы отсеяны фильтрами справочной системы.
Просмотр документации в формате PDF
Описанные выше справочные средства рассчитаны на то, что пользователь уже знаком с системой и желает быстро получить справку по ее конкретным возможностям. Но для общего знакомства с системой они не очень подходят, поскольку много времени занимают «бесконечные» переходы от одного раздела справки к другому. Поэтому хотелось бы обратить внимание читателя на подробные электронные книги, обычно представленные в виде файлов формата PDF, для работы с которыми применяются такие программы, как Acrobat Reader или Adobe Acrobat. Первая позволяет только просматривать материалы книг, а вторая — еще и редактировать их.
Справочная система содержит раздел Favorites с подразделом MATLAB Printable Documentation (печатаемая документация MATLAB), предоставляющим доступ к электронной справочной документации, которая поставляется в виде файлов PDF или PostScript. На рис. 4.11 показано окно этого раздела справки с перечнем документов в формате PDF. Среди документов крупные (сотни страниц) руководства по функциям системы, языку ее программирования, графическим функциям и т. д.
Возможность просмотра документов в этом формате требует наличия программы Adobe Acrobat Reader (можно бесплатно скачать с web-узла фирмы Adobe www.ado-be.com) и файлов самих документов. Не все поставки системы MATLAB имеют эти средства. Полный объем документации по системе MATLAB 6.0 и пакетам прикладных программ уже превышает 600 Мбайт, что делает документацию труднообозримой.
Рис. 4.11. Окно раздела справки с доступом к документам в формате PDF
В качестве примера работы с электронными документами формата PDF рассмотрим просмотр книги-справочника, предназначенной для начального знакомства с системой MATLAB (Getting Started with MATLAB) (Начинаем работу с MATLAB). Его титульная страница показана на рис. 4.12. Заметим, что она появляется после загрузки программы Acrobat Reader (временное окно этой программы не показано).
Рис. 4.12. Начальная страница электронного справочного руководства по MATLAB
Нетрудно заметить, что страница электронного документа в формате PDF содержит древообразный перечень разделов в левой части и большое окно просмотра в правой части. С помощью левого окна можно явно указать раздел справочника, который необходимо просмотреть. Можно также перелистывать материал справочника с помощью линейки прокрутки, расположенной справа в окне просмотра. Таким образом, справочные материалы представлены в типовой форме электронных книг.
Рис. 4.13. Одна из страниц электронного справочника в окне просмотра программы Acrobat Reader
Acrobat Reader — сама по себе серьезная программа, и ее описание в задачи данной книги не входит. Однако надо отметить, что работа с программой интуитивно понятна и не вызывает особых трудностей даже у не очень опытного пользователя. На рис. 4.13 дано представление одной из страниц с некоторым увеличением и в полностью открытом окне просмотра. На ней показан пример построения трехмерного графика с иллюстрацией эффектов освещения построенной поверхности от внешнего источника света. Из рис. 4.13 видно, что качество представления текстов, да и рисунков не очень высокое, даже при увеличении. Тем не менее оно достаточно для просмотра рисунков в обычном масштабе.
Как и все другие виды справочной документации, электронные книги по MATLAB подготовлены на английском языке (и кое-что на японском).
Галерея примеров — MATLAB Demos
В меню Help имеется команда Demos, дающая доступ к галерее демонстрационных примеров применения системы MATLAB. При запуске этой команды появляется окно демонстрационных примеров MATLAB Demos, показанное на рис. 4.14.
Рис. 4.14. Окно демонстрационных примеров
Это же окно можно вызвать выполнением команды demo в режиме диалога.
В этом окне имеются три панели:
левая панель с перечнем разделов, по которым предлагаются примеры;
панель с описанием выбранного раздела примеров;
панель с перечнем примеров по выбранному разделу.
Выбрав раздел примеров (щелчком мыши), затем следует выбрать нужный пример. На рис. 4.14 показан выбор раздела Gallery и примера Hoops. После этого нажатием кнопки Run можно запустить m-файл с выбранным примером и наблюдать результат его работы (рис. 4.15).
Рис. 4.15. Результат выполнения примера Hoops
Этот пример демонстрирует построение сплетающихся в пространстве нескольких объемных обручей с функциональной цветной окраской. Кнопка Info окна открывает раздел справочной системы с описанием m-файла данного примера.
Демонстрационные примеры Simulink
Следующий пример, показанный на рис. 4.16, иллюстрирует доступ к примерам пакета системного моделирования Simulink — одного из самых мощных пакетов прикладных программ, расширяющих возможности системы MATLAB. Этот пакет создан для моделирования линейных и нелинейных динамических систем заданием их в виде системы функциональных блоков с автоматическим составлением и решением матричной системы дифференциальных уравнений состояния, описывающей работу созданной модели.
На рис. 4.17 приведен пример просмотра одного из простых примеров — моделирования динамической системы второго порядка, описываемой нелинейными дифференциальными уравнениями Ван-дер-Поля. Сверху показана блок-схема моделируемого объекта, а снизу — результат моделирования его работы. Для пуска моделирования в панели инструментов окна системы Simulink нажимается кнопка пуска с изображением треугольника.
Рис. 4.16. Доступ к примерам пакета Simulink
Окно MAT LAB Demos дает возможность ознакомиться со многими десятками самых серьезных примеров применения системы MATLAB и позволяет убедиться в высоком качестве визуализации их решений. При необходимости всегда можно ознакомиться с файлом любого примера и использовать его для решения схожих задач.
Рис. 4.17. Пример моделирования нелинейной динамической системы второго порядка средствами пакета моделирования Simulink
Копирование демонстрационных примеров
Вполне возможно, что вы захотите воспользоваться каким-либо примером для своих целей. Для этого можно использовать m-файл примера или перенести его текст в командное окно MATLAB, используя буфер обмена. Покажем, как это делается. В нижней части окна примера показано, каким образом осуществляется копирование примера: текст примера выделяется мышью и используется команда Сору (Копировать) меню Edit окна примера, в результате чего текст примера попадет в буфер обмена.
После этого надо вернуться в командное окно MATLAB и, используя команду Paste (Вставить) меню Edit, перенести текст примера из буфера в текущую строку ввода. Выполнив команду (как обычно, клавишей Enter), можно наблюдать исполнение примера, как показано на рис. 4.18.
Трудно сказать почему, но создатели MATLAB в последних версиях отказались от возможности копирования выделенного в примерах окна Demos текста программ с помощью контекстного меню правой клавиши мыши. Зато появилась возможность исполнения выделенных в справке (как на заданную функцию в командном режиме, так и в HTML-браузере справки) примеров с помощью команды Evaluate Selection в контекстном меню правой клавиши мыши в тексте справки.
Остается еще раз отметить, что обилие примеров в системе MATLAB облегчает знакомство с различными аспектами применения системы. Большинство примеров содержат решения отнюдь не тривиальных математических задач и прекрасно иллюстрируют обширные возможности системы. Поэтому работа с демонстрационными примерами — залог успешного освоения системы MATLAB.
Рис. 4.18. Исполнение скопированного примера из командного окна MATLAB
Что нового мы узнали?
В этом уроке мы научились:
Использовать команды справки.
Вызывать список демонстрационных примеров.
Исполнять примеры и копировать их.
Просматривать листинги m-файлов командой type.
Работать с различными разделами справочной системы.
Просматривать документацию MATLAB в формате PDF.
Работать с демонстрационными примерами системы MATLAB.
Запускать приложение Simulink.
Урок №5.
Пользовательский интерфейс MATLAB
Общая характеристика пользовательского интерфейса
Панель инструментов
Операции с буфером обмена
Браузеры рабочей области и файловой структуры
Запуск приложения Simulink
Вызов справки по системе MATLAB
Меню системы MATLAB
Работа с файлами
Настройка MATLAB и функция path
Обеспечение печати
Интерфейс редактора и отладчика т-файлов
Файлы сценариев и функций
Интерфейс графических окон
Общение MATLAB с операционной системой
Общая характеристика пользовательского интерфейса
Как видно из материалов предыдущих уроков, в новой версии MATLAB в полной мере сохранен командный интерактивный режим работы. Это старый фасад дворца MATLAB. Командный режим остается одним из наиболее удобных и проверенных методов работы с системой.
Имеются и типовые средства приложений Windows 95/98/Me/2000/NT4 — меню и панель инструментов. Но они по-прежнему выглядят намного скромнее, чем у большинства современных приложений Windows. Видимо, так и должно быть — чем серьезнее математическая система, тем меньше она нуждается в использовании всевозможных кнопок на панели инструментов и тем скромнее может быть ее главное меню.
Рис. 5.1. Окно системы MATLAB
И, тем не менее, пользовательский интерфейс в системе MATLAB 6.0 кардинально переработан. Это видно из рис. 5.1, на котором показано основное полностью открытое окно системы MATLAB 6.0 так, как оно предстает перед пользователем при запуске.
Главными отличиями от весьма скромного интерфейса прежних версий системы MATLAB у новой версии стали:
позиция Web меню, открывающая доступ к Интернет ресурсам фирмы Math-Works Inc.;
меню используемых разделов текущей папки файловой системы Current Directory в конце панели инструментов справа;
окно с вкладками Launch Path (Доступ к частям системы) и Workspace (Рабочая область) в левой части основного окна (сверху);
окно с вкладками Command History (Обзор ранее исполненных команд) и Current Directory (Текущая папка) в левой части основного окна (сверху)
применение цветового выделения выражений в командной строке, что упрощает оперативный контроль их синтаксиса по мере ввода.
Эти отличия указывают на то, что разработчики новой версии уделили больше внимания оперативному контролю за состоянием системы, который ранее (в прежних версиях) был как бы за кадром.
Упрощенный интерфейс
Сделав решительный шаг в обновлении интерфейса, разработчики MATLAB 6.0, похоже, испугались недовольства старых пользователей, уже привыкших работать со скромным и отчасти даже ущербным интерфейсом прежних версий MATLAB. А потому они ввели возможности изменения интерфейса системы, в том числе представления его в добром старом виде. Все эти возможности реализуются командами в позиции View (Вид) меню. На рис. 5.1 вкладка View показана в открытом состоянии.
Теперь пользователь может настраивать вид интерфейса и по-разному располагать его окна. В частности, исполнив команду View > Desktop Layout > Command Window Only (Только командное окно) можно получить «старый» вид интерфейса — рис. 5.2. Теперь о новациях в интерфейсе напоминают лишь позиция меню Web и доступ из панели инструментов к папкам файловой системы. Кстати, окно доступа к папкам файловой системы также показано на рис. 5.2.
Нередко MATLAB отказывается исполнять некоторые команды из-за того, что их m-файлов нет в текущей папке. Поэтому обеспечение быстрого доступа к файловой системе из пользовательского интерфейса можно приветствовать.
Для редактирования и отладки m-файлов MATLAB имеет встроенный современный редактор, интерфейс которого выполнен в лучших традициях Windpws-приложений. В том же стиле выполнены окно просмотра ресурсов памяти, окно просмотра путей файловой системы, справочник по возможностям системы и демонстрационные программы. Редактор графики и окно графики со средствами редактирования рисунков уже были описаны.
Рис. 5.2. Упрощенный интерфейс системы MATLAB 6.0
Работа с панелью инструментов
Панель инструментов (рис. 5.3) дает наиболее простой и удобный (особенно для начинающих пользователей) способ работы с системой MATLAB. При этом основные команды вводятся указанием курсором мыши на нужную кнопку с нажатием левой клавиши мыши. Кнопки имеют изображение, явно подсказывающее их назначение.
Рис. 5.3. Часть окна системы MATLAB с меню и панелью инструментов
Прежде всего перечислим назначение всех кнопок панели инструментов:
New M-file (Новый m-файл) — выводит пустое окно редактора m-файлов;
Open file (Открыть файл) — открывает окно для загрузки m-файла;
Cut (Вырезать)— вырезает выделенный фрагмент и помещает его в буфер;
Сору (Копировать)— копирует выделенный фрагмент в буфер;
Paste (Вставить)— переносит фрагмент из буфера в текущую строку ВВОДА
Undo (Отменить)— отменяет предшествующую операцию;
Redo (Повторить) — восстанавливает последнюю отмененную операцию;
Simulink — открывает окно браузера библиотек Simulink;
Help (Помощь)— открывает окно справки.
Набор кнопок панели инструментов обеспечивает выполнение наиболее часто необходимых команд и вполне достаточен для повседневной работы с системой.
назначении кнопок говорят и всплывающие подсказки, появляющиеся, когда курсор мыши устанавливается на соответствующую кнопку.
ни имеют вид желтого прямоугольника с текстом короткой справки — см. пример такой подсказки на рис. 2.12 у кнопки Help панели инструментов. Любопытно отметить, что доступ к браузерам рабочей области и файловой системы из панели инструментов убран.
Вызов окна открытия нового файла
Кнопка New M-file открывает окно редактора/отладчика m-файлов. Это окно показано на рис. 5.4. Работу с этим средством мы обсудим позже.
Рис. 5.4. Пустое окно редактора/отладчика m-файлов
По умолчанию файлу дается имя Untitled (безымянный), которое впоследствии (при записи файла) можно изменить на другое, отражающее тему задачи. Это имя отображается в титульной строке окна редактирования m-файла, которое размещается в окне редактора/отладчика и видно на рис. 5.4. В редакторе/отладчике можно редактировать несколько m-файлов, и каждый из них будет находиться в своем окне редактирования, хотя активным может быть только одно окно, расположенное поверх других окон.
Примечание
Обратите внимание, что панель инструментов является контекстно-зависимой. Для редактора/отладчика m-файлов она имеет несколько иной набор инструментов, чем для окна командного режима работы (см. рис. 5.1). Позже мы уточним эти отличия.
Вызов окна загрузки имеющегося файла
Кнопка Open file (Открыть файл) служит для загрузки в редактор/отладчик ранее созданных m-файлов, например входящих в пакет расширения (Toolbox) системы или разработанных пользователем. Она открывает окно, которое является типичным элементом интерфейса Windows-приложений и показано на рис. 5.5 внутри окна редактора/отладчика m-файлов.
Рис. 5.5. Окно загрузки файла в окне редактора/отладчика
В окне загрузки файлов с помощью раскрывающегося списка Папка и вертикальной полосы прокрутки можно «пройтись» по всем дискам, папкам и файлам. Чтобы выбрать нужный файл для загрузки, его требуется выделить мышью. Выбор завершается двойным щелчком на имени файла, нажатием клавиши Enter или щелчком на кнопке Открыть. Любое из этих действий приводит к загрузке документа в текущее окно системы. Кнопка Отмена или клавиша Esc позволяет отказаться от загрузки.
Примечание
Пусть читателя не волнуют внезапно появившиеся русскоязычные надписи на элемен-тах интерфейса окна загрузки файлов. Они говорят лишь о том, что используется окно стандартной русифицированной операционной системы Windows 95/98/Ме, которая обычно устанавливается у наших пользователей.
Для вызова одного из ранее использовавшихся документов достаточно щелкнуть мышью на его имени в списке, находящемся над командой Exit (Выход) в меню File. После загрузки файла с документом его текст появляется в текущем окне — на рис. 5.5 показан текст выбранного файла graf2d.rn (демонстрация возможностей двумерной графики). Его можно начинать редактировать или запускать на исполнение.
Операции с буфером обмена
Кнопки Cut (Вырезать), Сору (Копировать) и Paste (Вставить) реализуют наиболее характерные команды работы с буфером обмена (Clipboard). Первые две операции относятся к выделенным фрагментам сессии или текста m-файлов (если они выполняются в окне редактора/отладчика). Для выделения объектов можно использовать мышь, перемещая курсор по тексту при нажатой левой кнопке, или клавиши со стрелками в комбинации с клавишей Shift.
На рис. 5.6 показан пример выделения содержимого матрицы М в окне документа MATLAB. Эта матрица формируется функцией magiс (n) и называется магической, поскольку сумма элементов любого столбца, любой строки и даже любой диагонали равна одному и тому же числу — 34 для матрицы при n=4.
Рис. 5.6. Окно документа с выделенным содержимым матрицы М
Команда Cut (Вырезать) осуществляет вырезание выделенного фрагмента и размещение его в буфере. При этом вырезанный фрагмент удаляется из текста документа. Команда Сору (Копировать) просто копирует выделенный фрагмент в буфер, сохраняя его в тексте. Команда Paste (Вставить) вызывает объект из буфера (сохраняя объект в буфере) и помещает копию объекта на место в документе, указанное текстовым курсором. Эти операции реализуются как соответствующими кнопками, так и командами меню Edit (Редактировать). В MATLAB можно использовать контекстное меню, появляющееся при нажатии правой кнопки мыши. Например, установив курсор мыши на выделенный фрагмент матрицы М и нажав правую кнопку, можно увидеть меню, показанное на рис. 5.6. В нем, кстати, дублируется позиция с командой Сору (Копировать). Есть и ряд других доступных в данный момент команд. Обратите внимание, что в момент подготовки магической матрицы М ее имя появилось в окне браузера рабочей области — в правой части экрана. При этом матрица представляется изображением таблицы.
Содержимое буфера можно перенести в строку ввода, в окно редактора-отладчика m-файлов или даже в другое приложение. Допустим, мы хотим создать матрицу M1 с содержимым, которое размещено в буфере. Для этого достаточно набрать М1=[ и, нажав правую клавишу мыши, выбрать из появившегося меню команду Paste (Вставить). Этот момент фиксирует рис. 5.7.
Рис. 5.7. Подготовка к вставке данных матрицы из буфера
Исполнив команду Paste, можно увидеть, что данные хранящейся в буфере матрицы появятся после открывающей квадратной скобки. Для создания матрицы Ml остается ввести закрывающую квадратную скобку ] и нажать клавишу Enter. На рис. 5.8 показано, как создается матрица Ml, по содержимому аналогичная матрице М.
Рис. 5.8. Пример создания матрицы M1 с содержимым, взятым из буфера
Разумеется, этот пример является чисто учебным. Не обращаясь к помощи буфера, можно было бы просто записать М1=М. Или М2=М — именно так на рис. 5.8 задана матрица М2. Однако зачастую операции с буфером весьма полезны. Так, все примеры в тексте этой книги получены переносом выделенных фрагментов соответствующей сессии в окно текстового редактора Microsoft Word. Возможен и обратный перенос - записанных в документах редактора Microsoft Word примеров в командную строку MATLAB для исполнения примеров.
Примечание
Обратите внимание на команду Select All в контекстном меню. Эта команда позволяет выделить весь текст текущей сессии-А команда Clear Session очищает окно от содержимого данной сессии.
Отмена результата предшествующей операции
Часто, выполнив какую-то операцию, мы отмечаем, что она оказалась ошибочной. При работе в MATLAB такой ситуации пугаться не стоит, — нажатие кнопки Undo (Отменить) панели инструментов приведет к отмене последнего действия, выполненного в текущей строке. Операции в предыдущих строках документа этой командой не отменяются. Если оказалось, что вы зря произвели отмену последней операции, то ее легко восстановить, введя с панели инструментов операцию Redo (Восстановить).
Запуск приложения Simulink
Кнопка Simulink панели инструментов (или команда simulink из строки ввода) запускает одно из самых мощных приложений системы MATLAB — программу моделирования систем, построенных из типовых блоков. Эта система (пакет инструментов (toolbox) Simulink) в данной книге подробно не описывается (см. и описание предшествующей версии в), так что пока отметим лишь, что щелчок на указанной кнопке выводит окно библиотеки типов блоков (рис. 5.9 слева).
В MATLAB 6.0 применена новая версия Simulink 4 с библиотекой блоков Block Library. Эта библиотека содержит существенно расширенный набор компонентов — блоков, объединенных в тематические группы. Чтобы упростить поиск и выбор блоков, окно библиотеки организовано в виде браузера библиотеки, очень напоминающего Проводник (Windows Explorer) операционной системы Windows 95/98/ Me/2000/NT4. Окно браузера показано на рис. 5.9 слева. В нем видно дерево моделей с раскрывающимися ветвями-блоками. Изображение компонентов выделенного блока дерева показывается в поле просмотра в правой части окна браузера.
Для загрузки модели какой либо системы или устройства (в том числе из числа демонстрационных примеров) достаточно активизировать кнопку Ореn.(Открыть), имеющую вид открывающейся папки. При этом появится окно редактора модели программы Simulink, которое показано на рис. 5.9 справа. Это стандартное окно загрузки файлов, принятое во всех приложениях операционной системы Windows 95/98/Ме/2000. В нем можно выбрать и загрузить файл нужной модели или демонстрационного примера.
Рис. 5.9. Окно браузера библиотечных блоков программы Simulink
Рис. 5.10 показывает загруженную в Simulink модель аттрактора Лоренца — демонстрационный файл lorenz. Здесь видно окно с загруженной моделью (она находится слева) и окна встроенного виртуального осциллографа — одного из многих виртуальных регистрирующих устройств, которые имеются в составе Simulink.
Рис. 5.10. Пример работы программы Simulink
Кнопка с треугольником в панели инструментов Simulink запускает процесс моделирования. О его результатах можно судить по показаниям регистрирующих приборов — в частности, упомянутого уже осциллографа. В его окнах появляются сложные и довольно хаотические колебания, характерные для аттрактора Лоренца. Параметры каждого блока можно уточнить или задать с помощью окна параметров блока. На рис. 5.10 снизу справа показано такое окно для блока Beta*z — множительного устройства. Большинство установок параметров блоков довольно очевидны — даже несмотря на то, что их параметры указаны на английском языке.
Кнопка Create a new model (Создать новую модель) в окне библиотек Simulink открывает чистое окно редактора моделей. Любой блок можно перетащить мышью в это окно. Введенные таким образом блоки соединяются друг с другом линиями, для чего используется мышь, с помощью которой указываются точки соединений и осуществляется протягивание соединительных линий.
Таким образом, легко создать новую модель системы. Однако описание подготовки новых моделей для Simulink в тематику данной книги не входит, поскольку книга посвящена лишь описанию базовой системы MATLAB. Заинтересованные читатели могут обратиться к изданиям. Тем не менее приведенные сведения позволят заинтересованному читателю начать работу с Simulink.
Вызов справки MATLAB
Последняя кнопка панели инструментов Help (Помощь) открывает окно с перечнем разделов справочной системы. Это окно было показано на рис. 4.8. В уроке 4 мы подробно ознакомились с работой со справочной системой, так что на этом можно закончить описание средств системы MATLAB, доступ к которым обеспечивает панель инструментов.
Средства контроля рабочей области и файловой системы
Векторы и матрицы могут занимать большой объем памяти. Конечно, речь не идет о векторах или матрицах, содержащих несколько элементов или даже несколько десятков элементов. Хотя и в этом случае оценка их размеров полезна при разработке алгоритмов матричных вычислений и оценке их эффективности в части использования памяти.
Как отмечалось, в левой части окна системы MATLAB 6.0 имеется окно специального браузера рабочей области — Workspace Browser. Он служит для просмотра ресурсов рабочей области памяти. Браузер дает наглядную визуализацию содержимого рабочей области. Окно браузера рабочей области выполняет и другие важные функции — позволяет просматривать существующие в памяти объекты, редактировать их содержимое и удалять объекты из памяти. Для вывода содержимого объекта достаточно выделить его имя с помощью мыши и щелкнуть на кнопке
Open (Открыть). Объект можно открыть и двойным щелчком на его имени в списке. Откроется окно редактирования массива Array Editor, показанное на рис. 5.11 применительно к матрице М2.
Рис. 5.11. Пример просмотра содержимого матрицы
Окно редактирования матрицы дает удобный доступ для редактирования любого элемента матрицы по правилам, принятым при работе с электронными таблицами. [ В уроке 23 показано, как использовать Microsoft Excel для ввода матриц. — Примеч. ред. ] . Основное из них — быстрый доступ к любому элементу матрицы. Можно также менять тип значений элементов, выбирая его из списка, предоставляемого меню Numeric format (Формат чисел). В окне также выводятся данные о числе строк и столбцов матрицы.
Команды просмотра рабочей области who и whos
Следует отметить, что просмотр рабочей области возможен и в командном режиме, без обращения к браузеру Workspace Browser. Команда who выводит список определенных переменных, а команда whos — список неременных с указанием их размера и объема занимаемой памяти. Следующие примеры иллюстрируют действие этих команд:
» х=1.234;
» V=[1 2 3 4 5]:
» M=magic(4);
» who
Your variables are:
M V x
|
» whos |
|
|
|
|
|
Name |
Size |
Bytes |
Class |
|
|
M |
4x4 |
128 |
double array |
|
|
V |
1x5 |
40 |
double array |
|
|
X |
1x1 |
8 |
double array |
|
Если вы хотите просмотреть данные одной переменной, например М, следует использовать команду whos M. Естественно, просмотр рабочей области с помощью браузера рабочей области (Workspace Browser) более удобен и нагляден.
Браузер файловой структуры
Для просмотра файловой структуры MATLAB служит специальный браузер файловой системы (Path Browser), который запускается при обычной загрузке системы. Если был установлен упрощенный интерфейс, то для запуска браузера файловой системы используется окно Current Directory (Текущая папка). На рис. 5.12 в левой части показано окно этого браузера.
Нетрудно заметить, что браузер файловой системы построен по типу общеизвестного Проводника (Explorer) операционных систем Windows 95/98/Me/2000/NT4. Окно дает возможность просмотра файловой системы ПК и выбора любого файла. Для примера на рис. 5.12 показан выбор m-файла функции синуса.
Исполнив команду Open (Открыть) из контекстного меню правой клавиши мыши или дважды щелкнув по выделенной строке с именем файла, можно ввести этот файл в окно редактора/отладчика m-файлов. При этом редактор запустится автоматически и его окно с готовым для редактирования выбранным файлом появится на экране рис. 5.12.
Рис. 5.12. Пример окна браузера Path Browser
Примечание
Обратите внимание на то, что m-файл функции синуса содержит только комментарии по этой функции, которые используются справочной системой. Самого определения функции синуса на языке программирования системы MATLAB нет. Это связано с тем, что данная функция является встроенной в ядро системы. Так что модифицировать такие функции попросту нельзя. Ничто, однако, не мешает вам создать свой метод (и алгоритм) вычисления встроенных функций и оформить их в виде m-файлов, дав им свои имена — например, mysin.m.
Таким образом, браузер просмотра файловой структуры позволяет детально ознакомиться с файловой системой MATLAB и вывести любой из m-файлов или файлов демонстрационных примеров для просмотра, редактирования и модификации.
Работа с меню
Открытая позиция строки меню содержит различные операции и команды. Выделенная команда или операция исполняется при нажатии клавиши Enter (Ввод). Выполнение команды можно также осуществить щелчком мыши или нажатием на клавиатуре клавиши, соответствующей выделенному символу в названии команды.
Между командами и операциями нет особых отличий, и в литературе по информатике их часто путают. Мы будем считать командой действие, которое исполняется немедленно. А операцией — действие, которое требует определенной подготовки, например открытие окна для установки определенных параметров.
Параметр (option)— это значение определенной величины, действующее во время текущей сессии. Параметрами обычно являются указания на применяемые наборы шрифтов, размеры окна, цвет фона и т. д.
Меню системы
Перейдем к описанию основного меню системы MATLAB 6.0. Это меню (см. рис. 5.1 сверху) выглядит довольно скромно и содержит всего шесть пунктов:
File — работа с файлами;
Edit — редактирование сессии;
View — вывод и скрытие панели инструментов;
Web — доступ к Интернет-ресурсам;
Windows — установка Windows-свойств окна;
Help — доступ к справочным подсистемам.
По сравнению с версией 5.3.1 добавлена единственная позиция Web, дающая доступ к Интернет-ресурсам, описанный в уроке 1.
Подменю File
Подменю File содержит ряд операций и команд для работы с файлами. Оно показано на рис. 5.13. Число операций и команд значительно сокращено по сравнению с тем же меню у предшествующей версии системы MATLAB.
Теперь меню File содержит следующие операции:
New - открывает подменю с позициями:
M-file — открытие окна редактора/отладчика m-файлов;
Figure — открытие пустого окна графики;
Model — открытие пустого окна для создания Simulink-модели;
GUI — открытие окна разработки элементов графического интерфейса пользователя.
Open — открывает окно загрузки файла.
Close Command Windows — закрывает окно командного режима работы (оно при этом исчезает с экрана).
Import data — открывает окно импорта файлов данных.
Save Workspace As... — открывает окно записи рабочей области в виде файла с заданным именем.
Set Path — открывает окно установки путей доступа файловой системы.
Preferences... — открывает окно настройки элементов интерфейса.
Print... — открывает окно печати всего текущего документа.
Print Selection... — открывает окно печати выделенной части документа.
Exit — завершает работу с системой.
Рис. 5.13. Меню файловых операций File
Открытие окон для подготовки новых файлов
Команда New, как отмечено, открывает окна для подготовки новых файлов. Для трех типов файлов (m-файлы, графические файлы и файлы Simulink-моделей) окна их редакторов уже описывались. Новой является позиция GUI подменю File. Она открывает окно редактора элементов пользовательского интерфейса, показанное на рис. 5.14.
Рис. 5.14. Окно редактора элементов GUI
К подробному описанию этого окна мы еще вернемся. А пока отметим, что работа с редактором довольно очевидна.
Загрузка и сохранение файлов
Команды Open... (Открыть) и Import data... (Импортировать данные) выводят стандартные окна (см. рис. 5.5) для загрузки m-файлов и файлов данных. Команда Save Workspace As... (Сохраните рабочую область как...) открывает стандартное окно записи файлов с расширением .mat. Они хранят определения переменных, массивов, функций пользователя и иных объектов, созданных в ходе текущей сессии работы. Эти команды в силу общеизвестности в более подробных комментариях не нуждаются.
Установка путей доступа файловой системы
Команда Set Path... (Установить путь) открывает окно редактора путей доступа файловой системы. Это окно показано на рис. 5.15.
Окно дает список папок с файлами системы MATLAB. Имеется возможность переноса папок вверх или вниз по списку, уничтожения их и переименования. По умолчанию задается правильная установка путей доступа, так что данными возможностями стоит пользоваться только в особых обстоятельствах, например при случайном переносе папок в другое место или при их переименовании.
Рис. 5.15. Окно редактора путей доступа файловой системы
Настройка элементов интерфейса
Окно настройки элементов интерфейса представлено на рис. 5.16.
Рис. 5.16. Окно настройки элементов интерфейса
Интерфейс MATLAB 6.0 стал настолько удобным и даже изысканным, что мало вероятно, что кому-либо захочется менять его в мере, большей, чем это предусмотрено командами подменю View [ Это может потребоваться даже для настройки под особенности операционной системы. Например, для уточнения расположения вашей программы чтения PDF-файлов, вам, возможно, придется вручную удалить апострофы из пути к ее исполняемому файлу. — Примеч. ред. ]. Однако такая возможность есть — команда Preferences... (Предпочтения) выводит окно детальной настройки элементов интерфейса (рис. 5.16). В левой части этого окна имеется древообразный список элементов интерфейса системы, а в правой части—поле задания параметров для выбранного типа элементов. Поскольку изменение параметров производится обычно очень редко, мы не будем детально рассматривать это окно. Заинтересованный читатель наверняка разберется с нужными ему параметрами самостоятельно.
Обеспечение печати — команды Print и Print Selection
В MATLAB для печати используются стандартные средства Windows. Меню File содержит две команды печати. Первая из них — Print — служит для вывода окна печати, показанного на рис. 5.17 применительно к широко распространенному струйному принтеру Epson Stylus COLOR 600. В этом окне также имеется возможность вывода окна со свойствами печати. В нем можно также определить, с какой страницы начинается печать, и задать число страниц при печати, если печатаемый материал не укладывается в одну страницу.
Рис. 5.17. Окно печати
Окно установки свойств печати для данного принтера показано на рис. 5.18. Оно имеет три вкладки для установки соответственно параметров печати, параметров бумаги и использования утилит профилактики принтера. Многие, даже дешевые струйные принтеры обеспечивают печать в цвете, тогда как такую возможность имеют только дорогие лазерные принтеры.
Рис. 5.18. Окно свойств печати
Следует отметить, что окна печати — типичные для операционной системы Windows 95/98/Me/2000/NT4. Их вид зависит от примененного принтера, точнее от установленного для него драйвера. Установки окон довольно очевидны, поэтому более подробно они не описываются. Обратите внимание на полную русификацию окна печати — это связано с тем, что использовалась локализованная для России версия операционной системы Windows 98. В то же время окно свойств принтера русифицировано лишь частично.
Вторая операция — Print Selection — становится доступной, только если в сессии выделен какой-либо фрагмент. На печать при этом выводится только выделенный фрагмент.
Вообще говоря, MATLAB имеет специальные команды для печати, которые вводятся в командной строке, однако возможности Windows настолько удобны, что командными средствами MATLAB для печати приходится пользоваться редко.
Меню Edit — средства редактирования документов
Меню Edit (рис.5.19) содержит операции и команды редактирования, типичные для большинства приложений Windows:
Undo (Отменить) — отмена результата предшествующей операции;
Redo (Повторить) — отмена действия последней операции Undo;
Cut (Вырезать) — вырезание выделенного фрагмента и перенос его в буфер;
Сору (Копировать) — копирование выделенного фрагмента в буфер;
О Paste (Вставить) — вставка фрагмента из буфера в текущую позицию курсора;
Clear (Очистить) — операция очистки выделенной области;
Select All (Выделить) — выделение всей сессии;
Delete (Стереть) — уничтожение выделенного объекта;
Clear Command Windows (Очистить командное окно) — очистка текста сессии (с сохранением созданных объектов);
Clear Command History (Очистить окно истории команд) — очистка окна истории; О Clear Workspace — очистка окна браузера рабочей области.
Рис. 5.19. Меню Edit
Назначение указанных команд и операций уже обсуждалось. Отметим лишь, что команда Clear Command Window очищает окно командного режима работы и помещает курсор в верхний левый угол окна. Однако все определения, сделанные в течение стертых таким образом сессий, сохраняются в памяти компьютера. Для очистки экрана используется также команда clc, вводимая в командном режиме.
Меню View и Window
В MATLAB 6.0, что уже описывалось, набор команд меню View существенно расширен, и теперь с помощью этого меню можно существенно менять вид пользовательского интерфейса.
Меню Window активно только в случае, если в систему загружены файлы. При этом оно имеет единственную команду Close All (закрыть все окна) и открывающийся список всех загруженных файлов. Он позволяет выбрать окно указанного пользователем файла и сделать его открытым.
Основы редактирования и отладки m-файлов
Интерфейс редактора/отладчика m-файлов
Для подготовки, редактирования и отладки m-файлов служит специальный многооконный редактор. Он выполнен как типичное приложение Windows. Редактор можно вызвать командой edit из командной строки или командой New > M-file из меню File. После этого в окне редактора можно создавать свой файл, пользоваться средствами его отладки и запуска. Перед запуском файла его необходимо записать на диск, используя команду Filе > Save as в меню редактора.
Рис. 5.20. Редактор/отладчик файлов при записи файла на диск
На рис. 5.20 показано окно редактора/отладчика с текстом простого файла в окне редактирования и отладки.
Подготовленный текст файла (это простейшая и наша первая программа на языке программирования MATLAB) надо записать на диск. Для этого используется команда Save As, окно которой видно на рис. 5.20 внутри окна системы редактора/ отладчика. Работа с окном команды Save As уже описывалась.
После записи файла на диск можно заметить, что команда Run в меню Tools (Инструменты) редактора становится активной (до записи файла на диск она пассивна) и позволяет произвести запуск файла. Запустив команду Run, можно наблюдать исполнение m-файла; в нашем случае — это построение рисунка в графическом окне и вывод надписи о делении на ноль в ходе вычисления функции sin(x)/x в командном окне системы (рис. 5.21).
На первый взгляд может показаться, что редактор/отладчик — просто лишнее звено в цепочке «пользователь — MATLAB». И в самом деле, текст файла можно было бы ввести в окно системы и получить тот же результат. Однако на деле редактор/отладчик выполняет важную роль. Он позволяет создать m-файл (программу) без той многочисленной «шелухи», которая сопровождает работу в командном режиме. Далее мы убедимся, что текст такого файла подвергается тщательной синтаксической проверке, в ходе которой выявляются и отсеиваются многие ошибки пользователя. Таким образом, редактор обеспечивает синтаксический контроль файла.
Редактор имеет и другие важные отладочные средства — он позволяет устанавливать в тексте файла специальные метки, именуемые точками прерывания (breakpoints). При их достижении вычисления приостанавливаются, и пользователь может оценить промежуточные результаты вычислений (например, значения переменных), проверить правильность выполнения циклов и т. д. Наконец, редактор позволяет записать файл в текстовом формате и увековечить ваши труды в файловой системе MATLAB.
Для удобства работы с редактором/отладчиком строки программы в нем нумеруются в последовательном порядке. Редактор является многооконным. Окно каждой программы оформляется как вкладка.
Рис. 5.21. Исполнение файла, показанного в окне редактора на рис. 5.20
Цветовые выделения и синтаксический контроль
Редактор/отладчик m-файлов выполняет синтаксический контроль программного кода по мере ввода текста. При этом используются следующие цветовые выделения:
ключевые слова языка программирования — синий цвет;
операторы, константы и переменные — черный цвет;
комментарии после знака % — зеленый цвет;
символьные переменные (в апострофах) — зеленый цвет;
синтаксические ошибки — красный цвет.
Благодаря цветовым выделениям вероятность синтаксических ошибок снижается.
Однако далеко не все ошибки диагностируются. Ошибки, связанные с неверным применением операторов или функций (например, применение оператора - вместо + или функции cos(x) вместо sin(x) и т. д.), не способна обнаружить ни одна система программирования. Устранение такого рода ошибок (их называют семантическими) — дело пользователя, отлаживающего свои алгоритмы и программы.
Понятие о файлах-сценариях и файлах-функциях
Здесь полезно отметить, что m-файлы, создаваемые редактором/отладчиком, делятся на два класса:
файлы-сценарии, не имеющие входных параметров;
файлы-функции, имеющие входные параметры.
Видимый в окне редактора на рис. 5.21 файл является файлом-сценарием, или Script-файлом. Данный файл не имеет списка входных параметров и является примером простой процедуры без параметров. Он использует глобальные переменные, т. е. такие переменные, значения которых могут быть изменены в любой момент сеанса работы и в любом месте программы.
Рис. 5.22. Исполнение файла-сценария из командной строки
Для запуска файла-сценария из командной строки MATLAB достаточно указать его имя в этой строке. Рис. 5.22 поясняет это. Обратите внимание на команду grid on, исполняемую после запуска созданного файла. Эта команда наносит на график сетку из точечных линий.
Файл-функция отличается от файла-сценария прежде всего тем, что созданная им функция имеет входные параметры, список которых указывается в круглых скобках. Используемые в файле-функции переменные являются локальными переменными, изменение значений которых в теле функции никоим образом не влияет на значения, которые те же самые переменные могут иметь за пределами функции.
Иными словами, локальные переменные могут иметь те же имена (идентификаторы), что и глобальные переменные (хотя правила культурного программирования не рекомендуют смешивать имена локальных и глобальных переменных). В дальнейшем мы рассмотрим этот вопрос более подробно, а пока вернемся к теме данного урока — описанию интерфейса компонентов системы MATLAB.
Панель инструментов редактора и отладчика
Редактор имеет свое меню и свою инструментальную панель. Внешний вид инструментальной панели показан на рис. 5.23. По стилю данная панель похожа на панель инструментов окна командного режима работы, но имеет несколько иной набор кнопок.
Рис. 5.23. Панель инструментов редактора/отладчика m-файлов
Назначение кнопок панели инструментов редактора/отладчика следующее:
New — создание нового m-файла;
Open — вывод окна загрузки файла;
Save — запись файла на диск;
Print — печать содержимого текущего окна редактора;
Cut — вырезание выделенного фрагмента и перенос его в буфер;
Сору — копирование выделенного объекта в буфер;
Paste — размещение фрагмента из буфера в позиции текстового курсора;
Undo — отмена предшествующей операции;
Redo — повтор отмененной операции;
Find text — нахождение указанного текста;
Show function — показ функции;
Set/Clear Breakpoint — установка/сброс точки прерывания;
Clear All Breakpoints — сброс всех точек прерывания;
Step — выполнение шага трассировки;
Step In — пошаговая трассировка с заходом в вызываемые m-файлы;
Step Out — пошаговая трассировка без захода в вызываемые m-файлы;
Save and Run — запись и сохранение;
Exit Debug Mode — выход из режима отладки.
С назначением ряда из этих кнопок вы уже знакомы, поскольку оно аналогично описанному ранее для основного окна MATLAB. А вот о назначении других кнопок надо поговорить.
Работа с точками прерывания
Основным приемом отладки rn-файлов является установка в их тексте точек прерывания (Breakpoints). Они устанавливаются (и сбрасываются) с помощью кнопки Set/Clear Breakpoint Сброс всех точек прерывания обеспечивается кнопкой Clear All Breakpoints.
Рассмотрим рис. 5.24, на котором в окне редактора/отладчика видна конструкция цикла. Как будет меняться переменная s, значение которой должно давать ряд натуральных чисел?
Прежде всего для отладки надо записать программу на диск, а. затем установить напротив выражения s=s+l точку прерывания — она отчетливо видна на рис. 5.24 как красный кружок. Для установки точки прерывания необходимо поместить текстовый курсор в нужное место (напротив указанного выражения) и щелкнуть на кнопке Set/Clear Breakpoint или щелкнуть справа от номера строки.
Рис. 5.24. Простейший пример на применение точки прерывания в программе
Теперь при пуске программы командой Run она будет исполнена до точки прерывания, после чего текущие значения s будут выведены в окне MATLAB. С помощью кнопки Step (Шаг) можно выполнить очередной шаг вычислений и т. д. Если отпала необходимость останова в точках прерывания, достаточно кнопкой Clear All Breakpoints удалить разом все точки прерывания. Желтая стрелка указывает, в каком месте программы произошла остановка. Обратите внимание на то, что в этом примере каждый шаг исполнения цикла фиксируется в окне командного режима системы MATLAB. При остановке в точке прерывания вы можете провести контроль значений переменных как «вручную», так и с помощью организации вывода на просмотр перед точкой прерывания.
Вы можете задать выполнение программы без остановки при заходе, но с остановкой при выходе (кнопка Step Out), и с остановкой при заходе в вызываемые m-файлы (кнопка Step In). Кнопка Exit Debug Mode (Выход из режима отладки) прекращает операции отладки.
Интерфейс графических окон
Обзор интерфейса графических окон
В уроке 3 мы уже описывали в общих чертах окно графики. Ниже мы рассмотрим его более детально. Графическое окно MATLAB 6.0 представлено на рис. 5.25. Это обычное масштабируемое и перемещаемое окно Windows-приложений. MATLAB может создавать множество таких окон. Однако размещение графики в окне сессии не предусмотрено. Это возможно в специальном расширении Notebook, позволяющем встраивать объекты MATLAB (тексты, строки ввода и вывода, графики) в документы популярного текстового редактора Word 95/97/2000.
Рис. 5.25. Графическое окно MATLAB
Меню этого окна похоже на меню окна командного режима работы системы MATLAB. Однако при внимательном просмотре заметен ряд отличий.
Прежде всего в меню Edit окна графики наряду со стандартными операциями работы с буфером есть ряд новых команд:
Copy Figure (Копировать рисунок) — копирование в буфер рисунка (графика);
Copy Options (Копировать параметры) — копирование параметров графика:
Figure Properties (Свойства рисунка) — вывод окна свойств графика;
Axes Properties (Свойства осей) — вывод окна свойств осей графика;
Current Object Properties (Свойства текущего объекта) - вывод окна свойств текущего объекта.
Для вывода свойств графиков, их осей и текущих объектов используется окно свойств графиков с соответствующими вкладками, работа с которым описывалась в уроке 3.
Примечание
Большинство графиков, которые описываются в книге, представлены копиями толь-ко самих графиков, а не всего графического окна. Для получения таких копий использовалась команда Copy Figure из меню Edit окна графики или просто вырезалась нужная часть копии экрана, получаемой нажатием клавиши Print Scrn. Такое представление делает приведенные рисунки одинаковыми для всех версий MATLAB от 5.0 и выше.
Панель инструментов камеры обзора
Отличительной особенностью окна графики в версии MATLAB 6.0 стало появление второй инструментальной панели со средствами форматирования трехмерной (3D) графики. Эта панель (она видна на рис. 5.25 под основной панелью инструментов) выводится командой View > Camera Toolbar.
Эта панель управляет некоторой воображаемой фотокамерой (или просто камерой), с помощью которой как бы наблюдается объект. Кнопки имеют наглядные изображения, поясняющие действия кнопок. В связи с этим их подробное описание лишено смысла — проще опробовать их в действии.
Меню инструментов Tools
Действия кнопок панели инструментов камеры обзора продублированы в меню Tools (Инструменты) — на рис. 5.25 оно представлено в открытом состоянии. Состав команд указанного подменю в версии MATLAB 6.0 существенно изменен и обновлен. Теперь в нем имеются следующие команды:
Edit Plot (Редактировать график) — редактирование графика;
Zoom In (Увеличение) — увеличение масштаба графика;
Zoom Out (Уменьшение) — уменьшение масштаба графика;
Rotate 3D (Вращение 3D) — вращение в пространстве;
Move Camera (Передвинуть камеру) — установка камеры обзора;
Camera Motion (Передвижение камеры) — установка перемещения камеры обзора;
Camera Axes (Оси камеры) — установка координатных осей при работе с камерой;
Camera Reset (Установка начального состояния камеры) — сброс установок камеры;
Basic Fitting — проведение аппроксимации и регрессии;
Data Statistics — получение статистических данных для точек графика.
Две последние позиции этого меню дают весьма оригинальные возможности обработки точек графика — выполнение регрессии множеством методов с выводом (где это возможно) уравнения регрессии на график и вычисление статистических параметров для этих точек.
Поскольку эти операции относятся к обработке данных, мы рассмотрим их более детально в уроке 17.
Вращение графиков мышью
Хорошее впечатление оставляет возможность вращения графиков мышью — прием, введенный в целый ряд систем компьютерной математики (Mathcad, Maple 6 и Mathematica 4). При вводе этой команды вокруг фигуры появляется обрамляющий ее параллелепипед, который можно вращать мышью (при нажатой левой кнопке) в том или ином направлении. Отпустив кнопку мыши, можно наблюдать график в пространстве. Интересно, что эта возможность действует даже в отношении двумерных графиков (см. рис. 5.25).- При этом вращается плоскость, в которой расположен график. Эта плоскость размещается в упомянутом параллелепипеде.
Операции вставки
В уроке 3 мы уже рассматривали операции вставки с помощью основной панели инструментов. Эти возможности продублированы в позиции Insert (Вставка) меню графического окна. Рис. 5.26 показывает пример рисунка, в котором выполнены основные операции вставки с помощью команд меню Insert (Вставка). Это нанесение надписей по осям, титульной надписи, надписи внутри рисунка, стрелки, отрезка прямой, легенды и шкалы цветов. На этом рисунке меню Insert показано в открытом состоянии.
Рис. 5.26. Примеры операций вставки в графическом окне
Общение MATLAB с операционной системой
Общение системы MATLAB с операционной системой MS-DOS многим покажется рудиментарной возможностью. Так, во время написания данной книги такое общение не потребовалось. [ Это очень важно для систем, работающих в реальном масштабе времени, причем наличие наряду с ! возможности явного задания ОС (dos, unix, vms) позволяет программировать для ОС на управляющем компьютере, отличающемся от ОС пользователя MATLAB.— Примеч. ред. ] . Но, как говорится, из песни слов не выкинешь — MATLAB позволяет из командой строки пользоваться основными услугами старушки MS-DOS и Windows. Есть возможность общения и с другими операционными системами и даже с глобальной сетью Интернет, в том числе и с помощью собственного HTML-браузера MATLAB (браузера помощи).
Для перехода в новую папку служит команда cd:
cd wd — переход в указанную папку wd;
cd (или произвольное имя переменной ad ad=cd) — возвращает строку с полным именем текущей папки;
cd .. — переход к папке, родительской по отношению к текущей.
Примеры (предполагается, что MATLAB установлен на диске Е):
» cd
E:\matlabR12\toolbox
» cd E:\matlabR12\tool
??? Name is nonexistent or not a directory
» cd E:\matlabR12\toolbox\
» cd
E:\matlabR12\toolbox
Для указания пути к текущей папке может использоваться функция pwd:
» pwd
ans =
E:\matlabR12\toolbox
Для получения информации о содержимом текущей папки используется команда dir:
» cd E:\matlabR12\too1box\matlab
» dir
. | datatypes | funfun graphics | ops | specgraph verctrl |
.. | demos | general iofun | polyfun | strfun winfun |
audio | el fun | graph2d lang | sparfun | timefun |
datafun | elmat | graph3d mat | fun | specfun uitools |
Обратите внимание, что в последнем примере выведено содержимое подпапки matlab одной из самых важных папок системы MATLAB — TOOLBOX. В папке TOOLBOX содержатся 46 самых важных подпапок с хранящимися в них пакетами расширения системы MATLAB, например comm — папка пакета проектирования средств телекоммуникаций, compiler — компилятор программ в коды языка С, symbolic — символьные (аналитические) вычисления и т. д. Впрочем, надо отметить, что в разных поставках системы число подпапок может различаться. Функция dir может использоваться для получения списка файлов в любой папке: files-dir ('путь к папке и имя папки').
Выполнение команд !, dos, unix и vms
Из командной строки MATLAB возможно выполнение команд наиболее распространенных операционных систем:
! команда — выполнение заданной команды из набора операционной системы; в среде которой установлена MATLAB;
unix команда — выполнение заданной команды из операционной системы UNIX или UNIX-подобных систем (версии Linux);
vms команда — выполнение заданной команды из операционной системы VMS (Open VMS);
dos команда — выполнение заданной команды из набора команд MS-DOS или установленной ОС семейства Windows, в последнем случае команда выполняется в фоновом режиме.
Выведем блокнот Windows для редактирования m-файла:
dos 'notepad myfile.m'
или
[s w]=dos('notepad myfile.m')
s=0, когда команда выполнена успешно, в противном случае s=1, w содержит сообщение DOS.
Общение с Интернетом из командной строки
Для общения с Интернетом служит команда web: О web спецификация — дает связь с Web-сервером. [ Те же команды web с параметром —browser (например, web http://www.mathworks.com —browser) вызывают вместо браузера помощи MATLAB браузер HTML, установленный в ваших настройках операционной системы Windows как браузер по умолчанию. В UNIX (Linux) браузер, вызываемый командой web с параметром —browser, определяется командой MATLAB [doccmd.options, ] - docopt, где doccmd — наименование браузера, например netscape, вместо options можно подставить параметры браузера. Можно также отредактировать файл docopt в папке matlabr!2/toolbox/local и указать в нем браузер по умолчанию. — Примеч. ред. ] Примеры применения команды web:
web http://www.mathworks.com — загружает Web-страницу MathWorks Web [ Команда support сразу открывает страницу технической поддержки MATLAB. — Примеч. ред. ] в браузер помощи; [ При запуске с параметром —browser можно ввести URL в виде www.mathworks.com, но сайт будет открыт в браузере ОС по умолчанию. — Примеч. ред. ]
web mailto:email_address — использует программу для отправки электронной почты, установленную по умолчанию в настройках операционной системы;
все формы команды web могут использоваться в функциях. Например, функция s = web('www.mathworks.com', ' -browser') запускает браузер Интернета операционной системы [ Для UNIX и Linux браузера Интернета можно задавать из MATLAB. — Примеч. ред. ] и выдает s=0, если браузер запущен, даже если браузер Интернета открывает страницу в автономном режиме (off-line) или не может ее найти, s=l, если браузер Интернет не был обнаружен, s=2, если браузер был обнаружен, но не был запущен.
Такой выход в Интернет иначе чем экзотикой назвать трудно, благо в Windows 95/ 98/Me/2000/NT4 есть куда более простые способы выхода в Интернет. Отнесем эту возможность к числу приятных мелочей [ Необходимых для работы систем, работающих в реальном масштабе времени. — Примеч. ред. ], которых в MATLAB очень много. Например, приятной мелочью является также собственный web-сервер MATLAB (только в версиях для Microsoft Windows NT4/2000, Linux и Sun Solaris). Доступ к нему может быть ограничен только компьютерами, перечисленными в списке файла hosts.conf.
Некоторые другие команды
Есть еще несколько команд для общения с операционными системами:
delete name — стирание файла с заданным именем name (имя записывается по правилам операционной системы);
getenvCname') — возвращает значение переменной 'name' среды окружения.
Пример:
» getenv('temp')
ans =
C:\TEMP
Команда tempdir дает информацию о папке для хранения временных файлов:
» tempdir
ans =
С:\ТЕМР\ ...
Еще одна команда — computer — используется в двух формах:
» computer
ans =
PCWIN
и
» [С S]=computer
С = PCWIN
S =
2.1475е+009
Во втором случае помимо сообщения о типе компьютера выводится максимально возможное число элементов в массивах. Оно зависит от объема памяти и свойственных операционной системе ограничений (приведенные данные получены при использовании компьютера с процессором Pentium II, емкостью ОЗУ 128 Мбайт и установленной ОС Windows 98).
Для установки типа терминала может использоваться еще одна команда — terminal. Возможные типы терминалов можно найти в справке по этой команде, выводимой командой help terminal. На этом рассмотрение команд прямого общения с операционными системами можно считать законченным.
Что нового мы узнали?
В этом уроке мы научились:
Работать с меню, панелями инструментов и буфером обмена.
Использовать браузеры рабочего пространства и файловой системы.
Запускать примеры приложения Simulink.
Осуществлять печать документов.
Работать с редактором/отладчиком m-файлов.
Различать файлы-сценарии и файлы-функции.
Работать с окнами графики.
Использовать команды взаимодействия MATLAB с операционной системой и Интернетом.
Урок №6.
Обычная графика MATLAB
Построение графиков точками и отрезками прямых
Графики в логарифмическоми полулогарифмическом масштабе
Гистограммы и диаграммы
Графики специальных типов
Создание массивов данных для трехмерной графики
Построение графиков трехмерных поверхностей, сечений и контуров
Средства управления подсветкой и обзором фигур
Средства оформления графиков
Одновременный вывод нескольких графиков
Управление цветовой палитрой
Окраска трехмерных поверхностей
Двумерные и трехмерные графические объекты
Одно из достоинств системы MATLAB — обилие средств графики, начиная от команд построения простых графиков функций одной переменной в декартовой системе координат и кончая комбинированными и презентационными графиками с элементами анимации, а также средствами проектирования графического пользовательского интерфейса (GUI). Особое внимание в системе уделено трехмерной графике с функциональной окраской отображаемых фигур и имитацией различных световых эффектов.
Описанию графических функций и команд посвящена обширная электронная книга в формате PDF. Объем материала по графике настолько велик, что помимо вводного описания графики в уроке 3 в этой книге даются еще два урока по средствам обычной и специальной графики. Они намеренно предшествуют систематизированному описанию большинства функций системы MATLAB, поскольку графическая визуализация вычислений довольно широко используется в последующих материалах книги. При этом графические средства системы доступны как в командном режиме вычислений, так и в программах. Этот урок рекомендуется изучать выборочно или выделить на него не менее 4 часов.
Построение графиков отрезками прямых
Функции одной переменной у(х) находят широкое применение в практике математических и других расчетов, а также в технике компьютерного математического моделирования. Для отображения таких функций используются графики в декартовой (прямоугольной) системе координат. При этом обычно строятся две оси — горизонтальная X и вертикальная Y, и задаются координаты х и у, определяющие узловые точки функции у(х). Эти точки соединяются друг с другом отрезками прямых, т. е. при построении графика осуществляется линейная интерполяция для промежуточных точек. Поскольку MATLAB — матричная система, совокупность точек у(х) задается векторами X и Y одинакового размера.
Команда plot служит для построения графиков функций в декартовой системе координат. Эта команда имеет ряд параметров, рассматриваемых ниже.
plot (X, Y) — строит график функции у(х), координаты точек (х, у) которой берутся из векторов одинакового размера Y и X. Если X или Y — матрица, то строится семейство графиков по данным, содержащимся в колонках матрицы.
Приведенный ниже пример иллюстрирует построение графиков двух функций — sin(x) и cos(x), значения функции которых содержатся в матрице Y, а значения аргумента х хранятся в векторе X:
» х=[0 12345];
» Y=[sin(x):cos(x)];
» plot(x.Y)
На рис. 6.1 показан график функций из этого примера. В данном случае отчетливо видно, что график состоит из отрезков, и если вам нужно, чтобы отображаемая функция имела вид гладкой кривой, необходимо увеличить количество узловых точек. Расположение их может быть произвольным.
Рис. 6.1. Графики двух функций в декартовой системе координат
plot(Y) — строит график у(г), где значения у берутся из вектора Y, a i представляет собой индекс соответствующего элемента. Если Y содержит комплексные элементы, то выполняется команда plot (real (Y). imag(Y)). Во всех других случаях мнимая часть данных игнорируется.
Вот пример использования команды plot(Y):
» х=2*pi:0.02*pi:2*pi;
» y=sin(x)+i*cos(3*x);
» plot(y)
Соответствующий график показан на рис. 6.2.
Рис. 6.2. График функции, представляющей вектор Y с комплексными элементами
plot(X.Y.S) — аналогична команде plot(X.Y), но тип линии графика можно задавать с помощью строковой константы S.
Значениями константы S могут быть следующие символы.
Y |
Желтый |
М |
Фиолетовый |
С |
Голубой |
R |
Красный |
G |
Зеленый |
В |
Синий |
W |
Белый |
К |
Черный |
|
Точка |
0 |
Окружность |
X |
Крест |
+ |
Плюс |
* |
Звездочка |
S |
Квадрат |
D |
Ромб |
V |
Треугольник (вниз) |
А |
Треугольник (вверх) |
< |
Треугольник (влево) |
> |
Треугольник (вправо) |
Р |
Пятиугольник |
H |
Шестиугольник |
- |
Сплошная |
|
Двойной пунктир |
-. |
Штрих-пунктир |
-- |
Штриховая |
Таким образом, с помощью строковой константы S можно изменять цвет линии, представлять узловые точки различными отметками (точка, окружность, крест, треугольник с разной ориентацией вершины и т. д.) и менять тип линии графика.
рlot (X1. Y1, S1, Х2, Y2. S2. ХЗ. Y3, S3,...) — эта команда строит на одном графике ряд линий, представленных данными вида (X..Y..S.), где X. и Y. — векторы или матрицы, a S. — строки. С помощью такой конструкции возможно построение, например, графика функции линией, цвет которой отличается от цвета узловых точек. Так, если надо построить график функции линией синего цвета с красными точками, то вначале надо задать построение графика с точками красного цвета (без линии), а затем графика только линии синего цвета (без точек).
При отсутствии указания на цвет линий и точек он выбирается автоматически из таблицы цветов (белый исключается). Если линий больше шести, то выбор цветов повторяется. Для монохромных систем линии выделяются стилем.
Рассмотрим пример построения графиков трех функций с различным стилем представления каждой из них:
» x=-2*pi:0.1*pi:2*pi;
» yl=sin(x);
» y2=sin(x).^2;
» y3=sin(x).^3:
» plot(x.yl.'-m',x,y2.'-.+r'.х.у3,'--ok')
Графики функций для этого примера показаны на рис. 6.3.
Рис. 6.3. Построение графиков трех функций на одном рисунке с разным стилем линий
Здесь график функции yl строится сплошной фиолетовой линией, график у2 строится штрих пунктирной линией с точками в виде знака «плюс» красного цвета, а график уЗ строится штриховой линией с кружками черного цвета. К сожалению, на черно-белых рисунках этой книги вместо разных цветов видны разные градации серого цвета.
Графики в логарифмическом масштабе
Для построения графиков функций со значениями х и у, изменяющимися в широких пределах, нередко используются логарифмические масштабы. Рассмотрим команды, которые используются в таких случаях.
loglogx(...) — синтаксис команды аналогичен ранее рассмотренному для функции plot(...). Логарифмический масштаб используется для координатных осей X и У. Ниже дан пример применения данной команды:
» x=logspace(-1,3);
» loglog(x.exp(x)./x)
» grid on
На рис. 6.4 представлен график функции ехр(х)/х в логарифмическом масштабе. Обратите внимание на то, что командой grid on строится координатная сетка.
Неравномерное расположение линий координатной сетки указывает на логарифмический масштаб осей.
Рис. 6.4. График функции ехр(x)/x в логарифмическом масштабе
Графики в полулогарифмическом масштабе
В некоторых случаях предпочтителен полулогарифмический масштаб графиков, когда по одной оси задается логарифмический масштаб, а по другой — линейный.
Для построения графиков функций в полулогарифмическом масштабе используются следующие команды:
semilogx(...) — строит график функции в логарифмическом масштабе (основание 10) по оси X и линейном по оси Y;
semilоgу (...) — строит график функции в логарифмическом масштабе по оси Y и линейном по оси X.
Рис. 6.5. График экспоненты в полулогарифмическом масштабе
Запись параметров (...) выполняется по аналогии с функцией plot(...). Ниже приводится пример построения графика экспоненциальной функции:
» х=0:0.5:10;
» semilogy(x.exp(x))
График функции при логарифмическом масштабе по оси У представлен на рис. 6.5.
Нетрудно заметить, что при таком масштабе график экспоненциальной функции выродился в прямую линию. Масштабной сетки теперь уже нет.
Столбцовые диаграммы
Столбцовые диаграммы широко используются в литературе, посвященной финансам и экономике, а также в математической литературе. Ниже представлены команды для построения таких диаграмм.
bar(x, Y) — строит столбцовый график элементов вектора Y (или группы столбцов для матрицы Y) со спецификацией положения столбцов, заданной значениями элементов вектора х, которые должны идти в монотонно возрастающем порядке;
bar(Y) — строит график значений элементов матрицы Y так же, как указано выше, но фактически для построения графика используется вектор х=1:m;
barU.Y,WIDTH) или BAR(Y,WIDTH) — команда аналогична ранее рассмотренным, но со спецификацией ширины столбцов (при WIDTH > 1 столбцы в одной и той же позиции перекрываются). По умолчанию задано WIDTH = 0.8.
Возможно применение этих команд и в следующем виде: bаг(.... 'Спецификация') для задания спецификации графиков, например типа линий, цвета и т. д., по аналогии с командой plot. Спецификация 'stacked' задает рисование всех n столбцов в позиции m друг на друге.
Пример построения столбцовой диаграммы матрицы размером 12x3 приводится ниже:
» % Столбцовая диаграмма с вертикальными столбцами
» subplot(2.1.1). bar(rand(12.3).'stacked'), colormap(cool)
На рис. 6.6 представлен полученный график.
Рис. 6.6. Пример построения диаграммы с вертикальными столбцами
Помимо команды bar(...) существует аналогичная ей по синтаксису команда barh(...), которая" строит столбцовые диаграммы с горизонтальным расположением столбцов. Пример, приведенный ниже, дает построения, показанные на рис. 6.7.
» subplot(2.1.1). barh(rand(5.3).'stacked'), colormap(cool)
Рис. 6.7. Пример построения столбцовой диаграммы с горизонтальными столбцами
Какое именно расположение столбцов выбрать, зависит от пользователя, использующего эти команды для представления своих данных.
Построение гистограмм
Классическая гистограмма характеризует числа попаданий значений элементов вектора Y в М интервалов с представлением этих чисел в виде столбцовой диаграммы. Для получения данных для гистограммы служит функция hist, записываемая в следующем виде:
N=hist(Y) — возвращает вектор чисел попаданий для 10 интервалов, выбираемых автоматически. Если Y — матрица, то выдается массив данных о числе попаданий для каждого из ее столбцов;
N=hist(Y,M) — аналогична вышерассмотренной, но используется М интервалов (М — скаляр);
N=hist(Y.X) — возвращает числа попаданий элементов вектора Y в интервалы, центры которых заданы элементами вектора X;
[N,X]=HIST(...) — возвращает числа попаданий в интервалы и данные о центрах интервалов.
Команда hist(...) с синтаксисом, аналогичным приведенному выше, строит график гистограммы. В следующем примере строится гистограмма для 1000 случайных чисел и выводится вектор с данными о числах их попаданий в интервалы, заданные вектором х:
» х=-3:0.2:3;
» y=randn(1000,1);
» hist(y,x)
» h=hist(y.x)
h =
Columns 1 through 12
0 0 3 7 8 9 11 23 33 43 57 55
Columns 13 through 24
70 62 83 87 93 68 70 65 41 35 27 21
Columns 25 through 31
12 5 6 3 2 1 0
Построенная гистограмма показана на рис. 6.8.
Рис. 6.8. Пример построения гистограммы
Нетрудно заметить, что распределение случайных чисел близко к нормальному закону. Увеличив их количество, можно наблюдать еще большее соответствие этому закону.
Лестничные графики — команды stairs
Лестничные графики визуально представляют собой ступеньки с огибающей, представленной функцией у(х). Такие графики используются, например, для отображения процессов квантования функции у(х), представленной рядом своих отсчетов. При этом в промежутках между отсчетами значения функции считаются постоянными и равными величине последнего отсчета.
Для построения лестничных графиков в системе MATLAB используются команды группы stairs:
stairs(Y) — строит лестничный график по данным вектора Y;
stairs(X.Y) — строит лестничный график по данным вектора Y с координатами х переходов от ступеньки к ступеньке, заданными значениями элементов вектора X;
stairs(...,S) — аналогична по действию вышеописанным командам, но строит график линиями, стиль которых задается строками S.
Следующий пример иллюстрирует построение лестничного графика:
» х=0:0.25:10;
» stairs(x,x. ^ 2);
Результат построения представлен на рис. 6.9.
Рис. 6.9. Лестничный график функции х ^ 2
Обратите внимание на то, что отсчеты берутся через равные промежутки по горизонтальной оси. Если, к примеру, отображается функция времени, то stairs имеет вид квантованной по времени функции.
Функция H=stairs(X,Y) возвращает вектор дескрипторов графических объектов.
Функция
[XX,YY]=stairs(X.Y)
сама по себе график не строит, а возвращает векторы XX и YY, которые позволяют построить график с помощью команды plot(XX.YY).
Графики с зонами погрешности
Если данные для построения функции определены с заметной погрешностью, то используют графики функций типа errorbar с оценкой погрешности каждой точки путем ее представления в виде буквы I, высота которой соответствует заданной погрешности представления точки. Команда errorbar используется в следующем виде:
errorbar(X,Y,L.U) — строит график значений элементов вектора Y в зависимости от данных, содержащихся в векторе X, с указанием нижней и верхней границ значений, заданных в векторах L и U;
errorbar(X,Y,E) Herrorbar(Y.E) —строит графики функции Y(X) с указанием этих границ в виде [Y-E Y+E], где Е — погрешность;
errorbar(..., 'LineSpec') — аналогична описанным выше командам, но позволяет строить линии со спецификацией 'LineSpec', аналогичной спецификации, примененной в команде plot.
Следующий пример иллюстрирует применение команды errorbar:
» х=2:0.1:2:
» y=erf(x):
» е=rand(size(x))/10;
» errorbar(x.y.e)
Построенный график показан на рис. 6.10.
Рис. 6.10. График функции erf(x) с зонами погрешности
Функция, записываемая в виде H=ERRORBAR(...), возвращает вектор дескрипторов графических объектов.
График дискретных отсчетов функции
Еще один вид графика функции у(х) — ее представление дискретными отсчетами. Этот вид графика применяется, например, при описании квантования сигналов. Каждый отсчет представляется вертикальной чертой, увенчанной кружком, причем высота черты соответствует y-координате точки.
Рис. 6.11. График дискретных отсчетов функции
Для построения графика подобного вида используются команды stem(...):
stem(X.Y) — строит график отсчетов с ординатами в векторе Y и абсциссами в векторе X;
stem(.... 'LINESPEC') — дает построения, аналогичные ранее приведенным командам, но со спецификацией линий 'LINESPEC', подобной спецификации, приведенной для функции plot;
stem(Y) — строит график функции с ординатами в векторе Y в виде отсчетов;
stem(.... 'filled') — строит график функции с закрашенными маркерами. Следующий пример иллюстрирует применение команды stem:
» х = 0:0.1:4;
» у = sin(x. ^ 2).*exp(-x):
» stem(x.y)
Полученный для данного примера график показан на рис. 6.11.
Функция H=STEM(...) строит график и возвращает вектор дескрипторов графических объектов.
Графики в полярной системе координат
В полярной системе координат любая точка представляется как конец радиус-вектора, исходящего из начала системы координат, имеющего длину RHO и угол ТНЕТА. Для построения графика функции RHO(THETA) используются приведенные ниже команды. Угол ТНЕТА обычно меняется от 0 до 2*pi. Для построения графиков функций в полярной системе координат используются команды типа polar(...):
polarCTHETA, RHO) — строит график в полярной системе координат, представляющий собой положение конца радиус-вектора с длиной RHO и углом ТНЕТА;
polarCTHETA,RHO.S) — аналогична предыдущей команде, но позволяет задавать стиль построения с помощью строковой константы S по аналогии с командой plot.
Рис. 6.12 демонстрирует результат выполнения команд:
» t=0:pi/50:2*pi;
» polar(t,sin(5*t))
Рис. 6.12. График функции в полярной системе координат
Графики функций в полярных координатах могут иметь весьма разнообразный вид, порой напоминая такие объекты природы, как снежинки или кристаллики льда на стекле. Вы можете сами попробовать построить несколько таких графиков — многие получают от этого удовольствие.
Угловые гистограммы
Угловые гистограммы находят применение в индикаторах радиолокационных станций, для отображения «роз» ветров и при построении других специальных графиков. Для этого используется ряд команд типа rose(...):
rose(THETA) — строит угловую гистограмму для 20 интервалов по данным вектора ТНЕТА;
rose(ТНЕТА, N) — строит угловую гистограмму для N интервалов в пределах угла от 0 до 2*рi по данным вектора ТНЕТА;
rose(ТНЕТА. X) — строит угловую гистограмму по данным вектора ТНЕТА со спецификацией интервалов, указанной в векторе X.
Следующий пример иллюстрирует применение команды rose: » rose(1:100.12)
На рис. 6.13 показан пример построения графика командой rose.
Рис. 6.13. Угловая гистограмма
Функция H=rose(...) строит график и возвращает вектор дескрипторов графических объектов, а функция [T,R]=rose(...) сама по себе график не строит, но возвращает векторы Т и R, которые нужны команде polar (Т. R) для построения подобной гистограммы.
Графики векторов
Иногда желательно представление ряда радиус-векторов в их обычном виде, то есть в виде стрелок, исходящих из начала координат и имеющих угол и длину, определяемые действительной и мнимой частью комплексных чисел, представляющих эти векторы. Для этого служит группа команд compass:
compass(U.V) — строит графики радиус-векторов с компонентами (U.V), представляющими действительную и мнимую части каждого из радиус-векторов;
compass (Z) — эквивалентно compass (real (Z), imag(Z));
compass(U.V,LINESPEC) и Compass(Z.LINESPEC) — аналогичны представленным выше командам, но позволяют задавать спецификацию линий построения LINESPEC, подобную описанной для команды plot.
В следующем примере показано использование команды compass:
» Z=[-1+2i,-2-3i.2+3i.5+2i];
» compass(Z)
Построенный в этом примере график представлен на рис. 6.14.
Рис. 6.14. Построение радиус-векторов
Функция H=COMPASS(...) строит график и возвращает дескрипторы графических объектов.
График проекций векторов на плоскость
Иногда полезно отображать комплексные величины вида z = х + yi в виде проекции радиус-вектора на плоскость. Для этого используется семейство графических команд класса feather:
feather(U.V) — строит график проекции векторов, заданных компонентами U и V, на плоскость;
feather (Z) — для вектора Z с комплексными элементами дает построения, аналогичные feather(REAL(Z),IMAG(Z));
feather(..., S) — дает построения, описанные выше, но со спецификацией линий, заданной строковой константой S по аналогии с командой plot.
Пример применения команды feather:
» x=0:0.1*pi:3*pi;
»y=0.05+i;
» z=exp(x*y);
» feather(z)
График, построенный в этом последнем примере, показан на рис. 6.15.
Рис. 6.15. График, построенный функцией feather
Функция Н=РЕАТНЕR(...)строит график и возвращает вектор дескрипторов графических объектов.
Контурные графики
Контурные графики служат для представления на плоскости функции двух переменных вида z(x, у) с помощью линий равного уровня. Они получаются, если трехмерная поверхность пересекается рядом плоскостей, расположенных параллельно друг другу. При этом контурный график представляет собой совокупность спроецированных на плоскость (х, у) линий пересечения поверхности г(х, у) плоскостями.
Для построения контурных графиков используются команды contour:
contour(Z) — строит контурный график по данным матрицы Z с автоматическим заданием диапазонов изменения х и у;
contour(X.Y.Z) — строит контурный график по данным матрицы Z с указанием спецификаций для X и Y;О contour(Z.N) и contour(X.Y.Z.N) — дает построения, аналогичные ранее описанным командам, с заданием N линий равного уровня (по умолчанию N=10);
contour(Z, V) и contour(X,Y,Z,V) — строят линии равного уровня для высот, указанных значениями элементов вектора V;
contour(Z,[v v]) или contour(X.Y,Z.[v v]) — вычисляет одиночный контур для уровня v;
[С.Н] = contour (...) — возвращает дескрипторы — матрицу С и вектор-столбец Н. Они могут использоваться как входные параметры для команды clabel;
contourC... 'LINESPEC') — позволяет использовать перечисленные выше команды с указанием спецификации линий, которыми идет построение.
Пример построения контурного графика поверхности, заданной функций peaks:
» z=peaks(27);
» contour(z,15)
Построенный в этом примере график показан на рис. 6,16. Заметим, что объект — функция peaks — задан в системе в готовом виде.
Рис. 6.16. Контурный график, построенный с помощью команды contour
Графики этого типа часто используются в топографии для представления на листе бумаги (как говорят математики — на плоскости) объемного рельефа местности. Для оценки высот контурных линий используется их функциональная окраска.
Создание массивов данных для трехмерной графики
Трехмерные поверхности обычно описываются функцией двух переменных z(x, у). Специфика построения трехмерных графиков требует не просто задания ряда значений х и у, то есть векторов х и у. Она требует определения для X и Y двумерных массивов — матриц. Для создания таких массивов служит функция meshgrid. В основном она используется совместно с функциями построения графиков трехмерных поверхностей. Функция meshgrid записывается в следующих формах:
[X.Y] = meshgrid(x) — аналогична [X.Y] = meshgrid(x.x);
[X.Y.Z] = meshgrid(x.y,z) — возвращает трехмерные массивы, используемые для вычисления функций трех переменных и построения трехмерных графиков;
[X.Y] = meshgrid(x.y) — преобразует область, заданную векторами х и у, в массивы X и Y, которые могут быть использованы для вычисления функции двух переменных и построения трехмерных графиков. Строки выходного массива X являются копиями вектора х; а столбцы Y — копиями вектора у.
Пример:
» [X.Y] = meshgnd(l:4.13:17)
X =
|
|||||
|
1 |
2 |
3 |
4 |
|
|
1 |
2 |
3 |
4 |
|
|
1 |
2 |
3 |
4 |
|
|
1 |
2 |
3 |
4 |
|
|
1 |
2 |
3 |
4 |
|
|
Y= |
|
|
|
|
|
13 |
13 |
13 |
13 |
|
|
14 |
14 |
14 |
14 |
|
|
15 |
15 |
15 |
15 |
|
|
16 |
16 |
16 |
16 |
|
|
17 |
17 |
17 |
17 |
|
Приведем еще один пример применения функции meshgrid:
» [X.Y] = meshgrid(-2:.2:2. -2:.2:2);
Такой вызов функции позволяет задать опорную плоскость для построения трехмерной поверхности при изменении дгиг/от-2до2с шагом 0.2. Дополнительные примеры применения функции meshgrid будут приведены далее при описании соответствующих команд. Рекомендуется ознакомиться с также командами surf и slice (ломтик).
Функция ndgrid является многомерным аналогом функции meshgrid:
[Х1.Х2.ХЗ,...] = ndgrid(xl,x2,x3....) — преобразует область, заданную векторами xl.x2.x3..., в массивы Х1.Х2.ХЗ..., которые могут быть использованы для вычисления функций нескольких переменных и многомерной интерполяции, i-я размерность выходного массива xi является копией вектора xi;
[XI.Х2....] = ndgrid(x) - аналогична [XI.Х2....] = ndgrid(x,x,...). Пример применения функции ndgrid представлен ниже:
»[Х1.'Х2] = ndgrid(-2:.2:2. -2:.2:2);
»Z = XI .* ехр(-Х1."2 - Х2.*2);
»mesh(Z)
Рекомендуем читателю опробовать действие этого примера.
Графики поля градиентов quiver
Для построения графиков полей градиента служат команды quiver:
quiver(X.Y.U.V) — строит график поля градиентов в виде стрелок для каждой пары элементов массивов X и Y, причем элементы массивов U и V указывают направление и размер стрелок;
qui ver(U, V) — строит векторы скорости в равнорасположенных точках на плоскости (х, у);
quiver(U,V,S) или quiver(X,Y.U,V,S) — автоматически масштабирует стрелки по сетке и затем вытягивает их по значению S. Используйте S=0, чтобы построить стрелки без автоматического масштабирования;
quiver(...,LINESPEC) — использует для векторов указанный тип линии. Указанные в LINESPEC маркеры рисуются у оснований, а не на концах векторов. Для отмены любого вида маркера используйте спецификацию '.'. Спецификации линий, цветов и маркеров были подробно описаны в разделе, посвященном команде plot;
quiver(.... 'filled') — дает график с закрашенными маркерами;
H=quiver(...) — строит график и возвращает вектор дескрипторов. Ниже представлен пример применения команды quiver:
» х = -2:.2:2; у = -1:.2:1;
» [хх.уу] = meshgrid(x,y);
» zz = хх.*ехр(-хх. х 2-уу.~2);
» [рх.ру] = gradient(zz..2..2);
» quiver(x.y.px.py,2);
Построенный в этом примере график показан на рис. 6.17.
Рис. 6.17. Пример построения графика поля градиентов
Нетрудно заметить, что представление поля градиентов стрелками дает весьма наглядное представление о линиях поля, указывая области, куда эти линии впадают и откуда они исходят.
Построение графиков поверхностей
Команда plot3(...) является аналогом команды plot (...), но относится к функции двух переменных z(x, у). Она строит аксонометрическое изображение трехмерных поверхностей и представлена следующими формами:
plot3(x.y,z) — строит массив точек, представленных векторами х, у и z, соединяя их отрезками прямых. Эта команда имеет ограниченное применение;
plot3(X,Y,Z), где X, Y и Z — три матрицы одинакового размера, строит точки с координатами X(i.:), Y(i,:) и Z(i,:) и соединяет их отрезками прямых.
Ниже дан пример построения трехмерной поверхности, описываемой функцией
z(х.у)=х^2+у^2;
» [X.Y]=meshgrid([-3:0.15:3]);
» Z=X. ^ 2+Y.^2;
» plot3(X.Y.Z)
График этой поверхности показан на рис. 6.18.
Рис. 6.18. График поверхности, построенный линиями
plot3 (X. Y, Z, S) — обеспечивает построения, аналогичные рассмотренным ранее, но со спецификацией стиля линий и точек, соответствующей спецификации команды plot. Ниже дан пример применения этой команды для построения поверхности кружками:
» [X.Y]=meshgrid([-3:0.15:3]);
» Z=X. ^ 2+Y.^2;
» plot3(X,Y,Z.'o')
График поверхности, построенный кружками, показан на рис. 6.19.
Рис. 6.19. График поверхности, построенный разноцветными кружками
plot3(xl ,yl.zl, sl.х2,у2.z2. s2. хЗ,уЗ.z3,s3,...)— строит на одном рисунке графики нескольких функций zl(xl ,yl), z2(x2,y2) и т. д. со спецификацией линий и маркеров каждой из них.
Пример применения последней команды дан ниже:
» [X.Y]=meshgrid([-3:0.15:3]);
» Z=X. ^ 2+Y.^2;
» plot3(X,Y,Z,'-k',Y,X,Z,'-k ' )
График функции, соответствующей последнему примеру, представлен на рис. 6.20.
Рис. 6.20. График функции в сетчатом представлении
В данном случае строятся два графика одной и той же функции с взаимно перпендикулярными образующими линиями. Поэтому график имеет вид сетки без окраски ее ячеек (напоминает проволочный каркас фигуры).
Сетчатые 3D-графики с окраской
Наиболее представительными и наглядными являются сетчатые графики поверхностей с заданной или функциональной окраской. В названии их команд присутствует слово mesh. Имеются три группы таких команд. Ниже приведены данные о наиболее полных формах этих команд. Наличие более простых форм можно уточнить, используя команду help Имя, где Имя — имя соответствующей команды.
mesh(X,Y,Z,C) — выводит в графическое окно сетчатую поверхность Z(X.Y) с цветами узлов поверхности, заданными массивом С;
mesh(X.Y.Z) — аналог предшествующей команды при C=Z. В данном случае используется функциональная окраска, при которой цвет задается высотой поверхности.
Возможны также формы команды mesh(x,y.Z), mesh(x.y.Z,C), mesh(Z) и mesh(Z.C).
Функция mesh возвращает дескриптор для объекта класса surface. Ниже приводится пример применения команды mesh:
» [X.Y]=meshgrid([-3:0.15:3]);
» Z=X.^2+Y.^2;
» mesh(X,Y,Z)
На рис. 6.21 показан график поверхности, созданной командой mesh(X.Y.Z). Нетрудно заметить, что функциональная окраска линий поверхности заметно усиливает наглядность ее представления.
Рис. 6.21. График поверхности, созданный командой mesh(X,Y,Z)
MATLAB имеет несколько графических функций, возвращающих матричный образ поверхностей. Например, функция peaks(N) возвращает матричный образ поверхности с рядом пиков и впадин. Такие функции удобно использовать для проверки работы графических команд трехмерной графики. Для упомянутой функции peaks можно привести такой пример:
» z=peaks(25);
» mesh(z);
График поверхности, описываемой функцией peaks, представлен на рис. 6.22.
Рис. 6.22. График поверхности, описываемой функцией peaks
Рекомендуется ознакомиться с командами и функциями, используемыми совместно с описанными командами: axis, caxis, colormap, hold, shading и view.
Сетчатые 3D-графики с проекциями
Иногда график поверхности полезно объединить с контурным графиком ее проекции на плоскость, расположенным под поверхностью.
Для этого используется команда meshc:
meshc(...) — аналогична mesh(...), но помимо графика поверхности дает изображение ее проекции в виде линий равного уровня (графика типа contour).
Ниже дан пример применения этой команды:
» [X.Y]=meshgrid([-3:0.15:3]);
» Z=X.^2+Y.^2;
» meshc(X,Y,Z)
Построенный график показан на рис. 6.23.
Рис. 6.23. График поверхности и ее проекции на расположенную ниже плоскость
Нетрудно заметить, что график такого типа дает наилучшее представление об особенностях поверхности.
Построение поверхности столбцами
Еще один тип представления поверхности, когда она строится из многочисленных столбцов, дают команды класса meshz:
meshz(...) — аналогична mesh(...), но строит поверхность как бы в виде столбиков. Следующий пример иллюстрирует применение команды mesh:
» [X.Y]=meshgrid([-3:0.15:3]);
» Z=X.^2+Y.^2;
» meshz(X,Y,Z)
Столбцовый график поверхности показан на рис. 6.24.
Графики такого типа используются довольно редко. Возможно, он полезен архитекторам или скульпторам, поскольку дает неплохое объемное представление о поверхностях.
Рис. 6.24. Построение поверхности столбцами
Построение поверхности с окраской
Особенно наглядное представление о поверхностях дают сетчатые графики, использующие функциональную закраску ячеек. Например, цвет окраски поверхности z(x, у) может быть поставлен в соответствие с высотой z поверхности с выбором для малых высот темных тонов, а для больших — светлых. Для построения таких поверхностей используются команды класса surf (...):
surf (X, Y, Z. С) — строит цветную параметрическую поверхность по данным матриц X, Y и Z с цветом, задаваемым массивом С;
surf(X.Y.Z) — аналогична предшествующей команде, где C=Z, так что цвет задается высотой той или иной ячейки поверхности;
surf(x.y.Z) и surf(x.y.Z.C) с двумя векторными аргументами х и у — векторы х и у заменяют первых два матричных аргумента и должны иметь длины length(x)=n и length(y)=m, где [m.n]=size(Z). В этом случае вершины областей поверхности представлены тройками координат (x(j), yd), Z(1,j)). Заметим, что х соответствует столбцам Z, а у соответствует строкам;
surf(Z) и surf(Z.C) используют х = 1:n и у = 1:m. В этом случае высота Z — однозначно определенная функция, заданная геометрически прямоугольной сеткой;
h=surf (...) —строит поверхность и возвращает дескриптор объекта класса surface.
Команды axis, caxis, color-map, hold, shading и view задают координатные оси и свойства поверхности, которые могут использоваться для большей эффектности показа поверхности или фигуры.
Ниже приведен простой пример построения поверхности — параболоида:
» [X.Y]=meshgrid([-3:0.15:3]);
» Z=X.^2+Y.^2;
» Surf(X,Y,Z)
Соответствующий этому примеру график показан на рис. 6.25.
Рис. 6.25. График параболоида с функциональной окраской ячеек
Можно заметить, что благодаря функциональной окраске график поверхности гораздо более выразителен, чем при построениях без такой окраски, представленных ранее (причем даже в том случае, когда цветной график печатается в черно-белом виде).
В следующем примере используется функциональная окраска оттенками серого цвета с выводом шкалы цветовых оттенков:
» [X,Y]=meshgrid([-3:0.1:3]);
» Z=sin(X)./(X.^2+Y.^2+0.3);
» surf(X.Y.Z)
» colormap(gray)
» shading interp
» colorbar
В этом примере команда colormap(gray) задает окраску тонами серого цвета, а команда shading Interp обеспечивает устранение изображения сетки и задает интерполяцию для оттенков цвета объемной поверхности. На рис. 6.26 показан вид графика, построенного в этом примере.
Рис. 6.26. График поверхности с функциональной окраской серым цветом
Обычно применение интерполяции для окраски придает поверхностям и фигурам более реалистичный вид, но фигуры каркасного вида дают более точные количественные данные о каждой точке.
Построение поверхности и ее проекции
Для повышения наглядности представления поверхностей можно использовать дополнительный график линий равного уровня, получаемый путем проецирования поверхности на опорную плоскость графика (под поверхностью). Для этого используется команда surf с:
surfc(...) — аналогична команде surf, но обеспечивает дополнительное построение контурного графика проекции фигуры на опорную плоскость.
Пример применения команды surf с приводится ниже:
» [X.Y]=meshgrid([-3:0.1:3]);
» Z=sin(X)./(X.^2+Y.^2+0.3);
» surfc(X,Y,Z)
На рис. 6.27 показаны графики, построенные в данном примере.
Рис. 6.27. График поверхности и ее проекции на опорную плоскость
Рассмотрим еще один пример применения команды surf с, на этот раз для построения поверхности, описываемой функцией peaks, с применением интерполяции цветов и построением цветовой шкалы:
» [X.Y]=meshgrid([-3:0.1:3]);
» Z=peaks(X,Y);
» surfc(X,Y,Z)
» shading interp
» colorbar
Рис. 6.28 показывает график, построенный в этом примере. И здесь нетрудно заметить, что графики сложных поверхностей с интерполяцией цветовых оттенков выглядят более реалистичными, чем графики сетчатого вида и графики без интерполяции цветов.
Рис. 6.28. График функции peaks с проекцией и шкалой цветов
Построение освещенной поверхности
Пожалуй, наиболее реалистичный вид имеют графики поверхностей, в которых имитируется освещение от точечного источника света, расположенного в заданном месте координатной системы. Графики имитируют оптические эффекты рассеивания, отражения и зеркального отражения света. Для получения таких графиков используется команда surf 1:
surfl(...) — аналогична команде surf (...), но строит график поверхности с подсветкой от источника света;
surfl (Z.S) или surfl(X,Y,Z,S) — строит графики поверхности с подсветкой от источника света, положение которого в системе декартовых координат задается вектором S=[Sx,Sy.Sz], а в системе сферических координат — вектором S=[AZ.EL];
surfl (..., 'light') — позволяет при построении задать цвет подсветки с помощью объекта Light;
surfl (..., 'cdata') — при построении имитирует эффект отражения;
surfl(X,Y,Z,S.K) — задает построение поверхности с параметрами, заданными вектором K=[ka,kd,ks.spread], где ka — коэффициент фоновой подсветки, kd — коэффициент диффузного отражения, ks — коэффициент зеркального отражения и spread — коэффициент глянцевитости;
H=surf 1 (...) — строит поверхность и возвращает дескрипторы поверхности и источников света.
По умолчанию вектор S задает углы азимута и возвышения в 45°. Используя команды cla, hold on, view(AZ,EL), surfl (...) и hold off, можно получить дополнительные возможности управления освещением. Надо полагаться на упорядочение точек в X, Y, и Z матрицах, чтобы определить внутреннюю и внешнюю стороны параметрических поверхностей. Попробуйте транспонировать матрицы и использовать surfHX' .Y' ,Z'), если вам не понравился результат работы этой команды. Для вычисления векторов нормалей поверхности surf1 требует в качестве аргументов матрицы с размером по крайней мере 3x3.
Ниже представлен пример применения команды surfl:
» [X.Y]=meshgrid([-3:0.1:3]);
» Z=sin(X)./(X. ^ 2+Y.^2+0.3);
» surfl(X,Y,Z)
» colormap(gray)
» shading interp
» colorbar
Построенная в этом примере поверхность представлена на рис. 6.29.
Рис. 6.29. График поверхности с имитацией ее освещения точечным источником
Сравните этот рисунок с рис. 6.26, на котором та же поверхность построена без имитации ее освещения.
Примечание
Нетрудно заметить определенную логику в названиях графических команд. Имя команды состоит из основного слова и суффикса расширения. Например, все команды построения поверхностей имеют основное слово surf (сокращение от surface — поверхность) и суффиксы: с — для контурных линий поверхности, l — для освещенности и т. д. Это правило облегчает запоминание многочисленных команд графики.
Средства управления подсветкой и обзором фигур
Рекомендуется с помощью команды help ознакомиться с командами, задающими управление подсветкой и связанными с ней оптическими эффектами:
diffuse — задание эффекта диффузионного рассеяния;
lighting — управление подсветкой;
material — имитация свойств рассеивания света различными материалами;
specular — задание эффекта зеркального отражения.
Следующие три команды позволяют управлять углами просмотра, под которыми рассматривается видимая в графическом окне фигура:
view — задание положения точки просмотра;
viewmtx — задание и вычисление матрицы вращения;
rotateSd — задание поворота трехмерной фигуры.
В ряде случаев применением этих команд можно добиться большей выразительности трехмерных объектов. Скорость построения таких графиков сильно зависит от аппаратной поддержки графики в конкретном ПК. Так, использование современных видеоадаптеров с графическим процессором и поддержкой средств OpenGL позволяет повысить скорость построения трехмерных графиков в несколько раз и добиться большей их выразительности.
Построение графиков функций трех переменных
Графики сечений функций трех переменных строит команда slice (в переводе — «ломтик»). Она используется в следующих формах:
slice(X.Y.Z.V.Sx,Sy,Sz) — строит плоские сечения объемной фигуры V в направлении осей x,y,z c позициями, задаваемыми векторами Sx, Sy, Sz. Массивы X, Y, Z задают координаты для V и должны быть монотонными и трехмерными (как возвращаемые функцией meshgrid) с размером MxNxP. Цвет точек сечений определяется трехмерной интерполяцией в объемной фигуре V;
slice(X,Y.Z.V,XI.YI.ZI) — строит сечения объемной фигуры V по поверхности, определенной массивами XI, YI, ZI;
slice (... 'method') — при построении задается метод интерполяции, который может быть одним из следующих: 'linear', 'cubic' или 'nearest'. По умолчанию используется линейная интерполяция — 'linear';
slice(V.Sx.Sy.Sz) или slice(V.XI.YI.ZI) - подразумевается X=1:N, Y=1:M, Z=1:P;
H=slice(...) — строит сечение и возвращает дескриптор объекта класса surface.
График примера, приведенного ниже, представлен на рис. 6.30.
» [x.y.z]= meshgrid(-2:.2:2. -2:.25:2. -2:.16:2);
» v = sin(x) .* ехр(-х.*2 - у. ^ 2 - z. ^ 2);
» slice(x.y.z.v.[-1.2 .8 2].2.[-2 -.2])
График трехмерной слоеной поверхности
Иногда бывают полезны графики трехмерных слоеных поверхностей, как бы состоящие из тонких пластинок — слоев. Такие поверхности строит функция water-fall (водопад):
waterfal(...) — строит поверхность, как команда mesh(...), но без показа ребер сетки. При ориентации графика относительно столбцов следует использовать запись waterfall(Z 1 ) или waterfall (X ' ,Y' ,Z').
Рассмотрим пример применения команды waterfall:
» [X.Y]=meshgrid([-3:0.1:3]);
» Z=sin(X)./(X.*2+Y.*2+0.3);
» waterfall(X.Y.Z)
» colormap(gray)
» shading interp
Соответствующий график показан на рис. 6.30.
Рис. 6.30. Трехмерная слоеная поверхность
Tрехмерные контурные графики
Трехмерный контурный график представляет собой расположенные в пространстве линии равного уровня, полученные при расслоении трехмерной фигуры рядом секущих плоскостей, расположенных параллельно опорной плоскости фигуры.
При этом в отличие от двумерного контурного графика линии равного уровня отображаются в аксонометрии. Для получения трехмерных контурных графиков используется команда contourS:
contour3(...) — имеет синтаксис, аналогичный команде contour(...), но строит линии равного уровня в аксонометрии с использованием функциональной окраски (окраска меняется вдоль оси Z).
Полезные частные формы записи этой команды:
contour3(Z) — строит контурные линии для поверхности, заданной массивом Z, без учета диапазона изменения х и у;
contour3(Z.n) — строит то же, что предыдущая команда, но с использованием п секущих плоскостей (по умолчанию n=10);
contour3(X,Y,Z) — строит контурные линии для поверхности, заданной массивом Z, с учетом изменения х и у. Двумерные массивы X и Y создаются с помощью функции meshgrid;
contours(X.Y.Z.n) — строит то же, что предыдущая команда, но с использованием п секущих плоскостей.
Пример применения команды contourS:
» contour3(peaks,20)
» colormap(gray)
Соответствующий данному примеру график представлен на рис. 6.31. В данном случае задано построение двадцати линий уровня.
Рис. 6.31. Трехмерный контурный график для функции peaks
С командой contourS связаны следующие одноименные функции (не выполняющие графические построения):
C=contour3(...) — возвращает матрицу описания контурных линий С для использования командой clabel;
[С, H]=contour3(...) — возвращает массив С и вектор-столбец Н дескрипторов объектов path для каждой линии уровня. Свойство UserData каждого объекта содержит значение высоты для соответствующего контура.
Установка титульной надписи
После того как график уже построен, MATLAB позволяет выполнить его форматирование или оформление в нужном виде. Соответствующие этому средства описаны ниже. Так, для установки над графиком титульной надписи используется следующая команда:
title( 'string ' ) — установка на двумерных и трехмерных графиках титульной надписи, заданной строковой константой 'string'.
Пример применения этой команды будет дан в следующем разделе.
Установка осевых надписей
Для установки надписей возле осей х, у и z используются следующие команды:
xlabe('String')
ylabeK ('String')
zlabelС ('String')
Соответствующая надпись задается символьной константой или переменной 'String ' . Пример установки титульной надписи и надписей по осям графиков приводится ниже:
» [X.Y]=meshgrid([-3:0.1:3]);
» Z=sin(X)./(X.^2+Y.^2+0.3);
» surfl(X,Y,Z)
» colorbar
» colormap(gray)
» shading interp
» xlabel'Axis X')
» ylabel'Axis Y')
» zlabel'Axis Z')
» title 'Surface graphic')
Построенный в этом примере график трехмерной поверхности показан на рис. 6.32.
Рис. 6.32. График трехмерной поверхности с титульной надписью и надписями по координатным осям
Сравните его с графиком, показанным на рис. 6.29. Надписи делают рисунок более наглядным.
Ввод текста в любое место графика
Часто возникает необходимость добавления текста в определенное место графика, например для обозначения той или иной кривой графика. Для этого используется команда text:
text(X.Y. 'string') — добавляет в двумерный график текст, заданный строковой константой 'string', так что начало текста расположено в точке с координатами (X, Y). Если X и Y заданы как одномерные массивы, то надпись помещается во все позиции [x(i) ,y(i)];
text(X,Y,Z. 'string') — добавляет в трехмерный график текст, заданный строковой константой 'string', так что начало текста расположено в позиции, заданной координатами X, Y и Z.
В приведенном ниже примере надпись «График функции sin(x ^ 3)» размещается под кривой графика в позиции (-4, 0.7):
» х=10:0.1:10;
» plot(x,sin(x).^3)
» text(-4.0.7,'Graphic sin(x)^3')
График функции с надписью у кривой показан на рис. 6.33.
Рис. 6.33. Пример ввода надписи в поле графика функции
Математически правильной записью была бы sin 3 x.
Попробуйте ввести самостоятельно:
» х=-10:0.1:10;
» plot(x,sin(x).^3)
» text(-4.0.7,'Graphic (sin(х)^3)')
Функция h=text(...) возвращает вектор-столбец h дескрипторов объектов класса text, дочерних для объектов класса axes. Следующий пример вычисляет дескриптор h
» h=text(.25. .5. '\ite^{i\omega\tau} = cos(\omega\tau) + ... i sin(\omega\tau)')
3.0022 и выводит в пустом графике математическую формулу в формате ТеХ вида:
e jwt = cos(wt) + sin(wt)
Пары координат X,Y (или тройки X,Y,Z для трехмерных графиков) могут сопровождаться парами «имя параметра/значение параметра» для задания дополнительных свойств текста. Пары координат X,Y (или тройки X,Y,Z для трехмерных графиков) могут быть полностью опущены, при этом все свойства, в том числе и позиция текста, задаются с помощью пар «имя параметра/значение параметра», заданных по умолчанию.
Используйте функцию get(H), где Н — дескриптор графического объекта (в нашем случае графического объекта класса text), чтобы просмотреть список свойств объекта и их текущие значения. Используйте set(H), чтобы просмотреть список свойств графических объектов и их допустимых значений.
Позиционирование текста с помощью мыши
Очень удобный способ ввода текста предоставляет команда gtext:
gtext('string') — задает выводимый на график текст в виде строковой константы ' string' и выводит на график перемещаемый мышью маркер в виде крестика. Установив маркер в нужное место, достаточно щелкнуть любой кнопкой мыши для вывода текста;
gtext (С) — позволяет аналогичным образом разместить многострочную надпись из массива строковых переменных С.
Пример применения команды gtext:
» х=-15:0.1:15;
» plot(x, sin(x). ^ 3)
» gtext('Function sin(x).^3')
При исполнении этого примера вначале можно увидеть построение графика функции с большим крестом, перемещаемым мышью (рис. 6.34).
Установив перекрестие в нужное место графика, достаточно нажать любую клавишу или любую кнопку мыши, и на этом месте появится надпись (рис. 6.35).
Рис. 6.34. График функции с крестообразным маркером, перемещаемым мышью
Высокая точность позиционирования надписи и быстрота процесса делает данный способ нанесения надписей на графики одним из наиболее удобных.
Рис. 6.35. График функции с надписью, установленной с помощью мыши
Вывод пояснений
Пояснение в виде отрезков линий со справочными надписями, размещаемое внутри графика или около него, называется легендой. Для создания легенды используются различные варианты команды legend:
legend(stringl,string2. strings,...) — добавляет к текущему графику легенду в виде строк, указанных в списке параметров;
legend (H.stringl,string2. strings,...) — помещает легенду на график, содержащий объекты с дескрипторами Н, используя заданные строки как метки для соответствующих дескрипторов;
legend( АХ . ...) — помещает легенду в осях (объект класса axes) с дескриптором АХ;
legend (М) — размещает легенду, используя данные из строковой матрицы М;
legend OFF — устраняет ранее выведенную легенду;
legend — перерисовывает текущую легенду, если таковая имеется;
legend( I egendhandl е) — перерисовывает легенду, указанную дескриптором legendhandle;
legend (....Pos) — помещает легенду в точно определенное место, специфицированное параметром Pos:
Pos=0 — лучшее место, выбираемое автоматически;
Pos=l — верхний правый угол;
Pos=2 — верхний левый угол;
Pos=3 — нижний левый угол;
Pos=4 — нижний правый угол;
Pos=-l — справа от графика.
Чтобы перенести легенду, установите на нее курсор, нажмите левую кнопку мыши и перетащите легенду в необходимую позицию.
[legh,objh]=legend(...) — эта функция возвращает дескриптор объекта для легенды (legh) и матрицу objh, содержащую дескрипторы объектов, из которых легенда состоит.
Команда 1 egend может использоваться с двумерной и трехмерной графикой и со специальной графикой — столбцовыми и круговыми диаграммами и т. д. Двойным щелчком можно вывести легенду на редактирование.
Пример, приведенный ниже, строит график трех функций с легендой, размещенной в поле графика:
» x=-2*pi:0.1*pi :2*pi;
» y1=sin(x);
» y2=sin(x).^2;
» plot(x,y1, '-m' ,x,y2 '-.+r')
» legend( 'Function 1', 'Function 2');
Полученный график представлен на рис. 6.36.
Рис. 6.36. График трех функций с легендой в поле графика
Незначительная модификация команды legend (применение дополнительного параметра -1) позволяет построить график трех функций с легендой вне поля графика:
» x=-2*pi:0.1*pi:2*pi;
» yl=sin(x);
» y2=sin(x). ^ 2;
» y3=sin(x). ^ 3;
» plot(x,y1,'-m',x,y2.'-.+r',x,y3,'--ok')
» legend(' Function 1','Function 2','Function 3'.-l);
Соответствующий график показан на рис. 6.37.
Рис. 6.37. График трех функций с легендой, расположенной вне поля графика
В данном случае недостатком можно считать сокращение полезной площади самого графика. Остальные варианты расположения легенды пользователю предлагается изучить самостоятельно. Следует отметить, что применение легенды придает графикам более осмысленный и профессиональный вид. При необходимости легенду можно переместить мышью в подходящее место графика.
Маркировка линий уровня на контурных графиках
К сожалению, контурные графики плохо приспособлены для количественных оценок, если их линии не маркированы. В качестве маркеров используются крестики, рядом с которыми располагаются значения высот. Для маркировки контурных графиков используются команды группы clabel:
clabel(CS.H) — маркирует контурный график с данными в контурной матрице CS и дескрипторами объектов, заданными в массиве Н. Метки вставляются в разрывы контурных линий и ориентируются в соответствии с направлением линий;
clabel (CS.H, V) — маркируются только те уровни, которые указаны в векторе V. По умолчанию маркируются все контуры. Позиции меток располагаются случайным образом;
clabel (CS.H, 'manual') — маркирует контурные графики с установкой положения маркеров с помощью мыши. Нажатие клавиши Enter или кнопки мыши завершает установку маркера. При отсутствии мыши для перехода от одной линии уровня к другой используется клавиша пробела, а для перемещения надписи используются клавиши перемещения курсора;
clabel (CS), clabel (CS.V) и clabel (CS. 'manual') — дополнительные возможности маркировки контурных графиков. При отсутствии аргумента h метки не ориентируются вдоль линий контуров; точную позицию метки отмечает значок «+» (далее на рис. 6.39 показан именно этот вариант).
Пример применения команды clabel приводится ниже:
» [X,Y]=meshgrid([-3:0.1:3]);
» Z=sin(X)./(X.^2+Y.^2+0.3);
» C=contour(X.Y.Z.10);
» colormap(gray)
» clabel(С)
Рис. 6.38. Контурный график с маркированными линиями уровня
Рис. 6.38 показывает построение контурного графика с маркированными линиями уровня.
Функция H=cl abel (...) маркирует график и возвращает дескрипторы создаваемых при маркировке объектов класса TEXT (и, возможно, LINE).
Управление свойствами осей графиков
Обычно графики выводятся в режиме автоматического масштабирования. Следующие команды класса axis меняют эту ситуацию:
axis([XMIN XMAX YMIN YMAX]) — установка диапазонов координат по осям х и у для текущего двумерного графика;
axis([XMIN XMAX YMIN YMAX ZMIN ZMAX]) - установка диапазонов координат по осям х, у и z текущего трехмерного графика;
axis auto — установка параметров осей по умолчанию;
axis manual — «замораживает» масштабирование в текущем состоянии, чтобы при использовании команды hold on следующие графики использовали те же параметры осей;
axis tight — устанавливает диапазоны координат по осям в соответствии с диапазонами изменения данных;
axis ij — задает «матричную» прямоугольную систему координат с началом координат в левом верхнем углу, ось i — вертикальная, размечаемая сверху вниз, ось j — горизонтальная и размечается слева направо;
axis xy — устанавливает декартову систему координат с горизонтальной осью х, размечаемой слева направо, и вертикальной осью у, размечаемой снизу вверх. Начало координат размещается в нижнем левом углу;
axis equal — включает масштаб с одинаковым расстоянием между метками по осям х, у и z;
axis image — устанавливает масштаб, при котором пикселы изображения становятся квадратами;
axis square — устанавливает текущие оси в виде квадрата (или куба в трехмерном случае) с одинаковым расстоянием между метками и одинаковой длиной осей;
axis normal — восстанавливает масштаб, отменяя установки axis equal и axis square;
axis vis3d — «замораживает» пропорции осей для возможности поворота трехмерных объектов;
axi s off — убирает с осей их обозначения и маркеры; 0 axis on — восстанавливает ранее введенные обозначения осей и маркеры;
V=axis — возвращает вектор-строку, содержащую коэффициенты масштабирования для текущего графика. Если текущий график двумерный, то вектор имеет 4 компонента, если трехмерный — 6 компонентов.
Следующий пример иллюстрирует применение команды axis при построении двумерного графика функции одной переменной:
» х=-5:0.1:5;
» plot(x,sin(x));
» axis([-10 10 -1.5 1.5])
На рис. 6.40 показан график, который строится в этом примере.
Рис. 6.39. Пример задания масштаба осей двумерного графика
Обратите внимание, что теперь масштабы осей заданы командой axis, а не диапазоном изменения значений х и у.
Включение и выключение сетки
В математической, физической и иной литературе при построении графиков в дополнение к разметке осей часто используют масштабную сетку. Команды grid позволяют задавать построение сетки или отменять это построение:
grid on — добавляет сетку к текущему графику;
grid off — отключает сетку;
grid — последовательно производит включение и отключение сетки.
Рис. 6.40. График синусоиды с сеткой разметки
Команды grid устанавливают свойства объектов XGrid, Ygrid и Zgrid для текущих осей. Ниже приведен пример из предшествующего раздела с добавлением в него команды grid:
» х=-5:0.1:5;
» plot(x,sin(x));
» axis([-10 10 -1.5 1.5])
» grid on
Построенный граф ик показан на рис. 6.40.
Сравните этот график с графиком на рис. 6.39, на котором сетка отсутствует. Нетрудно заметить, что наличие сетки облегчает количественную оценку координат точек графика.
Наложение графиков друг на друга
Во многих случаях желательно построение многих наложенных друг на друга графиков в одном и том же окне. Для этого служит команда продолжения графических построений hold. Она используется в следующих формах:
hold on — обеспечивает продолжение вывода графиков в текущее окно, что позволяет добавлять последующие графики к уже существующим;
hold off — отменяет режим продолжения графических построений;
hold — работает как переключатель, последовательно включая режим продолжения графических построений и отменяя его.
Команда hold on устанавливает значение add для свойства NextPlot объектов figure и axes, a hold off устанавливает для этого свойства значение replace. Рекомендуется также ознакомиться с командами ishold, newplot, figure и axes.
Рис. 6.41. Графики синусоиды и трех параметрических функций в одном окне
Приведенный ниже пример показывает, как с помощью команды hold on на график синусоиды накладываются еще три графика параметрически заданных функций:
& raquo; х--5:0.1:5;
» plot(x,sin(x))
» hold on
» plot(sin(x),cos(x))
» plot(2*sin(x),cos(x))
» plot(4*sin(x),cos(x))
» hold off
Графики построенных функций показаны на рис. 6.42.
В конце приведенного фрагмента программы команда hold off отключает режим добавления графиков к ранее построенным графикам.
Разбиение графического окна
Бывает, что в одном окне надо расположить несколько координатных осей с различными графиками без наложения их друг на друга. Для этого используются команды subplot, применяемые перед построением графиков:
subplot — создает новые объекты класса axes (подокна);
subplot(m.n.p) или subplot(mnp) — разбивает графическое окно на тхп подокон, при этом m — число подокон по горизонтали, n — число подокон по вертикали, а р— номер подокна, в которое будет выводиться текущий график (подокна отсчитываются последовательно по строкам);
subplot(H), где Н — дескриптор для объекта axes, дает альтернативный способ задания подокна для текущего графика;
subplot( 'position',[left bottom width height]) — создает подокно с заданными нормализованными координатами (в пределах от 0.0 до 1.0);
subplot(lll) Hclf reset — удаляют все подокна и возвращают графическое окно в обычное состояние.
Рис. 6.42. Четыре графика различного типа, размещенных в подокнах одного окна
Следующий пример иллюстрирует применение команды subplot:
» х=-5:0.1:5;
subplot(2.2.1).plot(x.sin(x))
subplot(2.2.2).plot(sin(5*x).cos(2*x+0.2))
subplot(2.2.3).contour(peaks)
subplot(2.2.4).surf(peaks)
В этом примере последовательно строятся четыре графика различного типа, размещаемых в разных подокнах (рис. 6.42).
Следует отметить, что для всех графиков возможна индивидуальная установка дополнительных объектов, например титульных надписей, надписей по осям и т. д.
Изменение масштаба графика
Для изменения масштаба двумерных графиков используются команды класса zoom:
zoom — переключает состояние режима интерактивного изменения масштаба для текущего графика;
zoom (FACTOR) устанавливает масштаб в соответствии с коэффициентом FACTOR;
zoom on — включает режим интерактивного изменения масштаба для текущего графика;
zoom off — выключает режим интерактивного изменения масштаба для текущего графика;
zoom out — обеспечивает полный просмотр, т. е. устанавливает стандартный масштаб графика;
zoom xon или zoom yon — включает режим изменения масштаба только по оси х или по оси у;
zoom reset — запоминает текущий масштаб в качестве масштаба по умолчанию для данного графика;
zoom(FIG,OPTION) — применяется к графику, заданному дескриптором FIG, при этом OPTION может быть любым из перечисленных выше аргументов.
Команда zoom позволяет управлять масштабированием графика с помощью мыши. Для этого надо подвести курсор мыши к интересующей вас области рисунка. Если команда zoom включена (on), то нажатие левой кнопки увеличивает масштаб вдвое, а правой — уменьшает вдвое. При нажатой левой кнопке мыши можно выделить пунктирным черным прямоугольником нужный участок графика — при отпускании кнопки он появится в увеличенном виде и в том масштабе, который соответствует выделяющему прямоугольнику.
Рассмотрим работу команды zoom на следующем примере:
» х=-5:0.01:5;
» plot(x,sin(x. ^ 5)./(x.^5+eps))
» zoom on
Рис. 6.44 показывает график функции данного примера в режиме выделения его участка с помощью мыши.
После прекращения манипуляций левой кнопкой мыши график примет вид, показанный на рис. 6.44. Теперь в полный размер графического окна будет развернуто изображение, попавшее в выделяющий прямоугольник.
Рис. 6.43. Выделение части графика мышью при использовании команды zoom
Команда zoom, таким образом, выполняет функцию «лупы», позволяющей наблюдать в увеличенном виде отдельные фрагменты сложных графиков. Однако следует учитывать, что для наблюдения фрагментов графиков при высоком увеличении они должны быть заданы большим количеством точек. Иначе вид отдельных фрагментов и тем более особых точек (в нашем случае это точка при х вблизи нуля) будет существенно отличаться от истинного.
Рис. 6.44. График выделенного участка
Установка палитры цветов
Поскольку графика MATLAB обеспечивает получение цветных изображений, в ней есть ряд команд для управления цветом и различными световыми эффектами. Среди них важное место занимает установка палитры цветов. Палитра цветов RGB задается матрицей MAP из трех столбцов, определяющих значения интенсивности красного (red), зеленого (green) и синего (blue) цветов. Их интенсивность задается в относительных единицах от 0.0 до 1.0. Например, [0 0 0] задает черный цвет, [1 1 1] — белый цвет, [0 0 1] — синий цвет. При изменении интенсивности цветов в указанных пределах возможно задание любого цвета. Таким образом, цвет соответствует общепринятому формату RGB.
Для установки палитры цветов служит команда colormap, записываемая в следующих формах:
colormap( 'default') — устанавливает палитру по умолчанию, при которой распределение цветов соответствует радуге;
colormap(MAP) — устанавливает палитру RGB, заданную матрицей MAP;
C=colormap — функция возвращает матрицу текущей палитры цветов С. m-файл с именем colormap устанавливает свойства цветов для текущего графика.
Команда help graphSd наряду с прочим выводит полный список характерных палитр, используемых графической системой MATLAB:
hsv — цвета радуги;
hot — чередование черного, красного, желтого и белого цветов;
gray — линейная палитра в оттенках серого цвета;
bone — серые цвета с оттенком синего;
copper — линейная палитра с оттенками меди;
pink — розовые цвета с оттенками пастели;
white — палитра белого цвета;
flag — чередование красного, белого, синего и черного цветов;
lines — палитра с чередованием цветов линий;
colorcube — расширенная палитра RGB;
jet — разновидность палитры HSV;
prism — призматическая палитра цветов;
cool — оттенки голубого и фиолетового цветов;
autumn — оттенки красного и желтого цветов;
spring — оттенки желтого и фиолетового цветов;
winter — оттенки синего и зеленого цветов;
summer — оттенки зеленого и желтого цветов.
Все эти палитры могут служить параметрами команды colormap, например colormap(hsv) фактически устанавливает то же, что и команда colormap( 'default'). Примеры применения команды colormap будут приведены в следующих разделах.
Установка соответствия между палитрой цветов и масштабом осей
При использовании функциональной окраски важное значение имеет установка соответствия между палитрой цветов и масштабом координатных осей. Так, выбор ограниченного диапазона интенсивностей цветов может привести к тому, что цветовая гамма будет блеклой и функциональная закраска не будет достигать своих целей. С помощью команды caxis можно обеспечить соответствие между палитрой цветов и масштабом осей:
caxis(V) — с помощью двухэлементного вектора V со списком элементов [cmin cmax] устанавливает диапазон используемой палитры цветов для объектов surface и patch, создаваемых такими командами, как mesh, pcolor и surf. Пикселы, цвета которых выходят за пределы [cmin cmax], приводятся к граничным цветам диапазона;
caxis('manual') — устанавливает шкалу цветов по текущему интервалу параметра, задающего цвет;
caxis('auto') — устанавливает типовое масштабирование шкалы цветов, при котором диапазон используемых цветов соответствует диапазону изменения данных от -Inf до Inf. Линии и грани с цветами, равными NaN, отсекаются.
Функция caxis возвращает двухэлементный вектор с элементами [cmin cmax] для текущего светового эффекта, m-файл с именем caxi s задает свойства dim и CLimMode объекта axes (см. команду help axes).
Окраска поверхностей
Для окраски поверхностей используется команда shading, которая управляет объектами surface (поверхность) и patch (заплата), создаваемыми командами и функциями surf, mesh, pcolor, fill и fill 3. Команда shading (затенение) работает с параметрами и имеет следующий вид:
shading flat — задает окраску ячеек или граней в зависимости от текущих данных;
shading interp — задает окраску с билинейной интерполяцией цветов;
shading faceted — равномерная раскраска ячеек поверхности (принята по умолчанию).
Эти команды устанавливают свойства EdgeColor и FaceColor для графических объектов surface и patch в зависимости от того, какая из команд — mesh (сетчатая поверхность) или surf (затененная поверхность) — используется. Примеры применения команд shading уже приводились.
Установка палитры псевдоцветов
Довольно часто возникает необходимость представления той или иной матрицы в цветах. Для этого используют псевдоцвета, зависящие от содержимого ячеек. Такое представление реализуют команды класса pcolor:
pcolor (С) — задает представление матрицы С в псевдоцвете;
pcolor(X,Y,C) — задает представление матрицы С на сетке, формируемой векторами или матрицами X и Y.
Рис. 6.45. Пример применения команды pcolor
Функция pcolor возвращает дескриптор объекта класса surface. Пример применения команды pcolor приводится ниже:
» z=peaks(40);
» colormap(hsv)
» pcolor(z)
График, построенный в этом примере, показан на рис. 6.45.
Характер расцветки поверхности командой pcolor существенно зависит от выбора палитры цветов. В приведенном примере она задается командой colormap.
Создание закрашенного многоугольника
Для создания закрашенного пятна в виде многоугольника может использоваться команда patch:
patch(X,Y,C) — создает закрашенный многоугольник, вершины которого заданы векторами X и Y в текущей системе координат, а спецификация окраски задана вектором цветовой палитры С. Можно также задавать цвет с помощью символьной переменной 'color' вида 'г', 'д', 'b', 'с', 'т', 'у', V или V. X и Y могут быть матрицами;
patch(X,Y.Z,C) — создает многоугольник в трехмерной системе координат, при этом матрица Z должна иметь тот же размер, что X и Y.
Следующий пример поясняет применение команды patch:
» Х=[1 2 3 2 1];
» Y=[1 2 0 5 1];
» patch(X,Y,[1 0 0])
Построенный многоугольник показан на рис. 6.46.
В данном случае многоугольник окрашен красным цветом, поскольку вектор цветов [1 0 0] указывает на наличие только красной составляющей цвета (другие составляющие представлены относительным уровнем 0).
Рис. 6.46. Многоугольник, построенный командой patch
Окраска плоских многоугольников
Для построения окрашенных в заданный цвет плоских многоугольников может использоваться команда fill (заполнить):
fill(X.Y.C) — строит закрашенный плоский многоугольник, вершины которого задаются векторами X и Y с цветом, заданным С. Многоугольник должен быть замкнутым. Для построения нескольких прямоугольников параметры команды должны быть матрицами.
fill(Xl.Yl,Cl,X2.Y2,C2,...) — представляет собой другой способ построения нескольких закрашенных прямоугольников.
Следующий пример показывает построение четырехугольника, закрашенного синим цветом:
» Х=[1 2 3 2 1];
» Y=[5 0.5 0 4 5]:
» fill(X,Y,[0 0 1])
Построения, реализованные этим примером, показаны на рис. 6.47.
Рис. 6.47. Построение закрашенного четырехугольника на плоскости
Функция H=fill (...) строит график и возвращает вектор-столбец дескрипторов для созданных объектов класса patch по одному дескриптору на каждый объект.
Вывод шкалы цветов
При использовании функциональной окраски весьма полезным является вывод шкалы цветов командой colorbar. Ее варианты перечислены ниже:
colorbar( 'vert') — выводит вертикальную шкалу цветов на текущий график;
colorbar( 'horiz') — выводит горизонтальную шкалу цветов на текущий график;
colorbar(H) — выводит шкалу цветов на график с дескриптором Н с автоматическим размещением шкалы по вертикали или по горизонтали в зависимости от соотношения размеров графика;
colorbar — устанавливает в текущий график новую вертикальную шкалу цветов или обновляет уже имеющуюся.
Следующий пример показывает применение команды colorbar совместно с командой fill3:
» fill3(rand(5,4),rand(5,4),rand(5,4),rand(5,4))
» colorbar('vert')
Более подробно функция f ill3 будет рассмотрена ниже. На рис. 6.48 показана полученная при запуске этого примера картина. Следует отметить, что, поскольку многоугольники строятся со случайными значениями координат вершин, то при каждом запуске будет наблюдаться новая картина.
Рис. 6.48. Случайные многоугольники с функциональной окраской и вертикальной шкалой цветов
Функция H=col orbar(...) возвращает дескриптор для объекта axes со шкалой цветов.
Цветные плоские круговые диаграммы
Закрашенные секторы часто используются для построения круговых диаграмм. Для этого в MATLAB служит команда piе:
pie(X) — строит круговую диаграмму по данным нормализованного вектора X/ SUM(X). SUM(X)—сумма элементов вектора. Если SUM(X)<=1.0, то значения в X непосредственно определяют площадь секторов;
pie(X.EXPLODE) — строит круговую диаграмму, у которой отрыв секторов от центра задается вектором EXPLODE, который должен иметь тот же размер, что и вектор данных X.
Следующий пример строит цветную круговую диаграмму с пятью секторами, причем последний сектор отделен от остальных:
» Х=[1 2 3 4 5];
» pie(X,[0 0 0 0 2])
Построенная диаграмма показана на рис. 6.49.
Рис. 6.49. Плоская круговая диаграмма
Функция Н=рiе(...) строит график и возвращает вектор дескрипторов созданных объектов классов patch и text.
Другие команды управления световыми эффектами
Здесь мы только отметим некоторые дополнительные команды, связанные с управлением цветовыми палитрами:
col style — выделение цвета и стиля графика из заданного массива;
rgbplot — изображение палитры;
hsv2rgb — преобразование палитры HSV в палитру RGB;
rgb2hsv — преобразование палитры RGB в палитру HSV;
brighten — управление яркостью;
contrast — управление контрастом;
hidden — управление показом невидимых линий;
whitebg — управление цветом фона.
Рекомендуется ознакомиться с этими командами, используя команду help.
Окрашенные многоугольники в пространстве
Для закраски многоугольников, определенных в пространстве, служит команда f ill3. Ниже представлены основные ее формы:
fill3(X,Y,Z,C) — строит закрашенный многоугольник в пространстве с данными вершин, хранящимися в векторах X, Y и Z, и цветом, заданным палитрой С. При построении нескольких закрашенных многоугольников параметры команды должны быть матрицами;
fill3(Xl.Yl,Zl,Cl.X2,Y2,Z2,C2,...) — другой вариант построения нескольких закрашенных многоугольников в пространстве;
fill 3 — функция, возвращающая вектор-столбец дескрипторов объектов класса patch.
Следующий пример показывает действие команды fill3:
» fill3(rand(5,4),rand(5,4).rand(5.4).rand(5.4))
На рис. 6.50 представлены построенные в этом примере закрашенные многоугольники. Поскольку координаты вершин многоугольников формируются с применением генератора случайных чисел, то наблюдаемая картина оказывается случайной и не будет повторяться при последующих запусках данного примера.
Рис. 6.50. Закрашенные многоугольники в пространстве
Следует обратить внимание на то, что команда pie3 дает функциональную закраску построенных фигур.
Ц ветные объемные круговые диаграммы
Иногда используются объемные круговые диаграммы. Для их построения служит команда pie3:
pie3(...) — аналогична команде pie(...), но дает построение объемных секторов.
В приведенном ниже примере строится объемная диаграмма с отделением двух секторов, показанная на рис. 6.51:
» Х=[1 2 3 4 5];
» pie3(X,[0 0 1 0 1])
Рис. 6.51. Объемная круговая диаграмма
Функция H=pie3(...) строит график и возвращает вектор, содержащий дескрипторы созданных объектов классов patch, surface и text.
Построение цилиндра
Для построения цилиндра в виде трехмерной фигуры применяется функция
cylinder:
[X,Y,Z]=cylinder(R,N) — создает массивы X, Y и Z, описывающие цилиндрическую поверхность с радиусом R и числом узловых точек N для последующего построения с помощью функции surf(X.Y.Z);
[X,Y,Z]=cyl1nder(R) и [X,Y,Z]=cylinder — подобны предшествующей функции для N=20 и R=[1 1].
Пример построения объемного цилиндра:
» [X,Y,Z]=cylinder(10.30);
» surf(X,Y,Z,X)
На рис. 6.52 показан результат построения цилиндра для данного примера.
Рис. 6.52. Построение цилиндра
Естественность воспроизведения цилиндра существенно зависит от графической команды, используемой для его построения. Команда surf дает возможность задать функциональную окраску с цветом, определяемым вектором X, что делает представление цилиндра достаточно наглядным.
Построение сферы
Для расчета массивов X, Y и Z координат точек сферы как трехмерной фигуры используется функция sphere:
[X.Y,Z]=sphere(N) — генерирует матрицы X, Y и Z размера (N+l)x(N+l) для последующего построения сферы с помощью команд surf (X, Y.Z) или surfl (X. Y.Z);
[X,Y.Z]=sphere — аналогична предшествующей функции при N=20.
Пример применения этой функции:
» [X,Y,Z]=sphere(30);
» surfl(X,Y,Z)
На рис. 6.53 показана построенная в этом примере сфера. Хорошо видны геометрические искажения (сфера приплюснута), связанные с разными масштабами по координатным осям.
Рис. 6.53. Построение сферы
Обратите внимание на то, что именно функциональная окраска сферы придает ей довольно реалистичный вид. В данном случае цвет задается вектором Z.
Трехмерная графика с треугольными плоскостями
К числу специальных видов графики относится построение объемных фигур с помощью плоских треугольников. Для построения таких фигур в виде каркаса (без окраски и отображения плоскостей) используется команда trimesh:
trimesh(TRI,X,Y,Z,C) — построение объемной каркасной фигуры с треугольниками, специфицированными матрицей поверхности TRI, каждая строка которой содержит три элемента и задает одну треугольную грань путем указания индексов, по которым координаты выбираются из векторов X, Y, Z. Цвета ребер задаются вектором С;
trimesh(TRI.X.Y.Z) — построение, аналогичное предшествующему при C=Z, т. е. с цветом ребер, зависящим от значений высоты;
H=trimesh(...) — строит график и возвращает дескрипторы графических объектов;
trimesh(..., 'param'. 'value'. 'param', 'value'...) — добавляет значения 'value' для параметров 'param'.
Рис. 6.54. Одна из объемных фигур, построенных командой trimesh
Следующий пример иллюстрирует применение команды trimesh для построения случайной объемной фигуры, параметры которой задаются с помощью генератора случайных чисел:
» х = rand(1,40);
» у = rand(1,40);
» z = sin(x.^y);
» tri = delaunay(x,y);
» tnmesh(tri .x.y.z)
Рис. 6.55. Один из рисунков, построенных командой trisurf
Одна из построенных фигур показана на рис. 6.54. Другая, абсолютно аналогичная, по заданию входных параметров команда — tnsurf(...) — отличается только закраской треугольных областей, задающих трехмерную фигуру. Если в приведенном выше примере заменить функцию trimesh на trisurf, то можно получить графики, подобные приведенному на рис. 6.55.
Обратите внимание на то, что рис. 6.55 также принадлежит к множеству случайных графических построений. Поэтому возможность его буквального повторения отсутствует.
Что нового мы узнали?
В этом уроке мы научились:
Строить различные графики функций одной переменной.
Строить диаграммы и гистограммы.
Строить на плоскости графики специальных типов.
Использовать функции задания массивов трехмерной графики.
Строить трехмерные графики поверхностей и фигур.
Использовать световые эффекты.
Наносить на графики надписи и легенды.
Маркировать оси и линии графиков, наносить на них сетку.
Строить в одном окне несколько графиков и менять их масштаб.
Менять палитры цвета и условия освещения.
Строить графические объекты на плоскости и в пространстве.
Урок №7.
Специальная графика
Движение точки на плоскости и в пространстве
Основные средства анимации
Объекты дескрипторной графики
Операции над графическими объектами
Свойства объектов и управление ими
Управление средствами Open GL
Управление прозрачностью графических объектов
Основные команды для создания пользовательского интерфейса
Растровая графика
Пакет прикладных программ Images
Галерея трехмерной графики
В этом уроке мы рассмотрим некоторые виды специальной графики. Это прежде всего анимационная и дескрипторная (handle) графика.
Движение точки на плоскости
Для отображения движения точки по траектории используется команда comet. При этом движущаяся точка напоминает ядро кометы с хвостом. Используются следующие формы представления этой команды:
comet (Y) — отображает движение «кометы» по траектории, заданной вектором Y;
comet (X.Y) — отображает движение «кометы» по траектории, заданной парой векторов Y и X;
comet (X.Y.p) — аналогична предшествующей команде, но позволяет задавать длину хвоста кометы (отрезка траектории, выделенного цветом) как p*1ength(Y), где length(Y) - размер вектора Y. а р<1. По умолчанию р = 0.1 [ Обратите внимание, что если Вы используете лупу, как-то иначе пытаетесь изменить размер Вашего рисунка или используете вкладку Copy Figure меню Edit, то график, полученный при использовании comet или cometS, исчезает. — Примеч. ред. ]
Рис. 7.1. Стоп-кадр изображения, полученный из примера использования команды comet
Следующий пример иллюстрирует применение команды comet:
» Х=0:0.01:15;
» comet(X,sin(X) )
Стоп-кадр изображения показан на рис. 7.1. «Хвост кометы» на черно-белом рисунке заметить трудно, поскольку он представляет собой отрезок линии с цветом, отличающимся от цвета линии основной части графика.
Движение точки в пространстве
Есть еще одна команда, которая позволяет наблюдать движение точки, но уже в трехмерном пространстве. Это команда comet3:
comet3(Z) — отображает движение точки с цветным «хвостом» по трехмерной кривой, определенной массивом Z;
comet3 (X.Y.Z) — отображает движение точки «кометы» по кривой в пространстве, заданной точками [X(i),Y(i),Z(i)];
comet3(X,Y,Z,p) — аналогична предшествующей команде с заданием длины «хвоста кометы» как p*1ength(Z). По умолчанию параметр р равен 0.1.
Ниже представлен пример применения команды cometS:
» W=0:pi/500:10*pi;
» comet3(cos(W),sin(W)+W/10.W)
На рис. 7.2 показан стоп-кадр изображения, созданного командой comet().
Рис. 7.2. Стоп-кадр изображения, созданного командой comet3
Разумеется, движение точки по заданной траектории как в двумерном, так и в трехмерном пространстве является самым простейшим примером анимации. Тем не менее эти средства существенно расширяют возможности графической визуализации при решении ряда задач динамики.
Основные средства анимации
Для более сложных случаев анимации возможно применение техники мультипликации. Она сводится к построению ряда кадров изображения, причем каждый кадр появляется на некоторое время, затем стирается и заменяется на новый кадр, несколько отличающийся от предшествующего. Если это отличие незначительно, то создается иллюзия плавного перемещения объекта.
Отметим кратко основные команды, реализующие анимацию в системе MATLAB:
capture — захват видеоизображения;
getframe — создание кадра для анимации;
moviein — выполнение анимации;
rotate — вращение фигуры;
frame2im — преобразование кадра в графический образ;
im2frame — преобразование графического образа в кадр.
Применение некоторых из этих команд мы рассмотрим далее на конкретных примерах. К сожалению, серьезные задачи анимации обычно требуют применения программных средств — главным образом циклов. Мы рассмотрим их далее, но представляется, что читатели знакомы с понятием циклов, так что приведенные примеры не будут слишком сложны. В крайнем случае, оставьте их разбор до знакомства с основами программирования в системе MATLAB (урок 20).
Вращение фигуры — логотипа MATLAB
Рассмотрим вначале не очень сложный пример вращения сложной трехмерной поверхности — логотипа системы MATLAB, который представлен файлами logo.m и logo.mat. Ниже представлен фрагмент программы, обеспечивающий вращение этой поверхности (фигуры) относительно осей системы координат:
if ~exist('MovieGUIFlag'). figNumber=0; end;
load logo
h=surfl(L.source);
colormap(M);
ax=[7 52 7 52 -.5 .8]:
axis(ax);
axis on:
shading interp;
m=moviein(25):
for n=l:25.
rotate(h.[0 90],15.[21 21 0]);
h=surfl(get(h.'XData'),get(h.'YData').
get(h.'ZData'),source);
axis(ax);
axis on;
shading interp;
m(:,n)=mvframe(figNumber,24); end;
mvstoretfigNumber.m);
Эта программа имеет два блока: в первом задается исходная функция и ее образ, а во втором (с циклом for) выполняется создание кадров и их последовательное воспроизведение, создающее эффект анимации. На рис. 7.3 показан стоп-кадр полученной анимации.
Рис. 7.3. Стоп-кадр программы, обеспечивающей вращение фигуры — логотипа MATLAB
Волновые колебания мембраны
Принцип мультипликации легко распространить на существенно более сложные задачи анимации. В качестве иллюстрации можно рассмотреть системный пример vibes, демонстрирующий волнообразные колебания тонкой пластины — мембраны. Ниже представлен переработанный файл данного примера, в котором сокращены подробные комментарии на английском языке и введены только для пояснения комментарии на русском языке, их следует изъять при попытке запустить программу:
%Волновые колебания мембраны
%Переработка файла VIBES фирмы MathWorks. Inc.
if~exist('MovieGUIFlag'): figNumber=0; end;
hlpStr= ...
[' Это пример анимации - наблюдение колебаний '
' трехмерной поверхности - мембраны. ']:
mvinit(figNumber.hlpStr):
% Загрузка данных функции
load vibesdat;
[n.n] = size(Ll):
nh = fix(n/2): .
x = (-nh:nh)/nh;
% Вычисление коэффициентов
clear с
for k = 1:12.
eval(['c(k) = L' num2str(k) '(24,13)73:'])
end;
% Установка графических параметров
axis([-11-11-11]); caxis(26.9*[-1.5 1]);
colormap(hot); hold on
% Генерация кадров мультипликации
delt = 0.1;
nf names =12:
M - moviein(nf names):
fon k - l:nf names,
% Коэффициенты
t = k*delt;
s = c.*sin(sqnt(1ambda)*t);
% Амплитуды
L = s(l)*Ll + s(2)*L2 + s(3)*L3 + s(4)*L4 +
s(5)*L5 + s(6)*L6 + .
S(7)*L7 + s(8)*l_8 + s(9)*L9 + s(10)*L10 +
s(ll)*Lll + s(12)*L12;
% Скорость мультипликации
s = s .* lambda;
V = s(l)*Ll + s(2)*L2 +'sC3)*L3 +
s(4)*L4 + s(5)*L5 + s(6)*L6 + ...
s(7)*L7 + s(8)*L8 + s(9)*L9 + s(10)*L10 +
s(11)*L11 + s(12)*L12;
% График поверхности; цвет задается скоростью
V(l:nh.l:nh) = NaN*ones(nh,nh);
Cla
sunf(x.x.L.V);
axis off
% Создание кадров мультипликации
M(:.k) - mvfname(f1gNumben,nfnames): end : hold off
%=======================================
% Запись кадров мультипликации
mvstone( figNumben , M) ;
Этот пример дан с целью иллюстрации, и подробно эту программу мы описывать не будем. К сожалению, в представленном виде (с русскоязычными комментариями), данная программа MATLAB 6 неработоспособна. Чтобы она работала, эти комментарии должны быть убраны или заменены англоязычными. В этом случае проблем с запуском программы не будет.
Объекты дескрипторной графики
Как уже отмечалось, графические средства MATLAB базируются на низкоуровневой графике, которая называется дескрипторной (описательной), или handle графикой. По существу, эта графика обеспечивает объектно-ориентированное программирование как всех рассмотренных выше графических команд, так и пользовательского интерфейса. Графический редактор дескрипторной графики Property Editor в MATLAB 6 является основным редактором графики и нами уже использовался. Хотя обычный пользователь может даже не знать о существовании дескрипторной графики ввиду того, что слово «дескрипторная» в сокращенное название графического редактора не входит, все же надо учитывать, что именно дескрипторная графика дает новые, подчас уникальные возможности создания пользовательских графических программ MATLAB 6, не говоря уже о том, что она помогает понять, каким образом реализованы графические средства системы.
Центральным понятием дескрипторной графики является графический объект. Имеются следующие типы таких объектов:
root (корень) — первичный объект, соответствующий экрану компьютера;
figure (рисунок) — объект создания графического окна;
uicontrol (элемент управления, определенный пользователем) — объект создания элемента пользовательского интерфейса;
axes (оси) — объект, задающий область расположения графика в окне объекта figure;
uimenu (определенное пользователем меню) — объект создания меню;
uicontextmenu (определенное пользователем контекстное меню) - объект создания контекстного меню;
image (образ) — объект создания растровой графики;
line (линия) — объект создания линии;
patch (заплата) — объект создания закрашенных фигур;
rectangle (прямоугольник) - объект создания закрашенных прямоугольников;
surface (поверхность) — объект создания поверхности;
text (текст) — объект создания текстовых надписей;
light (свет) — объект создания эффектов освещенности.
Объекты подчас взаимосвязаны и могут обращаться друг к другу для получения того или иного графического эффекта.
Создание графического окна и управление им
Прежде чем мы рассмотрим применение дескрипторной графики на реальных примерах, отметим команды и функции, которые предназначены для создания графических окон и управления ими:
figure — открыть чистое графическое окно;
gcf — получить дескриптор графического окна figure;
elf — очистить графическое окно;
shg — показать ранее свернутое графическое окно;
close (закрыть) — закрыть графическое окно;
refresh (обновить) — обновить графическое окно.
Эти команды и функции достаточно очевидны, и мы не будем обсуждать их подробно. Заметим, что команды help name или doc name позволяют уточнить назначение той или иной команды или функции с обобщенным именем name.
Создание координатных осей и управление ими
Еще одна группа простых команд служит для создания координатных осей и управления ими:
axes (оси) — создать оси координат;
box (ящик) — построить прямоугольник вокруг рисунка;
сlа — убрать построения axes;
gса — получить дескриптор графического объекта axes;
hold — сохранить оси координат;
ishold — проверка статуса hold (1, если оси сохранены, и 0 в противоположном случае).
Эти команды также достаточно очевидны. Заметим, что их можно использовать и в обычной (высокоуровневой) графике, например для устранения осей из уже созданного графика.
Пример применения объекта дескрипторной графики
Объем и направленность данной книги не позволяют подробно описать все многообразие возможностей дескрипторной графики. Ограничимся пока одним примером. Пусть надо построить линию,-проходящую через три точки с координатами (0,1), (2,4) и (5,-1). Для этого воспользуемся объектом line, который порождается одноименной графической функцией:
» line([0 2 5],[1 4 -1],'color ', 'blue')
На рис. 7.5 построена заданная линия с помощью дескрипторной команды line, которая явно не входит в высокоуровневую графику. Однако нетрудно понять, что именно эта команда составляет основу высокоуровневой команды pi ot, описанной ранее.
Особенность команды 1 i ne заключается в явном задании всех условий построения графика: координат конкретных точек, параметра цвета 'Color' и самого цвета 'blue' (синий). В итоге строятся два отрезка прямой, проходящих через заданные точки и имеющие синий цвет.
Рис. 7.4. Построение отрезков прямой объектом line
Дескрипторы объектов
С понятием объектов дескрипторной графики связана особая характеристика объектов — дескриптор (описатель). Его можно понимать как некое число — своеобразный идентификатор («распознаватель») объектов.
Рис. 7.5. Графики пяти функций, представляющих значения элементов магической матрицы magic(5)
Дескриптор объектов root всегда равен 0, а дескриптор объектов figure (рисунок) — это целое число, указывающее на номер графического окна. Дескрипторы других объектов — это числа с плавающей запятой. По значениям дескрипторов MATLAB идентифицирует объекты. Дескриптор одного такого объекта представляет собой одно число, а если объектов несколько — несколько чисел (вектор). Например, следующие команды строят пять графиков, представляющих значения элементов магической матрицы (магического квадрата), в одном окне:
» A=magic(5);
» h=plot(A)
h=
3.0013
101.0009
102.0004
103.0004
104.0004
В данном случае вектор h содержит дескрипторы элементов графика, показанного на рис. 7.5.
Мы еще раз обращаем ваше внимание на то, что дескрипторы дают лишь внутреннее описание того или иного объекта и ассоциировать их явно с привычными параметрами, например координатами или цветом объекта, не следует. Более того, нет никаких оснований считать их одинаковыми для разных версий MATLAB, для разных компьютерных платформ и даже для одинаковых команд, но в разных местах сессии.
Операции над графическими объектами
К графическим объектам применяется ряд операций:
set — установка свойств (параметров) графического объекта;
get — вывод свойств графического объекта;
reset — восстановить свойства графического объекта по умолчанию;
delete — удалить созданный графический объект;
gсо — возвращает дескриптор текущего графического объекта;
gcbo — возвращает дескриптор объекта, чья функция в данный момент выполняется;
gcbf — возвращает дескриптор окна, содержащего объект, функция которого в данный момент выполняется;
drawnow — выполнить очередь задержанных графических команд;
findobj — найти объекты с заданными свойствами;
copyobj — скопировать объект и порожденные им объекты.
Кроме того, имеются три утилиты, связанные с операциями над объектами:
closereq — закрыть окно по запросу;
ishandle — проверить дескриптор на истинность;
newplot — восстановить свойства объекта, измененные nextPlot.
Назначение большинства этих операций достаточно очевидно. Мы остановимся на двух наиболее важных операциях, связанных с контролем и установкой свойств объектов.
Свойства объектов — команда get
Каждый объект дескрипторной графики имеет множество параметров, определяющих его свойства. Вернемся к нашему примеру с построением графика из двух отрезков линии и повторим этот пример в следующем виде:
» h=line([0 2 5].[1 4 -1],'Color','blue')
h =
3.0010
Теперь объект имеет дескриптор h и его значение выведено наряду с построением графика. Команда get (name) выводит свойства объекта с заданным именем. Для нашего объекта это выглядит следующим образом:
» get(h) Color = [001]
EraseMode = normal
LineStyle=-
LineWidth = [0.5]
Marker = none
MarkerSize = [6]
MarkerEdgeColor = auto
MarkerFaceColor = none
XData = [0 2 5]
YData = [14 -1]
ZData - []
BeingDeleted = off
ButtonDownFcn =
Children = []
Clipping = on
CreateFcn =
DeleteFcn =
BusyAction = queue
HandleVisibility = on
HitTest = on
Interruptible = on
Parent = [100.001]
Selected =off
SelectionHighlight = on
Tag =
Type=line
UIContextMenu = []
UserData = []
Visible = on
Изменение свойств объекта — команда set
С помощью команды set можно изменить отдельные свойства объекта дескрипторной графики. Эта команда имеет множество параметров, и с ними можно ознакомиться с помощью команд help set или doc set. Ограничимся примером — допустим, нам надо сменить цвет линии с голубого на красный. Для этого достаточно выполнить следующую команду: » set(h,'Color'.'red')
Обратите внимание, что при этом цвет сменится на ранее построенном рисунке с дескриптором h.
Управление работой средств OpenGL
Как уже неоднократно отмечалось, одной из новинок системы MATLAB 6 является поддержка графических средств OpenGL. Эти средства обычно используются чаще всего при реализации трехмерной графики, например при осуществлении сло.жной функциональной окраски поверхностей и трехмерных фигур с учетом характера освещения и структуры материала (рендеринг), при осуществлении анимации для таких объектов, при построении поверхностей из многоугольников, осуществлении эффектов прозрачности и т. д. Целый ряд примеров этого уже приводился как в уроке 6, так и в данном уроке.
Средства OpenGL в MATLAB задействованы автоматически. Это значит, что они будут использованы, если видеокарта компьютера пользователя поддерживает их и если установлены соответствующие драйверы видеоадаптера. На уровне средств стандартной графики MATLAB никаких функций управления OpenGL нет. Однако дескрипторная графика такую возможность предоставляет с помощью команды opengl selectionjnode
Эта команда задает графические режимы осуществления рендеринга. Параметр selectl onjnode может принимать следующие значения:
autosel ect — задает автоматическое применение OpenGL и вводит в работу средства OpenGL при наличии возможностей для этого;
neverselect — отключает автоматическое применение OpenGL;
advise — выводит сообщение о возможности применения OpenGL, но режим рендеринга (RenderMode) устанавливается вручную.
Просто команда opengl выводит сообщение о текущем значении selectionjnode, например:
» opengl
ans =
AutoSelect
А команда opengl info выводит данные о средствах OpenGL ПК, на котором установлена система MATLAB, например:
» opengl info
Version = 1.1.0
Vendor = Microsoft Corporation
Renderer = GDI Generic
MaxTextureSize = 1024
Extensions = GL_WIN_swapJiint GL_EXT_bgra