Мобильные телефоны и гаджеты

Мобильные телефоны и гаджеты

» » Как открыть матлаб. Дескрипторная графика. Диалоговые окна для заданий опций печати

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

Работа из командной строки 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 применяется во вложенном цикле, то он осуществляет выход только из внутреннего цикла.

Недостатком рассмотренных функций save и load является то, что они работают с определенными форматами файлов (обычно mat-файлы) и не позволяют загружать или сохранять данные в других форматах. Между тем бывает необходимость загружать информацию, например, из бинарных файлов, созданных другими программными продуктами для дальнейшей обработки результатов в MatLab. С этой целью были разработаны функции

fwrite(<идентификатор файла>, <переменная>, <тип данных>);

<переменная>=fread(<идентификатор файла>);
<переменная>=fread(<идентификатор файла>, <размер>);
<переменная>=fread(<идентификатор файла>, <размер>, <точность>);

Здесь <идентификатор файла> - это указатель на файл, с которым предполагается работать. Чтобы получить идентификатор, используется функция

<идентификатор файла> = fopen(<имя файла>,<режим работы>);

где параметр <режим работы> может принимать значения, приведенные в табл. 5.1.

Таблица 5.1. Режимы работы с файлами в MatLab

параметр <режим работы>

описание

запись (стирает предыдущее содержимое файла)

добавление (создает файл, если его нет)

чтение и запись (не создает файл, если его нет)

чтение и запись (очищает прежнее содержимое или создает файл, если его нет)

чтение и добавление (создает файл, если его нет)

дополнительный параметр, означающий работу с бинарными файлами, например, ‘wb’, ‘rb’ ‘rb+’, ‘ab’ и т.п.

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

A = ;

fid = fopen("my_file.dat", "wb"); % открытие файла на запись

error("File is not opened");
end

fwrite(fid, A, "double"); % запись матрицы в файл (40 байт)
fclose(fid); % закрытие файла

fid = fopen("my_file.dat", "rb"); % открытие файла на чтение
if fid == -1 % проверка корректности открытия
error("File is not opened");
end

B = fread(fid, 5, "double"); % чтение 5 значений double
disp(B); % отображение на экране
fclose(fid); % закрытие файла

В результате работы данной программы в рабочем каталоге будет создан файл my_file.dat размером 40 байт, в котором будут содержаться 5 значений типа double, записанных в виде последовательности байт (по 8 байт на каждое значение). Функция fread() считывает последовательно сохраненные байты и автоматически преобразовывает их к типу double, т.е. каждые 8 байт интерпретируются как одно значение типа double.

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

feof(<идентификатор файла>)

которая возвращает 1 при достижении конца файла и 0 в других случаях. Перепишем программу для считывания произвольного числа элементов типа double из входного файла.

fid = fopen("my_file.dat", "rb"); % открытие файла на чтение
if fid == -1
end

B=0; % инициализация переменной
cnt=1; % инициализация счетчика
while ~feof(fid) % цикл, пока не достигнут конец файла
= fread(fid, 1, "double"); %считывание одного
% значения double (V содержит значение
% элемента, N – число считанных элементов)
if N > 0 % если элемент был прочитан успешно, то
B(cnt)=V; % формируем вектор-строку из значений V
cnt=cnt+1; % увеличиваем счетчик на 1
end
end
disp(B); % отображение результата на экран
fclose(fid); % закрытие файла

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

Следует также отметить, что функция fread() записана с двумя выходными параметрами V и N. Первый параметр содержит значение считанного элемента, а второй – число считанных элементов. В данном случае значение N будет равно 1 каждый раз при корректном считывании информации из файла, и 0 при считывании служебного символа EOF, означающий конец файла. Приведенная ниже проверка позволяет корректно сформировать вектор значений B.

С помощью функций fwrite() и fread() можно сохранять и строковые данные. Например, пусть дана строка

str = "Hello MatLab";

fwrite(fid, str, "int16");

Здесь используется тип int16, т.к. при работе с русскими буквами система MatLab использует двухбайтовое представление каждого символа. Ниже представлена программа записи и чтения строковых данных, используя функции fwrite() и fread():

fid = fopen("my_file.dat", "wb");
if fid == -1
error("File is not opened");
end

str="Привет MatLab"; % строка для записи
fwrite(fid, str, "int16"); % запись в файл
fclose(fid);

fid = fopen("my_file.dat", "rb");
if fid == -1
error("File is not opened");
end

B=""; % инициализация строки
cnt=1;
while ~feof(fid)
= fread(fid, 1, "int16=>char"); % чтение текущего
% символа и преобразование
% его в тип char
if N > 0
B(cnt)=V;
cnt=cnt+1;
end
end
disp(B); % отображение строки на экране
fclose(fid);

Результат выполнения программы будет иметь вид

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

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

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

В 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.

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

Посещение этой страницы должно помочь Вам ответить конкретно на эти, или похожие вопросы:

  • Как открыть файл с расширением MATLAB?
  • Как провести конвертирование файла MATLAB в другой формат?
  • Что такое расширение формата файлов MATLAB?
  • Какие программы обслуживают файл MATLAB?

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

Что еще может вызвать проблемы?

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

Вы хотите помочь?

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