Matlab m файлы. Расширение файла MATLAB Вывод списка пакетов расширения

М-файлы позволяют сохранять множество команд программы MATLAB в одном
файле, а затем запускать их одной командой или с использованием мыши.

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

М-файлы представляют собой обыкновенные текстовые файлы, содержащие
команды программы MATLAB. Вы можете создавать и модифицировать эти файлы,
используя любой текстовый редактор или текстовый процессор, который
способен сохранять файлы в виде простого текста в формате ASCII. (Это такие
редакторы, как Notepad и WordPad в системе Windows, и emacs и vi - в системах
UNIX.) Для большего удобства вы можете использовать встроенный модуль Editor
(Редактор), который можно запустить с помощью команды edit, сам по себе
(для редактирования нового файла), или выбрав имя существующего М-файла в
текущем каталоге. Для запуска модуля Editor (Редактор) вы можете также
использовать меню File (Файл) или два крайних слева значка на панели
инструментов, как для создания нового М-файла, так и для открытия уже
существующего. Двойной щелчок мышью на М-файле в окне Current Directory
(Текущий каталог) также откроет выбранный файл в модуле Editor (Редактор).

М-файлы-сценарии

М-файл-сценарий содержит последовательность команд программы MATLAB для
запуска в определенном порядке. Сейчас мы покажем, как сконструировать М-файл-
сценарий для решения математической задачи, рассмотренной ранее. Создайте
файл, содержащий следующие строки:

х = ;

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

Вы можете заставить программу MATLAB запустить (или выполнить) этот
сценарий, введя команду taski в окне Command Window (Командное окно). (Вам не
следует вводить здесь расширение.m; программа MATLAB автоматически
добавляет расширение, когда производит поиск файлов.) Вывод результатов (но не
команд, с помощью которых вычисляется результат) будет отображен в окне
Command Window (Командное окно). Теперь последовательность команд может
быть легко изменена путем модификации М-файла task1.m. Например, если вы
хотите вычислить также sin(0.0001)/ 0.0001, вы можете модифицировать М-файл:

format long
х = ;
у = sin(x)./x

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

  • Некоторые переменные, задаваемые при запуске М-файлов-сценариев, будутсохраняться, как если бы вы ввели эти переменные в окне Command Window (Командное окно) напрямую. Например, программа, рассмотренная выше, послужит причиной того, что в будущем все числовые результаты будут отображаться с точностью до 15 знака. Чтобы вернуться к формату с 5 знаками, следует ввести команду format short.

Режим ячейки

Новые возможности программы MATLAB 7 позволяют разделять М-файл -
сценарий на части (элементы), которые называются ячейками. Это особенно полезно,
если ваш М-файл длинный или если вы собираетесь его публиковать (последняя
тема рассматривается в разделе «Публикация М-файлов»). Чтобы запустить
новую ячейку, вставьте строку комментария (которая послужит в качестве
заголовка ячейки), начав эту строку двумя знаками процента %%. Если вы откроете
М-файл в модуле Editor (Редактор) и выберете команду меню Cell => Enable Cell
Mode (Ячейка => Включить режим ячейки), в этом случае под первой панелью
инструментов будет отображена вторая панель. Когда вы щелкнете мышью на
какой-нибудь строке в М-файле, ячейка, которой принадлежит эта строка, будет
выделена бледно-желтым цветом. Вы можете произвести вычисление этой
ячейки, выбрав команду меню Cell => Evaluate Current Cell (Ячейка => Вычислить
текущую ячейку) или щелкнув мышью на значке Evaluate cell (Вычислить ячейку).
Это может быть весьма полезным, если вы внесли изменения только в одну
ячейку и не хотите снова полностью запускать весь сценарий. Имеются также элемент
меню и значок для выполнения операции Evaluate cell and advance
(Вычислить ячейку и далее). Так как вы включили режим ячейки, вы можете также
создать дополнительные ячейки, выбрав команду меню Cell => Insert Cell Divider
(Ячейка => Вставить разделитель ячеек) или щелкнув мышью на значке %+ .

Инициализация М-файлов-сиенариев

Чтобы результаты М-файла-сценария были воспроизводимы, сценарий должен
быть автономным, независимым от других переменных, которые вы можете
задать где-либо в течение сессии программы MATLAB, оставшейся от предыдущих
вычислений графика должна быть также удалена. Например, если вы зададите
переменную с именем sin в окне Command Window (Командное окно), а затем
запустите сценарий task1.m, вы получите сообщение об ошибке, так как в
текущий момент sin будет представлять переменную, а не обычную встроенную
функцию. Помня об этом, вы можете ввести строку clear all в начало М-файла-
сценария, чтобы быть уверенным, что предыдущие настройки переменных не
повлияют на результаты. Вы можете также ввести строку close all в начале
М-файла-сценария, создающего графику, чтобы закрыть все окна изображений и
начать «с чистого листа».
Как отмечалось ранее, команды в М-файле-сценарии не будут автоматически
отображаться в окне Command Window (Командное окно). Если вы хотите, чтобы
команды отображались вместе с результатами, добавьте команду echo on в
начало сценария (нелишним будет также добавить команду echo off в конец
сценария). Тогда и любые комментарии в М-файле будут также отражены. При запуске
длинного М-файла-сценария подобная операция полезна, чтобы отслеживать:
какой вывод какому вводу соответствует.

Ниже представлена версия файла task1.m с более подробными комментариями, в
которой отображается как ввод, так и вывод.

clear all % remove old variable definitions
echo on % display the input in the command window
format long % turn on 15 digit display
x = ; % define the x values
у = sin(x)./x % compute the desired quotients
% These values illustrate the fact that the limit of
% sin(x)/x as x approaches 0 is equal to 1.
echo off

При запуске программа MATLAB производит поиск в пути по умолчанию на
предмет М-файла-сценария с именем startup.m. Если вы создадите такой файл, то
команды, которые он содержит, будут запускаться каждый раз, когда запускается
программа MATLAB. Вы можете использовать этот файл для сохранения настроек,
которые переходят из одной сессии в другую, например, изменения текущего
каталога или пути. (Кроме команд cd и addpath, рассмотренных выше, вы
можете использовать команду rmpath для удаления каталогов из пути.)

М-файлы-функиии

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

Давайте вернемся к рассмотренной выше задаче, в которой мы вычисляли
некоторые значения sin(x) /х, где х = 10^b при некоторых значениях b. Кроме
того, предположим, что вы хотите найти наименьшее значение b, для которого
sin(10^b)/ (10^b), и чтобы результат был равен 1 с точностью до 15 знаков.

Ниже представлен М-файл-функция с именем sinelimit.m, составленный с целью
выяснения этого вопроса:

function у = sinelimit (с)
% SINELIMIT computes sin (x)/x for x = 10^(-b)
% where b = 1, ..., с.
Format long
b = 1:c;
x = 10.^(-b);
у = (sin (x)./x) " ;

Первая строка файла начинается со слова function, которое идентифицирует
файл как М-файл-функцию. (В модуле Editor (Редактор) это зарезервированное
слово выделяется синим цветом.) Первая строка М-файла задает имя функции и
описывает как входящие аргументы (или параметры), так и исходящие значения.
В этом примере функция называется sinelimit. Имя файла (за исключением
расширения.т) и имя функции должны совпадать. Когда вы создаете этот новый
М-файл-функцию в безымянном окне редактора и выбираете команду Save
(Сохранить), модуль Editor (Редактор) сам присваивает файлу имя sinelimit.m.
Функция в нашем примере имеет для ввода один элемент, который внутри М-файла
обозначен как с. В качестве результата возвращается тоже один элемент -
значение у, появляющееся в конце выполнения функции.
Неплохой практикой является снабжать первую строку М-файла-функции одной
или более строками комментариев, разъясняющих, что делает М-файл. При этом
команда help автоматически извлечет данную информацию. Например:

>> help sinelimit

SINELIMIT computes sin (x)/x for x = 10^(-b)
where b = 1, . . . , с.

Остальные строки М-файла определяют функцию. В данном примере b задается в
качестве строчного вектора, состоящего из целых чисел от 1 до с, затем х
вычисляется из Ь, и, наконец, у определяется из х.

  • Переменные, которые используются в М-файле функции, такие как b, x и у в файле sinelimit.m, являются локальными переменными. Это означает, что, в отличие от переменных, заданных в М-файле-сценарии, эти переменные не связаны с любыми другими переменными с такими же именами, которые вы могли использовать в окне Command Window (Командное окно). Программа MATLAB не запоминает значения этих переменных после того, как М-файл-функция будет выполнен. Для получения более полных сведений обратитесь к разделу «Переменные в М-файлах- функциях» в главе 4.

Обратите внимание, что строки, задающие b, x и у, заканчивается точкой с
запятой. Использование точки с запятой в конце строк определяет отсутствие
вывода результатов для этих строк, то есть результат работы этих строк не будет
отображаться в окне Command Window (Командное окно). Несмотря на то, что
отображение результатов промежуточных вычислений может быть полезным
для отладки, в основном вам следует пресекать весь вывод в М-файле-функции.
Ниже представлен пример, показывающий, как используется функция sinelimit:

» sinelimit (5)
ans =
0.99833416646828
0.99998333341667
0.99999983333334
0.99999999833333
0.99999999998333

Ни одно из значений b от первого до пятого не приводит к желаемому
результату, 1 с точностью до 15 знака. Судя по выведенному результату, можно надеяться
найти ответ на ранее поставленный вопрос, введя команду sinelimit A0).
Попробуйте!

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

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

    математические вычисления

    создание алгоритмов

    моделирование

    анализ данных, исследования и визуализация

    научная и инженерная графика

    разработка приложений, включая создание графического интерфейса

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

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

Система MATLAB

Система MATLAB состоит из пяти основных частей:

    Язык MATLAB . Это язык матриц и массивов высокого уровня с управлением по­токами, функциями, структурами данных, вводом-выводом и особенностями объектно-ориентированного программирования. Это позволяет как программи­ровать в "небольшом масштабе" для быстрого создания черновых программ, так и в "большом" для создания больших и сложных приложений.

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

    Управляемая графика. Это графическая система MATLAB, которая включает в себя команды высокого уровня для визуализации двух- и трехмерных данных, обработки изображений, анимации и иллюстрированной графики. Она также включает в себя команды низкого уровня, позволяющие полностью редактиро­вать внешний вид графики, также как при создании Графического Пользова­тельского Интерфейса (GUI) для MATLAB приложений.

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

    Программный интерфейс. Это библиотека, которая позволяет писать программы на Си и Фортране, которые взаимодействуют с MATLAB. Она включает средства для вызова программ из MATLAB (динамическая связь), вызывая MATLAB как вычислительный инструмент и для чтения-записи МАТ-файлов.

Пакеты расширения Matlab.

Вывод списка пакетов расширения

Полный состав системы MATLAB содержит ряд компонентов, название, номер версии и дату создания которых можно вывести на просмотр командой ver:

    Simulink for Windows

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

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

    Real Time Windows Target и Workshop

