Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

План семестра поурочный по ВычМат-2014 / Занятие-13-Графический-Интерфейс / 4 лекция часть 2 Матлаб (Создание графических приложений)

.docx
Скачиваний:
87
Добавлен:
13.02.2015
Размер:
1.97 Mб
Скачать

МАТЛАБ. СОЗДАНИЕ ГРАФИЧЕСКИХ ПРИЛОЖЕНИЙ. ЧАСТЬ 2.

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

  • Считывание исходных аргументов;

  • Вычисление новых значений (формулы для этого даются в условии);

  • Вывод на экран результатов (вычисленных новых значений).

Интерфейс создадим с помощью команды guide, введя ее в командном окне. Выберем в открывшемся окне создание нового интерфейса. Построим его, как показано ниже.

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

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

Для ввода данных опишем функцию VvodArg, она возвращает вектор аргументов. При выполнении функции происходит при помощи функции str2double преобразование строки считанных из окна интерфейса символов в число. Строку символов она получает от функции get, непосредственно осуществляющей считывание из окна интерфейса. Ее аргумент handles.edit1 это окно интерфейса, которое называется Edit1, это название можно увидеть если правой кнопкой мышки открыть, щелкнув на этом окне, его редактор свойств и поискать там переменную Tag. Второй аргумент функции get называется String, его можно увидеть также в редакторе свойств. Рядом с ним в редакторе свойств указано его значение. По умолчанию там стоит Text Edit 1, но при создании интерфейса оно было удалено нами, чтобы в окне не было этой ненужной надписи. После того, как пользователь впишет в окно новое число (значение исходной переменной), то переменная String будет содержать строку этих символов или один символ.

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

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

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

Для вывода результатов на экран, опишем функцию VivodRes, она получает среди прочих (связанных с интерфейсом) аргументов вектор результатов вычислений. Функция VivodRes обеспечивает вывод в окно интерфейса с помощью функции set, которой в качестве аргументов передаются handles.edit4, означающий элемент интерфейса—окно вывода edit4, куда в принадлежащую этому окну переменную String, указанную как второй аргумент, будет помещена строка символов, содержащаяся в третьем аргументе—переменной S.

В свою очередь, переменная S получила эту строку символов в качестве возвращаемого значения функции sprintf. А этой функции были переданы аргументы, указывающие что необходимо из переменной f1 получить строку символов, первоначально являвшуюся числом (на это указывает аргумент ‘%g’).

Теперь, когда описаны все необходимые функции, приступим к описанию действий, происходящих после нажатия на кнопку. Эта кнопка имеет название (Tag) которое можно прочитать в ее инспекторе свойств правой кнопкой мышки. Это название pushbutton1. Соответственно, в файле, наряду с описаниями всех прочих элементов интерфейса, автоматически сгенерирован и абзац текста, озаглавленный function pushbutton1_Callback.

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

Пример 2. Рассмотрим задачу о вводе матрицы и сохранении ее в файл.

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

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

Опишем действия, происходящие после нажатия на кнопку ввода элемента матрицы.

Это кнопка pushbutton2.

Сначала происходит считывание размерностей матрицы, а также номера строки и номера столбца вводимого элемента матрицы из окошек, где они указаны. Затем матрица считывается из окна, где она видна вся (то есть те ее элементы, которые уже введены, если таковые вообще есть). Это делается функцией str2num, преобразующей строку в матрицу (содержимое окна считается строкой символов). После этого, проверив, что размерность матрицы не превышена, считывается очередной элемент матрицы из окошка, где он указан. Затем матрица, дополненная этим новым элементом, преобразуется в строку функцией mat2str. После этого строка, состоящая из элементов матрицы, выводится в окно функцией set. Затем выполняются изменения значений переменных, соответствующих номеру строки и столбца следующего ожидаемого для ввода элемента матрицы. После этого они выводятся в окна, где указаны номер строки и столбца ожидаемого элемента матрицы. Теперь все готово к очередному циклу ввода элемента матрицы. То есть осталось его впечатать в соответствующее окно и нажать кнопку.

Опишем действия, происходящие после нажатия на кнопку Сохранить. Это кнопка pushbutton3. Сначала считываются размерности матрицы и сама матрица из соответствующих окон. Затем открывается окно выбора файла для записи туда сохраняемой матрицы. Это окно открывается функцией uiputfile. Ее аргументами являются предполагаемый по умолчанию путь/имя файла, а также вызов самого окна выбора, указанного как второй аргумент функции uiputfile. Возвращаемые значения этой функции это файл и путь к нему, выбранные пользователем в окне выбора. Поместим их в переменную KudaZapisat, предварительно соединив в одну строку символов функцией strcat. Теперь передадим эту строку в функцию fopen, открывающую файл, а вторым аргементом ее будет ‘wt’, означающее, что файл открывается для записи. Функция fopen вернет в качестве возвращаемого значения переменную, к которой можно теперь обращаться как к файлу. Передадим эту переменную в функцию fprintf, а также укажем ей аргументы для записи в файл и их формат (числовой). Также введем символ табуляции, чтобы они были расположены раздельно, и символ перевода строки, чтобы перевести строку после их записи. Потом в цикле запишем в файл элементы матрицы, разделяя их табуляцией и по мере надобности переводя строку. Затем с помощью функции fclose закроем файл.

Пример 3. Рассмотрим задачу ввести экспериментальные данные и построить график.

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

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

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

Опишем, что происходит после нажатия на кнопку построения графика. Это кнопка pushbutton5. Считываются строки данных из соответствующих окон интерфейса, преобразуются функцией str2num в векторы чисел. После этого строится функцией plot график. Выводятся подписи к нему и функцией grid on накладывается сетка.

Пример 4. Ввести экспериментальные данные и построить графики к ним.

Создадим интерфейс, аналогичный предыдущему заданию.

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

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

Опишем, что происходит после нажатия на кнопку построения графика. Это кнопка pushbutton5. Считываются строки данных из соответствующих окон интерфейса, преобразуются функцией str2num в векторы чисел. Затем определяется функцией subplot что график будет построен в нижнем левом углу интерфейса. Для этого передаются в функцию subplot аргументы, означающие, что пространство интерфейса разбивается на 2 строки и 2 столбца и вывод идет в тот из фрагментов этого пространства, который считается имеющим номер 3. Это и есть левый нижний угол интерфейса. После этого строится функцией plot график. Выводятся подписи к нему и функцией grid on накладывается сетка.

Затем определяется функцией subplot что следующий график будет построен в нижнем правом углу интерфейса. Для этого передаются в функцию subplot аргументы, означающие, что пространство интерфейса разбивается на 2 строки и 2 столбца и вывод идет в тот из фрагментов этого пространства, который считается имеющим номер 4. Это и есть правый нижний угол интерфейса. После этого строится функцией plot график. Выводятся подписи к нему и функцией grid on накладывается сетка.