Подключающаяся к Simulink мощная подсистема имитационного моделирования в реальном масштабе времени (при наличии дополнительных аппаратных средств в виде плат расширения компьютера), представленная пакетами расширения Real Time Windows Target и Workshop, - мощное средство управления реальными объектами и системами.

    Report Generator для MATLAB и Simulink

Генераторы отчетов дает информацию о работе системы MATLAB и пакета расширения Simulink. Это средство очень полезно при отладке сложных вычислительных алгоритмов или при моделировании сложных систем. Генераторы отчетов запускаются командой Report. Отчеты могут быть представлены в виде программ и редактироваться.

    Neural Networks Toolbox

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

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

    Fuzzy Logic Toolbox

Пакет прикладных программ Fuzzy Logic относится к теории нечетких (размытых) множеств. Обеспечивается поддержка современных методов нечеткой кластеризации и адаптивных нечетких нейронных сетей. Графические средства пакета позволяют интерактивно отслеживать особенности поведения системы.

    Symbolic Math Toolbox

Пакет прикладных программ, дающих системе MATLAB принципиально новые возможности - возможности решения задач в символьном (аналитическом) виде, включая реализацию точной арифметики произвольной разрядности. Пакет базируется на применении ядра символьной математики одной из самых мощных систем компьютерной алгебры - Maple V R4. Обеспечивает выполнение символьного дифференцирования и интегрирования, вычисление сумм и произведений, разложение в ряды Тейлора и Маклорена, операции со степенными многочленами (полиномами), вычисление корней полиномов, решение в аналитическом виде нелинейных уравнений, всевозможные символьные преобразования, подстановки и многое другое.

Пакеты математических вычислений

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

    NAG Foundation Toolbox

Одна из самых мощных библиотек математических функций. Пакет содержит сотни новых функций.

    Spline Toolbox

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

    Statistics Toolbox

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

    Optimization Toolbox

Пакет прикладных задач- для решения оптимизационных задач и систем нелинейных уравнений. Поддерживает основные методы оптимизации функций ряда переменных.

    Partial Differential Equations Toolbox

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

Пакеты анализа и синтеза систем управления

    Control System Toolbox

Пакет Control System предназначен для моделирования, анализа и проектирования систем автоматического управления - как непрерывных, так и дискретных.

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

    полный набор средств для анализа MIMO-систем (множество входов -

    множество выходов) систем;

    временные характеристики: передаточная и переходная функции, реакция на

    произвольное воздействие;

    частотные характеристики: диаграммы Боде, Николса, Найквиста и др.;

    разработка обратных связей;

    проектирование LQR/LQE-регуляторов;

    характеристики моделей: управляемость, наблюдаемость, понижение порядка моделей;

    поддержка систем с запаздыванием.

Пакет Control System содержит средства для выбора параметров обратной связи.

Среди традиционных методов: анализ особых точек, определение коэффициента усиления и затухания.

Среди современных методов: линейно-квадратичное регулирование и др. Пакет Control System включает большое количество алгоритмов для проектирования и анализа систем управления. Кроме того, он обладает настраиваемым окружением и позволяет создавать свои собственные m-файлы.

    Nonlinear Control Design Toolbox

Nonlinear Control Design (NCD) Blockset реализует метод динамической оптимизации для проектирования систем управления. Этот инструмент, разработанный для использования с Simulink, автоматически настраивает системные параметры, основываясь на определенных пользователем ограничениях на временные характеристики.

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

    Robust Control Toolbox

Пакет Robust Control включает средства для проектирования и анализа многопараметрических устойчивых систем управления. Это системы с ошибками моделирования, динамика которых известна не полностью или параметры которых могут изменяться в ходе моделирования. Мощные алгоритмы пакета позволяют выполнять сложные вычисления с учетом изменения множества параметров.

    Model Predictive Control Toolbox

Пакет Model Predictive Control содержит полный набор средств для реализации стратегии предиктивного (упреждающего) управления. Эта стратегия была разработана для решения практических задач управления сложными многоканальными процессами при наличии ограничений на переменные состояния и управление. Методы предикативного управления используются в химической промышленности и для управления другими непрерывными процессами.

Пакет содержит более полусотни специализированных функций для проектирования, анализа и моделирования динамических систем с использованием предикативного управления. Он поддерживает следующие типы систем: импульсные, непрерывные и дискретные по времени, пространство состояний. Обрабатываются различные виды возмущений.

    (Мю)-Analysis and Synthesis

Пакет p-Analysis and Synthesis содержит функции для проектирования устойчивых систем управления. Пакет использует оптимизацию в равномерной норме и сингулярный параметр и. В этот пакет включен графический интерфейс для упрощения операций с блоками при проектировании оптимальных регуляторов.

    Stateflow

Stateflow - пакет моделирования событийно-управляемых систем, основанный на теории конечных автоматов. Этот пакет предназначен для использования вместе с пакетом моделирования динамических систем Simulink. В любую Simulink-модель можно вставить Stateflow-диаграмму (или SF-диаграмму), которая будет отражать поведение компонентов объекта (или системы) моделирования.

SF-диаграмма является анимационной. По ее выделяющимся цветом блокам и связям можно проследить все стадии работы моделируемой системы или устройства и поставить ее работу в зависимость от тех или иных событий.

    Quantitative Feedback Theory Toolbox

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

    LMI Control Toolbox

Пакет LMI (Linear Matrix Inequality) Control обеспечивает интегрированную среду для постановки и решения задач линейного программирования. Предназначенный первоначально для проектирования систем управления пакет позволяет решать любые задачи линейного программирования практически в любой сфере деятельности, где такие задачи возникают. Основные возможности пакета:

исследование задач линейного программирования;

графический редактор задач линейного программирования;

задание ограничений в символьном виде;

многокритериальное проектирование регуляторов;

проверка устойчивости: квадратичная устойчивость линейных систем, устойчивость по Ляпунову, проверка критерия Попова для нелинейных систем.

Пакет LMI Control включает два вида графического интерфейса пользователя: редактор задачи линейного программирования (LMI Editor) и интерфейс Magshape. LMI Editor позволяет задавать ограничения в символьном виде, a Magshape обеспечивает пользователя удобными средствами работы с пакетом.

Пакеты идентификации систем

    System Identification Toolbox

Пакет System Identification содержит средства для создания математических моделей динамических систем на основе наблюдаемых входных и выходных данных.

    Domain System Identification Toolbox

Пакет Frequency Domain System Identification предоставляет специализированные средства для идентификации линейных динамических систем по их временному или частотному отклику. Частотные методы направлены на идентификацию непрерывных систем, что является мощным дополнением к более традиционной дискретной методике. Методы пакета могут быть применены к таким задачам, как моделирование электрических, механических и акустических систем.

Дополнительные пакеты расширения Matlab

    Communications Toolbox

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

    Digital Signal Processing (DSP ) Blockset

Пакет прикладных программ для проектирования устройств, использующих процессоры цифровой обработки сигналов. Это прежде всего высокоэффективные цифровые фильтры с заданной или адаптируемой к параметрам сигналов частотной характеристикой (АЧХ). Результаты моделирования и проектирования цифровых устройств с помощью этого пакета могут использоваться для построения высокоэффективных цифровых фильтров на современных микропроцессорах цифровой обработки сигналов.

    Fixed-Point Blockset

Этот специальный пакет ориентирован на моделирование цифровых систем управления и цифровых фильтров в составе пакета Simulink.

Пакеты для обработки сигналов и изображений

    Signal Processing Toolbox

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

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

    Higher-Order Spectral Analysis Toolbox

Пакет Higher-Order Spectral Analysis содержит специальные алгоритмы для анализа сигналов с использованием моментов высшего порядка. Пакет предоставляет широкие возможности для анализа негауссовых сигналов, так как содержит алгоритмы, пожалуй, самых передовых методов для анализа и обработки сигналов.

Работа из командной строки MatLab затруднена, если требуется вводить много команд и часто их изменять. Ведение дневника при помощи команды diary и сохранение рабочей среды лишь незначительно облегчает работу. Самым удобным способом выполнения команд MatLab является использование М-файлов, в которых можно набирать команды, выполнять их все сразу или частями, сохранять в файле и использовать в дальнейшем. Для работы с М-файлами предназначен редактор М-файлов. При помощи этого редактора можно создавать собственные функции и вызывать их, в том числе и из командной строки.

Раскройте меню File основного окна MatLab и в пункте New выберите подпункт M-file . Новый файл открывается в окне редактора М-файлов.

Наберите в редакторе команды, приводящие к построению двух графиков в одном графическом окне:

x = ;
f = exp(-x);
subplot(1, 2, 1)
plot(x, f)
g = sin(x);
subplot(1, 2, 2)
plot(x, g)

Сохраните теперь файл с именем mydemo.m в подкаталоге work основного каталога MatLab, выбрав пункт Save as меню File редактора. Для запуска на выполнение всех команд, содержащихся в файле, следует выбрать пункт Run в меню Debug. На экране появится графическое окно Figure No.1, содержащее графики функций. Если Вы решили построить график косинуса вместо синуса, то просто измените строку g = sin(x) в М-файле на g = cos(x) и запустите все команды снова.

Замечание 1

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

Очень удобной возможностью, предоставляемой редактором М-файлов, является выполнение части команд. Закройте графическое окно Figure No.1. Выделите при помощи мыши, удерживая левую кнопку, или клавишами со стрелками при нажатой клавише , первые четыре команды программы и выполните их из пункта Evaluate Selection меню Text . Обратите внимание, что в графическое окно вывелся только один график, соответствующий выполненным командам. Запомните, что для выполнения части команд их следует выделить и нажать . Выполните оставшиеся три команды программы и проследите за состоянием графического окна. Потренируйтесь самостоятельно, наберите какие-либо примеры из предыдущих лабораторных работ в редакторе М-файлов и запустите их.

Отдельные блоки М-файла можно снабжать комментариями, которые пропускаются при выполнении, но удобны при работе с М-файлом. Комментарии в MatLab начинаются со знака процента и автоматически выделяются зеленым цветом, например:

%построение графика sin(x) в отдельном окне

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

Открытие существующего М-файла производится при помощи пункта Open меню File рабочей среды, либо редактора М-файлов. Открыть файл в редакторе можно и командой MatLab edit из командной строки, указав в качестве аргумента имя файла, например:

Команда edit без аргумента приводит к созданию нового файла.
Все примеры, которые встречаются в этой и следующих лабораторных работах, лучше всего набирать и сохранять в М-файлах, дополняя их комментариями, и выполнять из редактора М-файлов. Применение численных методов и программирование в MatLab требует создания М-файлов.

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

М-файлы в MatLab бывают двух типов: файл-программы (Script M-Files), содержащие последовательность команд, и файл-функции (Function M-Files), в которых описываются функции, определяемые пользователем.

Файл-программу (файл-процедуру) Вы создали при прочтении предыдущего подраздела. Все переменные, объявленные в файл-программе, становятся доступными в рабочей среде после ее выполнения. Выполните в редакторе М?файлов файл-программу, приведенную в подразделе 2.1, и наберите команду whos в командной строке для просмотра содержимого рабочей среды. В командном окне появится описание переменных:

» whos
Name Size Bytes Class
f 1x71 568 double array
g 1x71 568 double array
x 1x71 568 double array
Grand total is 213 elements using 1704 bytes

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

  • Из редактора М-файлов так, как описано выше.
  • Из командной строки или другой файл-программы, при этом в качестве команды используется имя М-файла.

Применение второго способа намного удобнее, особенно, если созданная файл-программа будет неоднократно использоваться впоследствии. Фактически, созданный М-файл становится командой, которую понимает MatLab. Закройте все графические окна и наберите в командной строке mydemo, появляется графическое окно, соответствующее командам файл-программы mydemo.m. После ввода команды mydemo MatLab производит следующие действия.

  • Проверяет, является ли введенная команда именем какой-либо из переменных, определенных в рабочей среде. Если введена переменная, то выводится ее значение.
  • Если введена не переменная, то MatLab ищет введенную команду среди встроенных функций. Если команда оказывается встроенной функцией, то происходит ее выполнение.

Если введена не переменная и не встроенная функция, то MatLab начинает поиск М-файла с названием команды и расширением m . Поиск начинается с текущего каталога (Current Directory), если М-файл в нем не найден, то MatLab просматривает каталоги, установленные в пути поиска (Path). Найденный М-файл выполняется в MatLab.

Если ни одно из вышеперечисленных действий не привело к успеху, то выводится сообщение в командное окно, например:

» mydem
??? Undefined function or variable "mydem".

Как правило, М-файлы хранятся в каталоге пользователя. Для того чтобы система MatLab могла найти их, следует установить пути, указывающие расположение М-файлов.

Замечание 2

Хранить собственные М-файлы вне основного каталога MatLab следует по двум причинам. Во-первых, при переустановке MatLab файлы, которые содержатся в подкаталогах основного каталога MatLab, могут быть уничтожены. Во-вторых, при запуске MatLab все файлы подкаталога toolbox размещаются в памяти компьютера некоторым оптимальным образом так, чтобы увеличить производительность работы. Если вы записали М-файл в этот каталог, то воспользоваться им можно будет только после перезапуска MatLab.

3. Установка путей

В MatLab версий 6.x определяется текущий каталог и пути поиска. Установка этих свойств производится либо при помощи соответствующих диалоговых окон либо командами из командной строки.

Текущий каталог определяется в диалоговом окне Current Directory рабочей среды. Окно присутствует в рабочей среде, если выбран пункт Current Directory меню View рабочей среды.
Текущий каталог выбирается из списка. Если его нет в списке, то его можно добавить из диалогового окна Browse for Folder, вызываемого нажатием на кнопку, расположенную справа от списка. Содержимое текущего каталога отображается в таблице файлов.

Определение путей поиска производится в диалоговом окне Set Path навигатора путей, доступ к которому осуществляется из пункта Set Path меню File рабочей среды.

Для добавления каталога нажмите кнопку Add Folder Browse for Path выберите требуемый каталог. Добавление каталога со всеми его подкаталогами осуществляется при нажатии на кнопку Add with Subfolders. MATLAB search path. Порядок поиска соответствует расположению путей в этом поле, первым просматривается каталог, путь к которому размещен вверху списка. Порядок поиска можно изменить или вообще удалить путь к какому-либо каталогу, для чего выделите каталог в поле MATLAB search path и определите его положение при помощи следующих кнопок:
Move to Top - поместить вверх списка;
Move Up - переместить вверх на одну позицию;
Remove - удалить из списка;
Move Down - переместить вниз на одну позицию;
Move to Bottom - поместить вниз списка.

4. Команды для установки путей.

Действия по установке путей в MatLab 6.x дублируются командами. Текущий каталог устанавливается командой cd, например cd c:\users\igor. Команда cd, вызванная без аргумента, выводит путь к текущему каталогу. Для установки путей служит команда path, вызываемая с двумя аргументами:

path (path, "c:\users\igor") - добавляет каталог c:\users\igor с низшим приоритетом поиска;
path ("с: \users\igor",path) - добавляет каталог c:\users\igor с высшим приоритетом поиска.

Использование команды path без аргументов приводит к отображению на экране списка путей поиска. Удалить путь из списка можно при помощи команды rmpath:

rmpath ("с:\users\igor") удаляет путь к каталогу c:\users\igor из списка путей.

Замечание 3

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

Пример. Создайте в корневом каталоге диска D (или любом другом диске или каталоге, где студентам разрешено создавать свои каталоги) каталог со своей фамилией, например, WORK_IVANOV, и запишите туда М-файл mydemo.m под именем mydemo3.m. Установите пути к файлу и продемонстрируйте доступность файла из командной строки. Результаты приведите в отчете по лабораторной работе.

Вариант решения:

1. В корневом каталоге диска D создается каталог WORK_IVANOV.
2. В каталог WORK_IVANOV записывается М-файл mydemo.m под именем mydemo3.m.
3. Открывается диалоговое окно Set Path меню File рабочей среды MatLab.
4. Нажимается кнопка Add Folder и в появившемся диалоговом окне Browse for Path выбирается каталог WORK_IVANOV.
5. Добавление каталога со всеми его подкаталогами осуществляется при нажатии на кнопку Add with Subfolders. Путь к добавленному каталогу появляется в поле MATLAB search path.
6. Для запоминания пути нажимается клавиша Save диалогового окна Set Path.
7. Выполняется проверка правильности всех действий путем набора команды mydemo3 из командной строки. На экране появится графическое окно.

5. Файл-функции

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

5.1. Файл-функции с одним входным аргументом

Предположим, что в вычислениях часто необходимо использовать функцию

Имеет смысл один раз написать файл-функцию, а потом вызывать её всюду, где необходимо вычисление этой функции. Откройте в редакторе М-файлов новый файл и наберите текст листинга

function f = myfun(x)
f= ехр(-х)*sqrt((х^2+1)/(х^4+0.1));

Слово function в первой строке определяет, что данный файл содержит файл-функцию. Первая строка является заголовком функции, в которой размещается имя функции и списки входных и выходных аргументов. В примере, приведенном в листинге, имя функции myfun, один входной аргумент х и один выходной - f. После заголовка следует тело функции (оно в данном примере состоит из одной строки), где и вычисляется ее значение. Важно, что вычисленное значение записывается в f. Точка с запятой поставлена для предотвращения вывода лишней информации на экран.

Теперь сохраните файл в рабочем каталоге. Обратите внимание, что выбор пункта Save или Save as меню File приводит к появлению диалогового окна сохранения файла, в поле File name которого уже содержится название myfun. He изменяйте его, сохраните файл-функцию в файле с предложенным именем.

Теперь созданную функцию можно использовать так же, как и встроенные sin, cos и другие, например из командной строки:

» у =myfun(1.3)
У =
0.2600

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

Предупреждение

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

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

» х = ;
» у = myfun(x)
??? Error using ==> ^
Matrix must be square.
Error in ==> C:\MATLABRll\work\myfun.m
On line 2 ==> f = exp(-x)*sqrt((х^2+1)/(х^4+1));

Если вы изучили работу с массивами, то устранение этого недостатка не вызовет затруднений. Необходимо просто при вычислении значения функции использовать поэлементные операции.
Измените тело функции, как указано в следующем листинге (не забудьте сохранить изменения в файле myfun.m).

function f = myfun(x)
f = ехр(-х).*sqrt((х.^2+1)./(х.^4+0.1));

Теперь аргументом функции myfun может быть как число, так и вектор или матрица значений, например:

» х = ;
» у = myfun(x)
У =
0.2600 0.0001

Переменная у, в которую записывается результат вызова функции myfun, автоматически становится вектором нужного размера.

Постройте график функции myfun на отрезке из командной строки или при помощи файл-программы:

x = ;
у = myfun(x);
plot(x, у)

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

fplot("myfun", )

Постройте графики myfun при помощи plot и fplot на одних осях, при помощи hold on. Обратите внимание, что график, построенный при помощи fplot, более точно отражает поведение функции, т. к. fplot сама подбирает шаг аргумента, уменьшая его на участках быстрого изменения отображаемой функции. Результаты приведите в отчете по лабораторной работе.

5.2. Файл-функции с несколькими входными аргументами

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

function r = radius3(x, у, z)
r = sqrt(х.^2 + у.^2 + z.^2);

» R = radius3(1, 1, 1)
R =
1.732

Кроме функций с несколькими входными аргументами, MatLab позволяет создавать функции, возвращающие несколько значений, т.е. имеющие несколько выходных аргументов.

5.3. Файл-функции с несколькими выходными аргументами

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

Листинг функции перевода секунд в часы, минуты и секунды

function = hms(sec)
hour = floor(sec/3600);
minute = floor((sec-hour*3600)/60);
second = sec-hour*3600-minute*60;

При вызове файл-функций с несколькими выходными аргументами результат следует записывать в вектор соответствующей длины:

» [Н, М, S] = hms(10000)
H =
2
М =
46
S =
40

6. Основы программирования в MatLab

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

6.1. Оператор цикла for

Оператор предназначен для выполнения заданного числа повторяющихся действий. Самое простое использование оператора for осуществляется следующим образом:

for count = start:step:final
команды MatLab
end

Здесь count - переменная цикла, start - ее начальное значение, final - конечное значение, а step - шаг, на который увеличивается count при каждом следующем заходе в цикл. Цикл заканчивается, как только значение count становится больше final. Переменная цикла может принимать не только целые, но и вещественные значения любого знака. Разберем применение оператора цикла for на некоторых характерных примерах.
Пусть требуется вывести семейство кривых для , которое задано функцией, зависящей от параметра для значений параметра от -0.1 до 0.1.
Наберите текст файл-процедуры в редакторе М-файлов и сохраните в файле FORdem1.m, и запустите его на выполнение (из редактора М-файлов или из командной строки, набрав в ней команду FORdem1 и нажав ):

% файл-программа для построения семейства кривых
x = ;
for a = -0.1:0.02:0.1
y = exp(-a*x).*sin(x);
hold on
plot(x, y)
end

Замечание 4

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

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

Напишите файл-программу для вычисления суммы

Алгоритм вычисления суммы использует накопление результата, т.е. сначала сумма равна нулю (S = 0), затем в переменную k заносится единица, вычисляется 1/k !, добавляется к S и результат снова заносится в S . Далее k увеличивается на единицу, и процесс продолжается, пока последним слагаемым не станет 1/10!. Файл-программа Fordem2, приведенная в следующем листинге, вычисляет искомую сумму.

Листинг файл-программы Fordem2 для вычисления суммы

% файл-программа для вычисления суммы
% 1/1!+1/2!+ … +1/10!

% Обнуление S для накопления суммы
S = 0;
% накопление суммы в цикле
for k = 1:10
S = S + 1/factorial(k);
End
% вывод результата в командное окно S

Наберите файл-программу в редакторе М-файлов, сохраните её в текущем каталоге в файле Fordem2.m и выполните. Результат отобразится в командном окне, т.к. в последней строке файл-программы S содержится без точки с запятой для вывода значения переменной S

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

Первые две строки с комментариями не случайно отделены пустой строкой от остального текста программы. Именно они выводятся на экран, когда пользователь при помощи команды help из командной строки получает информацию о том, что делает Fordem2

>> help Fordem2
файл-программа для вычисления суммы
1/1!+1/2!+ … +1/10!

При написании файл-программ и файл-функций не пренебрегайте комментариями!
Все переменные, использующиеся в файл-программе, становятся доступными в рабочей среде. Они являются, так называемыми, глобальными переменными. С другой стороны, в файл-программе могут использоваться все переменные, введенные в рабочей среде.

Рассмотрим задачу вычисления суммы, похожую на предыдущую, но зависящую от переменной x

Для вычисления данной суммы в файл-программе Fordem2 требуется изменить строку внутри цикла for на

S = S + x.^k/factorial(k);

Перед запуском программы следует определить переменную x в командной строке при помощи следующих команд:

>> x = 1.5;
>> Fordem2
S =
3.4817

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

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

Листинг файл-функции для вычисления суммы

function S = sumN(x, N)
% файл-функция для вычисления суммы
% x/1!+x^2/2!+ … +x^N/N!
% использование: S = sumN(x, N)

% обнуление S для накопления суммы
S = 0;
% накопление суммы в цикле
for m = 1:1:N
S = S + x.^m/factorial(m);
end

Об использовании функции sumN пользователь может узнать, набрав в командной строке help sumN. В командное окно выведутся первые три строки с комментариями, отделенные от текста файл-функции пустой строкой.

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

Циклы for могут быть вложены друг в друга, при этом переменные вложенных циклов должны быть разными.

Цикл for оказывается полезным при выполнении повторяющихся похожих действий в том случае, когда их число заранее определено. Обойти это ограничение позволяет более гибкий цикл while.

6.2. Оператор цикла while

Рассмотрим пример на вычисление суммы, похожий на пример из предыдущего пункта. Требуется найти сумму ряда для заданного x (разложение в ряд ):
.

Сумму можно накапливать до тех пор, пока слагаемые являются не слишком маленькими, скажем больше по модулю Циклом for здесь не обойтись, так как заранее неизвестно число слагаемых. Выход состоит в применении цикла while, который работает, пока выполняется условие цикла:

while условие цикла
команды MatLab
end

В данном примере условие цикла предусматривает, что текущее слагаемое больше . Для записи этого условия используется знак больше (>). Текст файл-функции mysin, вычисляющей сумму ряда, приведен в следующем листинге.

Листинг файл-функции mysin, вычисляющей синус разложением в ряд

function S = mysin(x)
% Вычисление синуса разложением в ряд
% Использование: y = mysin(x), -pi

S = 0;
k = 0;
while abs(x.^(2*k+1)/factorial(2*k+1))>1.0e-10
S = S + (-1)^k*x.^(2*k+1)/factorial(2*k+1);
k = k + 1;
end

Обратите внимание, что у цикла while, в отличие от for, нет переменной цикла, поэтому пришлось до начала цикла k присвоить нуль, а внутри цикла увеличивать k на единицу.
Условие цикла while может содержать не только знак >. Для задания условия выполнения цикла допустимы также другие операции отношения, приведенные в табл. 1.

Таблица 1. Операции отношения

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

and(x >= -1, x < 2)

или эквивалентным образом с символом &

(x >= -1) & (x < 2)

Логические операторы и примеры их использования приведены в табл. 2.

Таблица 2. Логические операторы

Оператор

Запись в MatLab

Эквивалентная запись

Логическое "И"

and(x < 3, k == 4)

(x < 3) & (k == 4)

Логическое "ИЛИ"

Or(x == 1,x == 2)

(x == 1) | (x == 2)

Отрицание "НЕ"

При вычислении суммы бесконечного ряда имеет смысл ограничить число слагаемых. Если ряд расходится из-за того, что его члены не стремятся к нулю, то условие на малое значение текущего слагаемого может никогда не выполниться и программа зациклится. Выполните суммирование, добавив в условие цикла while файл-функции mysin ограничение на число слагаемых:

while (abs(x.^(2*k+1)/factorial(2*k+1))>1.0e-10)&(k<=10000))

или в эквивалентной форме

while and(abs(x.^(2*k+1)/factorial(2*k+1))>1.0e-10), k<=10000)

Организация повторяющихся действий в виде циклов делает программу простой и понятной, однако часто требуется выполнить тот или иной блок команд в зависимости от некоторых условий, т.е. использовать ветвление алгоритма.

6.3. Условный оператор if

Условный оператор if позволяет создать разветвляющийся алгоритм выполнения команд, в котором при выполнении определенных условий работает соответствующий блок операторов или команд MatLab.

Оператор if может применяться в простом виде для выполнения блока команд при удовлетворении некоторого условия или в конструкции if-elseif-else для написания разветвляющихся алгоритмов.
Пусть требуется вычислить выражение . Предположим, что вычисления выполняются в области действительных чисел и требуется вывести предупреждение о том, что результат является комплексным числом. Перед вычислением функции следует произвести проверку значения аргумента x, и вывести в командное окно предупреждение, если модуль x не превосходит единицы. Здесь необходимо применение условного оператора if, применение которого в самом простом случае выглядит так:

if условие
команды MatLab
end

Если условие выполняется, то реализуются команды MatLab, размещенные между if и end, а если условие не выполняется, то происходит переход к командам, расположенным после end. При записи условия используются операции, приведенные в табл. 1.

Файл-функция, проверяющая значение аргумента, приведена в следующем листинге. Команда warning служит для вывода предупреждения в командное окно.

Листинг файл-функции Rfun, проверяющей значение аргумента

function f = Rfun(x)
% вычисляет sqrt(x^2-1)
% выводит предупреждение, если результат комплексный
% использование y = Rfun(x)

% проверка аргумента
if abs(x)<1
warning("результат комплексный")
end
% вычисление функции
f = sqrt(x^2-1);

Теперь вызов Rfun от аргумента, меньшего единицы, приведет к выводу в командное окно предупреждения:

>> y = Rfun(0.2)
результат комплексный
y =
0 + 0.97979589711327i

Файл-функция Rfun только предупреждает о том, что ее значение комплексное, а все вычисления с ней продолжаются. Если же комплексный результат означает ошибку вычислений, то следует прекратить выполнение функции, используя команду error вместо warning.

6.4. Оператор ветвления if-elseif-else

В общем случае применение оператора ветвления if-elseif-else выглядит следующим образом:

if условие 1
команды MatLab
elseif условие 2
команды MatLab
elseif условие 3
команды MatLab
. . . . . . . . . . .
elseif условие N
команды MatLab
else
команды MatLab
end

В зависимости от выполнения того или иного из N условий работает соответствующая ветвь программы, если не выполняется ни одно из N условий, то реализуются команды MatLab, размещенные после else. После выполнения любой из ветвей происходит выход из оператора. Ветвей может быть сколько угодно или только две. В случае двух ветвей используется завершающее else, а elseif пропускается. Оператор должен всегда заканчиваться end.
Пример использования оператора if-elseif-else приведен в следующем листинге.

function ifdem(a)
% пример использования оператора if-elseif-else

if (a == 0)
warning("а равно нулю")
elseif a == 1
warning("а равно единице")
elseif a == 2
warning("а равно двум")
elseif a >= 3
warning("а, больше или равно трем")
else
warning("а меньше трех, и не равно нулю, единице, двум")
end

6.5. Оператор ветвления switch

Для осуществления множественного выбора или ветвления может применяться оператор switch. Он является альтернативой оператору if-elseif-else. В общем случае применение оператора ветвления switch выглядит следующим образом:

switch switch_выражение
case значение 1
команды MatLab
case значение 2
команды MatLab
. . . . . . . . . . .
case значение N
команды MatLab
case {значение N+1, значение N+2, …}
команды MatLab
. . . . . . . . . . . .
case {значение NM+1, значение NM+2,…}
otherwise
команды MatLab
end

В данном операторе сначала вычисляется значение switch_выражения (это может быть скалярное числовое значение либо строка символов). Затем это значение сравнивается со значениями: значение 1, значение 2, …, значение N, значение N+1, значение N+2, …, значение NM+1, значение NM+2,… (которые также могут быть числовыми либо строковыми). Если найдено совпадение, то выполняются команды MatLab, стоящие после соответствующего ключевого слова case. В противном случае выполняются команды MatLab, расположенные между ключевыми словами otherwise и end.

Строк с ключевым словом case может быть сколько угодно, но строка с ключевым словом otherwise должна быть одна.

После выполнения какой-либо из ветвей происходит выход из switch, при этом значения, заданные в других case не проверяются.

Применение switch поясняет следующий пример:

function demswitch(x)
a = 10/5 + x
switch a
case -1
warning("a = -1")
case 0
warning("a = 0")
case 1
warning("a = 1")
case {2, 3, 4}
warning("a равно 2 или 3 или 4")
otherwise
warning("a не равно -1, 0, 1, 2, 3, 4")
end

>> x = -4
demswitch(x)
a =
1
warning: a = 1
>> x = 1
demswitch(x)
a =
6
warning: a не равно -1, 0, 1, 2, 3, 4

6.6. Оператор прерывания цикла break

При организации циклических вычислений следует заботиться о том, чтобы внутри цикла не возникло ошибок. Например, пусть задан массив x, состоящий из целых чисел, и требуется сформировать новый массив y по правилу y(i) = x(i+1)/x(i). Очевидно, что задача может быть решена при помощи цикла for. Но если один из элементов исходного массива равен нулю, то при делении получится inf, и последующие вычисления могут оказаться бесполезными. Предотвратить эту ситуацию можно выходом из цикла, если текущее значение x(i) равно нулю. Следующий фрагмент программы демонстрирует использование оператора break для прерывания цикла:

for x = 1:20
z = x-8;
if z==0
break
end
y = x/z
end

Как только переменная z принимает значение 0, цикл прерывается.

Оператор break позволяет досрочно прервать выполнение циклов for и while. Вне этих циклов оператор break не работает.

Если оператор break применяется во вложенном цикле, то он осуществляет выход только из внутреннего цикла.

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

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

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

  • Команда open имя , где имя должно содержать массив символов или символьную переменную, открывает файлы в зависимости от анализа параметра имя и расширения в имени имя:
    • переменная - открывает массив, названный по имени, в редакторе массивов (Array Editor);
    • .mat - открывает файл, сохраняет переменные в структуре в рабочей области;
    • .fig - открывает его в редакторе дескрипторонй графики Property Editor;
    • .m - открывает m-файл в редакторе-отладчике;
    • .mdl - открывает модель в Simulink;
    • - открывает, если он есть, m-файл с тем же именем;
    • .html - открывает HTML документ в браузере помощи.

Если файлы с расширением существуют в пути MATLAB, то открывается тот файл, который возвращается командой which имя, если нет - то файл из файловой системы. Если файл не имеет расширение имени, то он открывается той программой, формат файлов которой был бы обнаружен функцией which ("имя файла") По умолчанию для всех файлов с окончаниями, отличными от вышеперечисленных, вызывается openother. Open вызывает функции орепххх, где ххх - расширение файла. Исключение - переменные рабочей области, для которых вызывается openvar, и рисунки, для работы с которыми вызывается openim. Создавая т-файлы с именем орепххх, пользователи могут изменять обработку файлов и добавлять новые расширения в список. Закрывать файлы, открытые при помощи open, нужно из редакторов, вызываемых ореnххх.

  • = uigetfile(FILTERSPEC. Title) . Открывает диалог с именем Title и фильтром FILTERSPEC (например, массивом ячеек, содержащим расширения файлов) и возвращает файл, выбранный пользователем, и путь к нему. Возвращает FILENAME=0, если файл не существует или если пользователь нажал на Cancel. = uigetfile (FILTERSPEC, Title. X. Y) размещает окно диалога в точке X, Y (координаты в пикселях).

Uigetfile("*.m;*.fig;*.mat:*.mdl" , "All MATLAB Files (*.m, *.fig, *.mat. *.mdl)")...

  • = uiputfile(FILTERSPEC. TITLE) сохраняет файл в диалоге, управляемом пользователем. Параметры аналогичны таковым в функции uigetfile.
  • Команда ui open открывает диалог, и если пользователь выбрал файл с известным расширением, вызывает его, используя open, или если имя файла имеет неизвестное расширение, то вызывается uigetfile. Входными аргументами uiopen могут быть mat lab, load, figure, simulink, editor. Без входных аргументов или с входным аргументом matlab в окне диалога предлагается выбрать *.m, *.fig, *.mat, *.mdl (если Simulink установлен), * .cdr (если state flow установлен), *.rtw, *.tmf, *.tlc, *.c, *.h, *.ads, *.adb (если установлен Real-Time Workshop). С аргументом load - *.mat. С аргументом figure предлагаются *.fig; simul ink - *.mdl, editor - *.m, *.mdt *.cdr, *.rtw, *.tmf, *.tlc, *.c, *.h, *.ads, *.adb.

Uiopen figure

  • Команда uiload открывает файл в диалоге, управляемом пользователем, с использованием команды load .

Функция ui import запускает Мастер импорта (Import Wizard), импортирующий из файла в текущей папке или буфера обмена Windows. Она соответствует выбору Import Data из меню File или выбору Paste Special из меню Edit MATLAB.

  • ui import (FILENAME) - запускает Мастер Импорта, открывая файл FILENAME. Мастер импорта показывает данные для предварительного просмотра. В окне предварительного просмотра появляются данные и их представление в виде переменных MATLAB. Собственно данные, текст и заголовки представляются разными переменными MATLAB. Для данных ASCII вы должны удостовериться, что Мастер импорта распознал разделители столбцов. Самостоятельно он может распознать только символ табуляции, пробел, запятую или точку с запятой. Нужно щелкнуть мышью на кнопке Next и в следующем окне либо подтвердить выбор разделителя, сделанный Мастером, либо выбрать Other и ввести любой разделитель.
  • ui import (" -file") - вначале выводит диалог выбора файла.
  • ui import ("-pastespecial") - вначале выводит для предварительного просмотра содержимое буфера обмена Windows.
  • S = ui import (…) хранит результирующие переменные как поля структуры S.
  • Команда uisave - управляемое пользователем сохранение (команда save описана в уроке 2) с Windows диалогом.
  • Функция saveas - сохраняет рисунок или модель Simulink в желаемом формате на носителе информации или на устройстве, разрешенном print.
  • Функция saveas (H, "FILENAME") - сохраняет данные в соответствии с командой дескрипторной графики Н в файле FILENAME. Формат файла определяется расширением имени FILENAME.
  • Функция saveas (H. "FILENAME". "FORMAT") - выполняет то же, но с параметром FORMAT (формат задается тем же способом, что и расширение имени файла и может от него отличаться). FORMAT имеет приоритет перед расширением имени файла. Параметры функции:
    • "fig" - сохранить рисунок (график) в двоичном fig-файле;
    • "m" или "mfig" - сохранить рисунок в двоичном fig-файле и создать m-файл для его загрузки;
    • "mmat" - сохранить рисунок в m-файле как последовательность команд создания рисунка. Может не поддерживать новейшие графические функции.

Saveas(gcf. "output" , "fig") saveas(gcf, "output" , "bmp")

Команда или функция delete удаляет файл или объект графики.

Справочник свойств графических объектов

Стандартные диалоговые окна.

Функции для создания диалоговых окон

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

Диалоговые окна сообщений:

errordlg - создание диалогового окна с сообщением об ошибке;

helpdlg - создание диалогового окна для вывода информации;

warndlg - создание диалогового окна предупреждения;

msgbox - создание диалогового окна для вывода сообщения.

Диалоговое окно подтверждения (функция questdlg)

Диалоговое окно для ввода информации (функция inputdlg)

Диалоговое окно для выбора из списка (функция listdlg)

Диалоговые окна для заданий опций печати

pagesetupdlg - вывод многостраничного диалогового окна для установки параметров листа и способа печати содержимого графического окна;

printdlg - отображение диалогового окна для выбора опций печати и настройки принтера.

Диалоговые окна открытия и сохранения файла

uigetfile - отображение диалогового окна открытия файла

uiputfile - отображение диалогового окна сохранения файла

Диалоговое окно выбора каталога (функция uigetdir)

Диалоговое окно выбора шрифта (функция uisetfont)

Диалоговое окно выбора цвета (функция uisetcolor)

Окно с полосой прогресса (функция waitbar)

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

Рассмотрим использование стандартных диалоговых окон на примере окна открытия файла.

Пример приложения myview с диалоговым окном открытия файла

Создадим приложение myview с графическим интерфейсом пользователя, которое позволяет просматривать графические файлы. Окно работающего приложения приведено на рис. 1. Нажатие на кнопку Open Image приводит к появлению стандартного диалогового окна открытия файла Select File to Open. Выбранный в нем графический файл отображается в окне приложения. Нажатие на кнопку Close Image очищает окно приложения myview.

Рис. 1. Окно приложения myview.

В среде GUIDE на заготовке окна приложения разместите оси и две кнопки так, как показано на рис.2. В инспекторе свойств задайте левой кнопке тег btnOpen и установите ее свойство String в Open Image. Аналогично для правой кнопки: тег - btnClose и String - Close Image.

Оси понадобятся для вывода изображения при помощи функции image. Мы будем использовать низкоуровневое обращение к функции image, которое предполагает обратное направление оси y для того, чтобы рисунок не был перевернут. Поэтому в инспекторе свойств измените направление оси y , установив свойство осей YDir в reverse. Для того, чтобы скрыть координатную разметку и линии осей, сделайте оси невидимыми, установив их свойство Visible в off.

Рис. 2. Заготовка окна приложения в среде GUIDE.

Сохраните приложение с именем myview и запрограммируйте события Callback кнопок Open Image и Close Image.

При нажатии пользователем на Open Image должен появляться диалог открытия файла и после выбора файла рисунок должен отображаться на осях. Воспользуемся стандартным диалоговым окном открытия файла, которое создает функция uigetfile. Самое простое обращение к ней выглядит следующим образом:

Uigetfile

Если пользователь выбрал файл и закрыл окно, нажав в нем кнопку Open, то в первом выходном аргументе FileName возвращается имя файла (с расширением), а во втором PathName - путь к файлу. Если же пользователь не выбрал файл (нажал Cancel, или закрыл окно кнопкой с крестиком на заголовке окна, или нажал ), то переменная FileName будет равна нулю. Поэтому дальнейшие действия зависят от значения FileName.

Если файл был выбран, то следует

1) сформировать полное имя файла;

3) вывести изображение на оси, воспользовавшись функцией image.

Если файл не был выбран, то и делать ничего не надо.

Событие Callback кнопки Close Image может состоять всего из одного оператора - обращения к функции cla для очистки осей.

Запрограммируйте подфункции обработки события Callback кнопок Open Image и Close Image следующим образом.

Function btnOpen_Callback(hObject, eventdata, handles) % Обработка события Callback кнопки Open Image % Получение имени и пути к файлу = uigetfile; % Проверка, был ли выбран файл if FileName~=0 % Формирование полного пути к файлу FullName = ; % Считывание изображения из графического файла Pict = imread(FullName); % Вывод изображения на оси image("CData", Pict) end function btnClose_Callback(hObject, eventdata, handles) % Обработка события Callback кнопки Close Image % Очистка осей cla

Запустите приложение myview. При нажатии на кнопку Open Image появляется диалоговое окно открытия файла Select File to Open. Однако, в поле, в котором отображается содержимое текущей папки не видно графических файлов. Так происходит потому, что по умолчанию фильтр файлов (раскрывающийся список Files of type) содержит строку "All MATLAB Files" и видны файлы только с теми расширениями, которые приняты в MATLAB. Разумеется, можно каждый раз при открытии графического файла выбирать в раскрывающемся списке Files of type строку "All Files (*.*)" для отображения всех файлов текущей папки. Но гораздо лучше сразу создавать диалоговое окно открытия файла, настроенное на определенные расширения. Например, для отображения файлов с расширениями bmp и jpg следует обратиться к функции uigetfile со входным аргументом - строкой, в которой через точку с запятой записаны шаблоны с нужным расширением *.bmp и *.jpg:

Uigetfile("*.bmp;*.jpg");

Измените в подфункции btnOpen_Callback обращение к uigetfile на вышеприведенное и убедитесь, раскрывающийся список Files of type диалогового окна открытия файлов содержит всего две строки: "*.bmp;*.jpg" (по умолчанию) и "All Files (*.*)".

Функция uigetfile допускает более гибкое управление настройками фильтра файлов. Мы их рассмотрим в разделе, посвященном описанию функций для создания стандартных диалоговых окон. Обсудим теперь, как реализовать возможность выбора сразу нескольких файлов в стандартном диалоговом окне открытия файла.

Выбор нескольких файлов в диалоговом окне открытия файла. Обмен данными между подфункциями приложения с GUI.

В этом разделе мы рассмотрим два вопроса:

1) как организовать выбор нескольких файлов в стандартном окне открытия файла и считать их содержимое в подходящий массив;

Ответ на первый вопрос простой. Надо вызвать функцию uigetfile с дополнительной парой входных аргументов "MultiSelect" и "on":

Uigetfile(..., "MultiSelect", "on")

В зависимости от выбора пользователя выходные аргументы будут следующих типов.

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

Второй вопрос (обмен данными между подфункциями обработки событий) часто возникает при программировании приложений с графическим интерфейсом. Он решается следующим образом. Данные, которые требуется сохранить при выполнении некоторой подфункции, записываются в поля структуры handles. Затем в этой же подфункции структура handles сохраняется при помощи функции guidata:

guidata(gcbo, handles)

Для получения данных в другой подфункции следует обратиться к соответствующему полю структуры handles. Например, в приложении есть две подфункции btnA_Callback и btnB_Callback. При выполнении подфункции btnA_Callback был создан числовой массив, который понадобится в подфункции btnB_Callback. Тогда эти подфункции должны иметь следующий вид.

Function btnA_Callback(hObject, eventdata, handles) . . . handles.data = ; guidata(gcbo, handles) . . . function btnB_Callback(hObject, eventdata, handles) . . . bar(handles.data) . . .

Обратимся к приложению myview, созданному в предыдущем разделе, и расширим его возможности. Модернизированное приложение должно позволять открытие сразу нескольких графических файлов и их поочередный просмотр. После выбора нескольких графических файлов в окне приложения отображается только один, а нажатие на кнопку (назовем ее Next) приводит к появлению следующего изображения.

В среде GUIDE на заготовку окна приложения myview (см. рис.2 предыдущего раздела) добавьте кнопку c тегом btnNext и надписью Next (см. рис. 1). В инспекторе свойств сделайте ее недоступной, установив свойство Enable в off. Она будет доступной в ходе работы приложения, если пользователь выбрал для просмотра несколько графических файлов.

Рис. 1. Окно приложения myview с кнопкой Next

Теперь надо изменить подфункцию btnOpen_Callback обработки события Callback кнопки Open Image и запрограммировать событие Callback кнопки Next. При обработке выбора файлов (или файла) пользователем в диалоговом окне открытия файла следует учесть все возможности: выбрано несколько файлов, выбран только один файл, файлы не выбраны.

Если выбрано несколько графических файлов (т.е. массив FileName является массивом ячеек), то считаем изображения в массив ячеек и сохраним его в поле Pict структуры handles. Число открытых графических файлов (т.е. длину массива FileName) сохраним в поле ImageNum структуры handles. Кроме того, нам понадобится номер текущего изображения, для запоминания которого создадим поле CurImage структуры handles.

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

При обработке события Callback кнопки Next очистим оси и отобразим на них следующее изображение. Если текущее изображение является последним, то отобразим первое.

Ниже приведен текст подфункций btnOpen_Callback и btnNext_Callback. Подфункция btnClose_Callback остается без изменений.

Function btnOpen_Callback(hObject, eventdata, handles) % Обработка события Callback кнопки Open Image % Получение имен файлов и пути к ним (или имени одного файла и пути к нему) = uigetfile("*.bmp;*.jpg", "MultiSelect", "on"); % Узнаем, сколько выбрано файлов if iscell(FileName) % FileName - массив ячеек, значит выбрано несколько файлов % записываем в поле ImageNum структуры handles число выбранных файлов handles.ImageNum = length(FileName); % Для каждого файла в цикле формируем полное имя % и считываем его содержимое в k-ую ячейку массива ячеек, % который хранится в поле Pict структуры handles handles.Pict = ; % сначала делаем массив пустым for k=1:handles.ImageNum FullName = ; handles.Pict{k} = imread(FullName); end % Первая картинка является текущей handles.CurImage = 1; % Отображаем ее на осях image("CData", handles.Pict{handles.CurImage}) % Сохраняем структуру handles для доступа к ней в подфункции btnNext_Callback guidata(gcbo, handles) % Делаем доступной кнопку Next set(handles.btnNext, "Enable", "on") else % Был выбран только один файл или ни одного if FileName~=0 % Выбран один файл, формируем полный путь к нему FullName = ; % Считываем изображение в переменную Pict (структура handles не нужна) Pict = imread(FullName); % Выводим картинку на оси image("CData", Pict) % Делаем кнопку Next недоступной set(handles.btnNext, "Enable", "off") end end function btnNext_Callback(hObject, eventdata, handles) % Обработка события Callback кнопки Open Image % Проверяем, какая картинка является текущей if handles.CurImage

Примечание

Приложение myview можно усовершенствовать и дальше, например, после выбора файлов и перед отображением первого из них неплохо очистить оси. Следует также предусмотреть, что пользователь выбрал файлы, не являющиеся графическими.

Справка по функциям для создания диалоговых окон.

Создание диалогового окна с сообщением об ошибке - errordlg

Для создания стандартного диалогового окна с сообщением об ошибке служит функция errordlg. Самый распространенный вариант вызова

h = errordlg("Текст сообщения", "Заголовок окна").

В h записывается указатель на созданное графическое окно с сообщением об ошибке. Например

h = errordlg("Division by zero", "Calculator");

Приводит к такому окну с указателем h:

Окно остается на экране до тех пор, пока его не закроют кнопкой OK, клавишей, кнопкой с крестиком на заголовке или при помощи контекстного меню заголовка.

Окно с сообщением об ошибке не является модальным (оно позволяет переходить к другим окнам приложений MATLAB). Для того, чтобы сделать его модальным, следует после создания окна функцией errordlg установить свойство WindowStyle графического окна в "modal": set(h, "WindowStyle", "modal")

Другой способ создания модального окна с сообщением об ошибке состоит в использовании функции msgbox, которая описана ниже.

Размер окна подбирается автоматически в зависимости от длины текстовых строк, очень длинные строки переносятся. Для получения многострочного сообщения, разбитого на строки заданным образом, следует указать массив ячеек строк:

h = errordlg({"Wrong data format";"or"; "unmatched data"}, "dlgname")

Последовательное создание окон с сообщениями об ошибке с одним и тем же заголовком:

h = errordlg("Division by zero", "Calculator"); ... h = errordlg("Incorrect operation", "Calculator");

приводит к созданию разных окон с сообщениями об ошибке. Для активизации окна (расположения поверх остальных окон) и вывода в него нового сообщения, вместо создания нового окна, предусмотрен вызов errordlg с третьим аргументом "on":

h = errordlg("Division by zero", "Calculator"); ... h = errordlg(" Incorrect operation ", "Calculator", "on"); % активизация старого окна

Разумеется, если старое окно было закрыто, то h = errordlg(..., "on") просто создает новое.

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

h = errordlg("Division by zero", "Calculator"); set(h, "WindowStyle", "modal") waitfor(h) a=1; ....

Создание диалогового окна с предупреждением - warndlg

Функция warndlg работает практически так же, как и errordlg (см. выше), но не предусмотрен вариант вызова с третьим входным аргументом "on". Например,

приводит к такому окну с указателем h

Окно с предупреждение отличается от окна с сообщением об ошибке только пиктограммой:

Повторный вызов warndlg с теми же самыми входными аргументами приводит к созданию нового окна, даже если старое еще не было закрыто.

Создание диалогового окна со справочной информацией - helpdlg

Функция helpdlg работает в основном так же, как и warndlg (см. выше). Например,

h = warndlg("File is out of date", "Preprocessor")

приводит к такому окну с указателем h:

которое отличается от окна с предупреждением только пиктограммой:

Повторный вызов helpdlg с тем же самым заголовком окна приводит к активизации старого окна, если оно не было закрыто. Если оно было закрыто, то создается новое.

Многострочный текст сообщения, модальность окна и приостановление выполнения приложения до закрытия окна - все это делается так же, как и при вызове errordlg.

Создание окна с сообщением - универсальная функция msgbox

Функция msgbox позволяет создать окна с сообщением об ошибке, с предупреждением и со справочной информацией, рассмотренные выше. Для получения многострочного текста следует в качестве первого аргумента задавать массив ячеек из строк. Кроме того, возможно создание окна с произвольной пиктограммой. Управление модальностью окна и созданием нового с тем же заголовком производится при помощи входных аргументов msgbox. Функция msgbox возвращает указатель на создаваемое ей окно.

h = msgbox("Very serious error!", "Program", "error") - создает окно с сообщением об ошибке и стандартной пиктограммой (аналогично errordlg).

c = {"Very serious error!"; "Don""t tell anyone"}; h = msgbox(c, "Program", "error") - аналогично предыдущему, но сообщение состоит из двух строк.

h = msgbox("The last warning!", "Program", "warn") - создает окно с предупреждением и стандартной пиктограммой (аналогично warndlg).

h = msgbox("Help yourself...", "Program", "help") - создает окно со справочной информацией и стандартной пиктограммой (аналогично helpdlg).

h = msgbox("Here is no picture", "Program", "none") - создает окно с текстовой информацией без пиктограммы.

h = msgbox("Текст сообщения", "Заголовок окна", "custom", рисунок, карта цветов) - создает окно с пиктограммой пользователя, например:

= imread("phone.gif"); % считывание рисунка и карты цветов из файла h = msgbox("Someone is calling you", "Phone", "custom", pic, map)

приводит к такому окну

Последний входной аргумент ("modal", "non-modal" или "replace") управляет видом окна и способом вывода нового окна с тем же заголовком. Если способ вывода нового окна не указан, то всегда создается новое окно.

Примеры:

h = msgbox("Very serious error!", "Program", "modal") - выводит модальное стандартное окно с сообщением об ошибке

h = msgbox("Someone is calling you", "Phone", "custom", pic, map, "modal") - выводит модальное окно с заданным рисунком для пиктограммы и картой цветов.

h = msgbox("Very serious error!", "Program", "error", "replace") - заменяет предыдущее окно с заголовком Program, если такого нет, то создает новое. При выполнении команд

h = msgbox("Very serious error!", "Program", "error") h = msgbox("Something is strange", "Program", "warn", "replace")

второе окно заменит первое.

Диалоговое окно подтверждения - функция questdlg

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

Примеры:

button = questdlg("Are you sure?") - создание стандартного окна подтверждения с кнопками Yes, No, Cancel. Кнопка Yes в фокусе (по умолчанию).

button = questdlg("Are you sure?", "Program") - создание стандартного окна подтверждения с заголовком и с кнопками Yes, No, Cancel.

button = questdlg("Are you sure?", "Program", "No") - создание стандартного окна подтверждения с заголовком и с кнопками Yes, No, Cancel. В фокусе кнопка No.

button = questdlg("Are you sure?", "Program", "Yes", "Maybe", "Maybe") - создание стандартного окна подтверждения с заголовком и с двумя кнопками Yes и Maybe. В фокусе кнопка Maybe.

button = questdlg("Are you sure?", "Program", "Yes", "No", "I don""t know", "No") - создание стандартного окна подтверждения с заголовком и с тремя кнопками Yes, No и I don"t know. В фокусе кнопка No.

Диалоговое окно для ввода информации (функция inputdlg)

Функция inputdlg создает диалоговое окно с заданным числом строк ввода. Число строк ввода и заголовки к ним определяются при помощи входных аргументов. Окно содержит кнопки OK и Cancel. Если пользователь нажал OK, то выходной аргумент функции inputdlg является массивом ячеек с информацией, введенной пользователем в строки ввода. Если окно было закрыто нажатием на кнопку Cancel или любым другим способом (кроме кнопки OK), то выходной аргумент - пустой массив ячеек.

Примеры:

M = inputdlg({"TIME" "VALUES"}) - создает диалоговое окно

Если, к примеру, в строке TIME пользователь ввел 0.1 0.3 0.55 4.5, а в строке VALUES - 2.3 9.55 2.1 0.7 и нажал OK, то массив ячеек M будет иметь следующие значения.

M = "0.1 0.3 0.55 4.5" "-2.3 9.55 2.1 0.7"

Для преобразования их в числовые векторы можно воспользоваться str2num:

time = str2num(M{1}) val = str2num(M{2})

M=inputdlg({"TIME" "VALUES"}, "Input Data") - создает диалоговое окно с заголовком Input Data.

Для того, чтобы можно было вводить многострочный текст, следует указать третий входной аргумент - число строк в каждой области ввода:

M = inputdlg({"matrix A" "Matrix B"}, "Input Data", 3) - если третий аргумент является числом большим единицы, то все области ввода имеют одинаковую высоту и снабжены полосами прокрутки.

Если ввод завершен нажатием на кнопку OK, то каждая ячейка массива M содержит массив символов. В массиве символов столько строк, сколько было введено в соответствующую область ввода.

M = inputdlg({"vector A" "Matrix B"}, "Input Data", ) - для задания высоты областей ввода по отдельности следует указывать число строк каждой области ввода в вектор-столбце в качестве третьего входного аргумента:

M = inputdlg({"vector A" "Matrix B"}, "Input Data",) - для задания длины областей ввода в символах (в данном случае, 100 символов) третьим входным аргументом должна быть матрица:

M = inputdlg({"Name" "Year"}, "Info", , {char("John","Smith") "1990"}) - для получения окна с заполненными полями (для подсказки формата ввода пользователю) указывается четвертый входной аргумент. Он должен быть массивом ячеек того же размера, что и первый входной аргумент:

M = inputdlg({"Name" "Year"}, "Info", , {char("John","Smith") "1990"}, "on") - последний пятый входной аргумент "on" означает, что пользователь может изменять размеры диалогового окна.

Диалоговое окно для выбора из списка - функция listdlg

Функция listdlg создает диалоговое окно со списком из заданных строк и кнопками для выбора и отмены. Строки списка задаются массивом ячеек. Поддерживается выбор нескольких элементов списка. В выходных аргументах возвращаются: Selection - номер или вектор с номерами выбранных строк и ok - информация о том, был ли выбор завершен нажатием кнопки OK (ok = 1), или окно было закрыто другим способом (ok = 0). Если ok = 0, то Selection - пустой массив. По умолчанию допускается выбор нескольких элементов списка (щелчком мыши с удержанием Ctrl) и присутствует кнопка Select All для выбора всех элементов.

= listdlg("ListString", {"Linear"; "Quadratic"; "Cubic"}) - создает диалоговое окно выбора со списком из трех строк: Linear, Quadratic, Cubic. Если пользователь выбрал, к примеру Quadratic и нажал кнопку OK, то Selection = 2 и ok = 1. Если пользователь выбрал Linear и Cubic и нажал кнопку OK, то Selection = и ok = 1 и т. д.

Функция listdlg допускает обращение к ней в общей форме:

= listdlg("ListString", массив ячеек строк, парам1, знач1, парам2, знач2, ...)

Параметры и их возможные значения такие:

  • "SelectionMode" - режим выбора строк в списке, значения: "single" (для выбора только одной строки) или "multiple" (по умолчанию, для выбора нескольких строк);
  • "ListSize" - размер области списка в пикселях, значение задается вектором [ширина высота] (по умолчанию );
  • "InitialValue" - начальное выделение строк, значением является вектор с номерами строк, которые будут выделены при отображении окна со списком (по умолчанию 1);
  • "Name" - заголовок окна, значение задается строкой (по умолчанию пустая строка);
  • "PromptString" - текст над списком, значения: строка или массив строк или ячеек из строк (для многострочного текста). По умолчанию пустой массив ячеек.
  • "OKString" - надпись на кнопке для выбора и закрытия окна, значением является строка (по умолчанию "OK");
  • "CancelString" - надпись на кнопке для закрытия окна без выбора, значением является строка (по умолчанию "Cancel");
  • "uh" - высота кнопок окна, значение задается в пикселях (18 по умолчанию);
  • "fus" - расстояние между кнопками и списком, значение задается в пикселях (18 по умолчанию);
  • "ffs" - расстояние от границы окна до списка, значение задается в пикселях (8 по умолчанию).
Например, команда

= listdlg("ListString", {"Linear"; "Quadratic"; "Cubic"},... "Name", "Approximation", "ListSize", , "PromptString", "Select method", "fus", 5)

приводит к созданию следующего диалогового окна со списком:

Диалоговое окно для установки параметров листа и способа печати содержимого графического окна - функция pagesetupdlg

pagesetupdlg - вызов диалогового окна Page Setup для текущего графического окна (если нет ни одного окна, то создается новое).

pagesetupdlg(hF) - вызов диалогового окна Page Setup для графического окна с указателем hF.

Настройки, сделанные в диалоговом окне Page Setup, влияют на соответствующие свойства графического окна: PaperSize, PaperType, PaperPozition и т. д.

Функция pagesetupdlg позволяет настроить параметры только одного графического окна, т.е. hF не может быть вектором указателей. Для одновременной настройки основных параметров нескольких графических окон следует использовать функцию pagedlg, входным аргументом которой может быть вектор указателей на графические окна.

Окно Page Setup является модальным, выполнение приложения приостанавливается до тех пор, пока окно не будет закрыто.

Диалоговое окно для выбора опций печати и настройки принтера - функция printdlg

printdlg - вызов стандартного диалогового окна Windows для печати текущего графического окна (если нет ни одного окна, то создается новое).

printdlg(hF) - вызов стандартного диалогового окна Windows для печати графического окна с указателем hF.

printdlg("-crossplatform", hF) - вызов диалогового окна Print MATLAB для печати графического окна с указателем hF.

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

Диалоговое окно открытия файла - функция uigetfile

= uigetfile - выводит диалоговое окно открытия файла с содержимым текущего каталога. Фильтр файлов установлен в ALL MATLAB files, что приводит к отображению только тех файлов, расширения которых поддерживаются MATLAB. В раскрывающемся списке Files of type можно выбрать только M-файлы, или только графические окна и т. д., или все файлы.

Если пользователь выбрал файл (щелчком мыши по значку с файлом и нажал кнопку Open, либо двойным щелчком мыши по значку с файлом, либо набрал имя файла в строке File Name и нажал кнопку Open), то FName содержит строку с именем файла и расширением, а PName - путь к файлу. Если пользователь не выбрал файл и закрыл окно, то FName = 0 и PName = 0. После обращения к функции uigetfile следует проверить, был ли выбран файл. Если да, то для получения полного имени файла следует сцепить эти строки:

= uigetfile; if ~ isequal(FName, 0) FullName = strcat(PName, FName); % дальше считываем данные из файла end

Фильтр файлов указывается в первом входном аргументе функции uigetfile, например

= uigetfile("*.txt");

создает диалоговое окно открытия файлов, список Files of Type которого содержит две строки: "*.txt" и "All Files (*.*)". Можно указывать больше одного расширения, но тогда надо использовать массив ячеек из строк:

= uigetfile({"*.txt"; "*.dat"});

Для размещения описания типов файлов в списке Files of Type следует указывать массив ячеек из двух столбцов. В каждой его строке задается расширение файла и его описание (при этом строка "All Files (*.*)" не добавляется в список Files of Type диалогового окна открытия файла):

Filter={"*.txt", "Text files (*.txt)"; "*.dat", "Data files (*.dat)"; "*.res", "Results (*.res)"}; = uigetfile(Filter);

В качестве фильтра может быть и строка с именем файла, тогда оно находится в строке File name при появлении диалогового окна открытия файла, а его расширение принимается за расширение по умолчанию и появляется в списке Files of Type вместе с "All Files (*.*)".

Если необходимо узнать, какой по счету тип файлов пользователь выбрал в списке Files of Type, то следует обратиться к uigetfile с тремя выходными аргументами:

= uigetfile(Filter);

В FilterIndex записывается номер типа файлов.

Для задания собственного заголовка окна открытия файла (вместо Select File to Open) функция uigetfile вызывается со вторым входным аргументом:

= uigetfile(Filter, "Open File");

А для помещения заданного имени файла в строку File Name при создании окна открытия файлов, необходимо указать его в третьем входном аргументе (имя файла может быть полным):

= uigetfile(Filter, "Open File", "input.txt")

Так можно отобразить содержимое любой папки, например корневого каталога диска D:

= uigetfile(Filter, "Open File", "d:\")

Примечание
Если мы хотим открывать файлы MATLAB так, как предлагает uigetfile по умолчанию, но задать собственный заголовок окна (и папку или файл, предлагаемые по умолчанию в диалоговом окне открытия файлов), то первый входной аргумент - фильтр - пропускать нельзя. Он должен быть пустой строкой:

= uigetfile("", "Open File", "d:\");

Для того, чтобы пользователь мог выбрать несколько файлов , следует вызвать uigetfile одним из следующих способов:

= uigetfile("MultiSelect", "on"); или = uigetfile("*.dat", "MultiSelect", "on") ; или = uigetfile("*.dat", "Open File", "d:\", "MultiSelect", "on")

Если пользователь выбрал несколько файлов в диалоговом окне, то выходной аргумент FName является массивом ячеек из имен выбранных файлов (PName, разумеется, остается строкой, так как файлы выбирались в одной папке). Для получения массива ячеек с полными именами файлов подойдет следующий код (функция strcat умеет сцеплять строку с массивом ячеек из строк):

= uigetfile("MultiSelect", "on"); if ~isequal(FName, 0) FullName = strcat(PName, FName); end

Функции MATLAB для открытия файлов разных форматов

Поскольку речь идет об открытии файлов, то уместно привести основные функции MATLAB, предназначенные для работы с файлами разных форматов.

load - чтение данных из двоичного или текстового файла.

open - открытие файла. Способ открытия зависит от расширения:

  • расширение m - файл открывается в редакторе M-файлов;
  • расширение mdl - модель открывается в Simulink;
  • расширение mat - запись двоичных данных из файла в поля структуры, имена полей структуры совпадают с именами переменных, записанных в файле;
  • расширение fig - открывается графическое окно;
  • расширение p - если существует m-файл с тем же самым именем, то он открывается в редакторе M-файлов;
  • расширения htm, html - файл открывается в окне браузера справочной системы MATLAB;
  • расширение pdf - файл открывается в Adobe Acrobat (требуется установка открытия по ассоциации в Windows);
Для открытия файла с нестандартным расширением можно написать свою функцию, которая будет вызываться по умолчанию. Ее имя образуется из слова open и расширения, например для открытия файлов с расширением dtm следует написать функцию opendtm. Пример. Пусть надо открывать двоичные файлы с расширением dtm, содержащие значения двух переменных, имена которых могут быть разными. Значения этих переменных должны быть записаны в переменные time и data рабочей среды. Тогда пишем файл-функцию opendtm:

function opendtm(fname) % считываем данные в структуру S = load("-mat", fname); % узнаем названия полей структуры (имена переменных) F = fieldnames(S); % Присваиваем значения переменным time и data рабочей среды assignin("base", "time", S.(F{1})) assignin("base", "data", S.(F{2}))

Вот как можно использовать функцию opendtm:

A = 1:10; B = sqrt(A); save("my.dtm", "A", "B") % запись A и B в файл в двоичном виде open("my.dtm") % open вызывает opendtm и в рабочей среде создаются time и data

Примечание. Функция uiopen сочетает возможности uigetfile и open - она создает диалоговое окно открытия файла, а затем вызывает open для его открытия.

winopen - открытие файла в Windows тем приложением, которое ассоциировано с данным расширением, например: winopen("art.doc") - открытие art.doc в MS Word; winopen("my.txt") - открытие my.txt в блокноте; winopen("all.htm") - открытие all.htm в браузере интернет-страниц.

notebook - открытие или создание M-книги в MS Word.

publish - выполнение M-файла, разбитого на ячейки, и сохранение результата в указанном формате: html, doc, ppt, xml, rpt, latex.

dos и system - выполнение команд (см. также!), запуск исполняемых файлов, например:

system("calc") - запуск калькулятора.

uiimport - открывает окно Import Wizard для импортирования данных из различных форматов.

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

csvread - чтение числовых данных из текстового файла с разделителем-запятой.

dlmread - чтение числовых данных из текстового файла с заданным разделителем.

textread, textscan - чтение данных из текстового файла, имеющего определенный формат.

xlsread - чтение данных из фалов MS Excel.

wavread - чтение звукового wav-файла.

aviread - чтение avi-файла.

imread - чтение графических файлов.

Кроме перечисленных функций имеются низкоуровневые функции для работы с файлами. Их имена начинаются с буквы f:

fclose - закрытие файла.

feof - проверка на достижение конца файла.

ferror - получение информации о последней ошибке при вводе-выводе.

fgetl - чтение строки из текстового файла без символа конца строки.

fgets - чтение строки из текстового файла с символом конца строки.

fopen - открытие файла.

fprintf - форматная запись в файл.

fread - чтение из двоичного файла.

frewind - переход к началу файла.

fscanf - форматное чтение из файла.

fseek - переход к заданной позиции в файле.

ftell - получение текущей позиции в файле.

fwrite - запись в двоичный файл.

Все функции для чтения данных приведены в разделе справочной системы: MATLAB: Functions -- Categorical List: File I/O.

Диалоговое окно сохранения файла - функция uiputfile

Использование uiputfile схоже с uigetfile, рассмотренной выше. Точно так же задаются фильтр расширений, заголовок окна, файл или путь по умолчанию. Отличие состоит в том, что в uiputfile нет опции "MultiSelect" (она и не нужна при сохранении). Кроме того, если в диалоговом окне сохранения файла пользователь выберет имя существующего файла, то появится окно подтверждения. Выбор Yes приводит к завершению диалога сохранения файла, а No - к возврату в окно сохранения файла. Проверка действий пользователя и получение полного имени файла выполняется точно так же, как и в случае uigetfile.

Функции MATLAB для сохранения данных в файлах

Перечислим основные функции MATLAB, предназначенные для сохранения данных различных типов.

save - сохранение данных в текстовом и двоичном файлах

Примечание.
Функция uisave сочетает возможности uigetfile и save - она создает диалоговое окно сохранения файла, в котором будут сохранены все переменные рабочей среды..

csvwrite - запись числовых данных в текстовый файл через запятую.

dlmwrite - запись числовых данных в текстовый файл через заданный разделитель.

xlswrite - запись данных в формате MS Excel.

wavwrite - запись wav-файла.

avifile - создает avi-файл и возвращает идентификатор на него, который используется в других функциях: addframe, close.

movie2avi - создание avi-файла из матрицы, в каждом столбце которой хранится информация об одном фрейме (см. функции: movie, getframe, im2frame).

imwrite - запись графического файла.

Кроме перечисленных функций имеются низкоуровневые функции для работы с файлами, имена которых начинаются с буквы f (см. выше раздел "Функции MATLAB для открытия файлов разных форматов").

Диалоговое окно выбора каталога - функция uigetdir

Функция uigetdir открывает диалоговое окно выбора каталога Browse for folder и возвращает путь к выбранному каталогу, либо ноль, если пользователь не сделал выбор. Проверка, был ли выбран каталог, делается точно так же, как и в функции uigetfile для диалога открытия файла. Способы вызова uigetdir:

dname = uigetdir - открывает диалоговое окно выбора каталога, в котором выделен текущий каталог MATLAB.

dname = uigetdir("startpath") - открывает диалоговое окно выбора каталога, в котором выделен заданный каталог, например: dname = uigetdir("c:\").

dname = uigetdir("startpath", "text") - открывает диалоговое окно выбора каталога, в котором выделен заданный каталог и помещает заданный текст над окном с иерархической структурой каталогов. Если нужно открыть диалоговое окно выбора каталога, в котором выделен текущий каталог MATLAB, то вместо первого входного аргумента следует указать пустую строку: dname = uigetdir("", "text").

Функции MATLAB для работы с каталогами

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

cd - смена текущего каталога MATLAB

dir - отображение содержимого каталога в командном окне или запись информации о содержимом в массив структур.

path, rmpath - управление путями поиска MATLAB.

Примечания.
Функция pathtool отображает специальное диалоговое окно Set Path для управления путями поиска MATLAB.
Функция filebrowser отображает специальное диалоговое окно Current Directory с содержимым текущего каталога, возможностью выбора нового текущего каталога и открытия файлов в MATLAB.

Все функции для работы с каталогами в MATLAB приведены в справочной системе в разделе MATLAB: Functions -- Categorical List: Desktop Tools and Development Environment: Workspace, Search Path, and File Operations.

Диалоговое окно выбора шрифта - функция uisetfont

Функция uisetfont может использоваться в двух целях:
1) создание диалогового окна выбора шрифта и запись информации о выбранном шрифте (название, размер, начертание) в структуру;
2) создание диалогового окна выбора шрифта и изменение текстовых объектов, подписей осей или элементов управления в соответствии со сделанными в этом окне установками.

S = uisetfont - приводит к появлению диалогового окна выбора шрифта и, если выбор в нем был сделан, то возвращается структура S, поля которой имеют следующий смысл:

S.FontName - строка с названием шрифта; S.FontUnits - единицы измерения ("points"); S.FontSize - размер; S.FontWeight - жирность ("normal" или "bold"); S.FontAngle - начертание ("normal" или "italic").

Если пользователь не выбрал шрифт и закрыл окно, то S равно нулю.

S = uisetfont(S0) - приводит к появлению диалогового окна выбора шрифта, в котором по умолчанию выбран шрифт в соответствии со значениями полей структуры S0, например:

S0.FontName = "Arial"; S0.FontUnits = "points"; S0.FontSize = 20; S0.FontWeight = "bold"; S0.FontAngle = "normal"; S = uisetfont(S0)

S = uisetfont("Заголовок окна") или S = uisetfont(S0, "Заголовок окна") - то же самое, что и предыдущие варианты, только окно выбора шрифта имеет заданный заголовок.

uisetfont(h) - вызов диалогового окна выбора шрифта для текстового объекта, осей или элемента управления с указателем h.

uisetfont(h, "Заголовок окна") - то же самое, что и uisetfont(h), только окно выбора шрифта имеет заданный заголовок.

S = uisetfont(h), S = uisetfont(h, "Заголовок окна") - то же самое, что и два предыдущих варианта, только информация о выборе пользователя дополнительно возвращается в структуре S.

Пример изменения шрифта графических объектов

hA = axes; % создание осей plot(rand(10)) % построение графика hT = title("Random Graph") % добавление заголовка % открытие диалогового окна для выбора шрифта разметки осей uisetfont(hA, "Set font for axes"); % открытие диалогового окна для выбора шрифта заголовка uisetfont(hT, "Set font for title"); Диалоговое окно выбора цвета - функция uisetcolor

Функция uisetcolor так же, как и uisetfont может использоваться в двух целях:
1) создание диалогового окна выбора цвета и запись выбранного цвета в вектор в формате RGB;
2) создание диалогового окна выбора цвета и изменение графических объектов, у которых есть свойство Color, в соответствии со сделанными в этом окне установками.

С = uisetcolor - создание диалогового окна выбора цвета (в нем по умолчанию текущим является белый цвет) и запись выбранного цвета в вектор С в формате RGB. Если пользователь не сделал выбор, то C равно нулю.

С = uisetcolor(С0) - то же самое, что и предыдущий вариант, только в диалоговом окне выбора цвета текущим является цвет, заданный вектором C0 в RGB. Если пользователь не сделал выбор, то C совпадает с C0.

С = uisetcolor("Заголовок окна"), С = uisetcolor(С0, "Заголовок окна") - то же самое, что и предыдущий вариант, только диалоговое окно выбора цвета имеет заданный заголовок.

uisetcolor(h) - открытие диалогового окна выбора цвета для задания цвета графического объекта с указателем h (графический объект должен иметь свойство Color).

uisetcolor(h, "Заголовок окна") - аналогично предыдущему, но диалоговое окно имеет заданный заголовок.

C = uisetcolor(h) или C = uisetcolor(h, "Заголовок окна") - то же самое, что и два последних способа. Кроме изменения цвета объекта, выбранный цвет записывается в вектор C в формате RGB.

Пример изменения цвета графических объектов.

hA = axes; % создание осей % построение графика x = 0:0.1:10; y = sin(x); hL = plot(x,y) hT = title("Random Graph") % добавление заголовка % открытие диалогового окна для выбора цвета линии uisetcolor(hL, "Select line color") % открытие диалогового окна для выбора цвета заголовка uisetcolor(hT, "Select title color") % открытие диалогового окна для выбора цвета осей uisetcolor(hA, "Select axes color")

Окно с полосой прогресса - функция waitbar

Функция waitbar создает окно с полосой прогресса и позволяет обновлять ее.

h = waitbar(x, "текст") - отображает окно с полосой прогресса и заданным текстом над полосой. Длина полосы прогресса пропорциональна значению x, которое должно быть от 0 до 1. Выходной аргумент h - указатель на графическое окно с полосой прогресса.

waitbar(x, h) - увеличивает длину полосы прогресса с указателем h в соответствии со значением x.

% создание окна с пустой полосой прогресса h = waitbar(0, "Solving eigenvalue problems..."); for i=1:100 A = rand(30); L = eig(A); waitbar(i/100) % обновление полосы прогресса end % удаление графического окна с полосой прогресса close(h)

Цвет полосы можно менять, если учесть, что полоса - полигональный объект, потомок осей, которые в свою очередь являются потомком графического окна, создаваемого функцией waitbar. Пример:

% создание окна с пустой полосой прогресса h = waitbar(0, "Solving eigenvalue problems..."); % поиск указателя на полигональный объект hP = findobj(h, "Type", "patch"); % задание цвета внутренности и границы полигонального объекта set(hP, "FaceColor", "g", "EdgeColor", "g") for i=1:1000 waitbar(i/1000, h) end close(h)

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

h = waitbar(0, "Simply white", "Color", "w", "Name", "program");

Создание диалогового окна с кнопками - функция menu

Функция menu создает окно с текстом и расположенными в столбик кнопками с заданными надписями. После нажатия пользователем на кнопку, ее номер возвращается в выходном аргументе функции menu.

button = menu("Select method", "Newton", "Gauss", "Zeidel")

Если пользователь не сделал выбор, то button = 0.

Понравилась статья? Поделиться с друзьями: