Рекомендации к выполнению программы
1.Функции пользователя не должны выполнять вывод результатов на экран, если они для этой цели не предназначены. Расчетные функции, как правило, не выводят никакой информации, кроме служебной, связанной с возможным возникновением ошибок (например, деление на ноль).
2.Задавать исходные данные через ввод с клавиатуры необязательно, достаточно указать все необходимые параметры в коде программы-сценария.
3.Использование глобальных переменных без достаточных оснований не рекомендуется.
4.Вывод результатов на экран можно осуществлять по аналогии с представленным в лаб. раб. 3.
5.Для хранения в одной переменной данных разных типов (например, элементы матрицы и ее индексы) можно использовать структуры или ячейки.
Лабораторная работа 5. ФУНКЦИИ РАБОТЫ С ФАЙЛАМИ
Цель работы: освоить основные функции работы с файлами в среде
MATLAB.
Основные сведения
Для хранения переменных в файлах MATLAB поддерживает специаль-
ный формат – MAT-файлы. Для записи и чтения переменных в файле используются команды save и load.
save filename X Y Z – сохранение переменных X Y Z в файле с именем filename.mat. Если не указать конкретные переменные, в файл запишутся все переменные рабочего пространства. Команда load используется аналогично и осуществляет чтение переменных из файла в рабочее пространство.
MATLAB поддерживает множество других функций для работы с текстовыми файлами (чтение, запись). Функция DLMREAD позволяет считать данные из текстового файла с разделителем. Функция имеет следующие формы вызова:
RESULT = DLMREAD(FILENAME)
RESULT = DLMREAD(FILENAME, DELIMITER) RESULT = DLMREAD(FILENAME, DELIMITER, R, C) RESULT = DLMREAD(FILENAME, DELIMITER, RANGE)
Данные из файла с именем, указанным в текстовой строке FILENAME, считываются в матрицу RESULT. DELIMITER – символ разделителя, числа R
31
и C указывают позицию, откуда начинается считывание из файла (по умол-
чанию R = 0, С = 0). RANGE = [R1 C1 R2 C2] – указание начальной и конечной позиций при считывании. Если в файле, откуда считываются данные,
есть пустые поля, функция DLMREAD заполнит их нулями, что позволяет считывать из файлов несимметрично хранящиеся данные. Обратная функция
DLMWRITE позволяет записать в файл данные с разделителем:
DLMWRITE(FILENAME, M, DELIMITER, R, C);
Функция записывает в файл с именем FILENAME содержимое матрицы M
с разделителем DELIMITER (необязательный параметр, разделитель по умолчанию – знак запятой). Необязательные параметры R, C используются так же,
как и при чтении. В качестве параметра можно также указать символьную константу ‘–append’, что позволит дописывать данные в конец уже суще-
ствующего файла (в противном случае содержимое файла каждый раз с вызовом функции будет обновляться).
Для считывания и записи данных в определенном формате удобнее использовать функции, перенесенные в MATLAB из C – fscanf и fprimtf. Пред-
варительно нужно осуществить операцию открытия файла:
FID = FOPEN(FILENAME, PERMISSION)
Имя файла указано в строке FILENAME, параметр-строка PERMISSION устанавливает режим работы с файлом: ‘r’ (по умолчанию) – файл открыт для чтения; ‘w’ – для записи; ‘a’ – для добавления (append); дополнительный символ ‘+’ к перечисленным параметрам откроет файл сразу для чтения и записи.
В случае успешного открытия файла его идентификатор FID примет значение положительного целого числа (от 3 и выше), при неудачной попытке FID бу-
дет иметь значение –1.
После открытия файла операции чтения и записи осуществляются с по-
мощью идентификатора. Функция чтения имеет вид
[A, COUNT] = FSCANF(FID, FORMAT, SIZE)
Считанные из файла с идентификатором FID данные записываются в матрицу A. Аргументы FORMAT, SIZE и выходное значение COUNT имеют то же назначение, что и в функции SSCANF (см. описание к лаб. раб. 3).
Функция форматной записи в файл FPRINTF также имеет вид, анало-
гичный SPRINTF: FPRINTF(FID, FORMAT, A, ...). Если идентификатор FID не указан, функция FPRINTF выводит содержимое форматированных аргумен-
тов в командное окно.
32
После окончания работы с функциями необходимо закрыть файл коман-
дой FCLOSE(FID). Команда FCLOSE(‘all’) закроет все открытые файлы.
Методика выполнения работы
1.Составить блок-схему алгоритма обработки данных из файла.
2.Написать и отладить программу считывания данных из файла-
источника, расчета значений функций согласно табл. П1 и записи вычисленных значений в файл результатов.
Требования к выполнению программы и результатам
1.Исходные данные должны быть заданы в текстовом файле-источнике,
ввиде двух строк. Первая строка содержит три числовых параметра: началь-
ное и конечное значение диапазона переменной x; вторая строка содержит три параметра для переменной ω, задаваемой функцией LOGSPACE.
2. Математические функции f t , A , должны быть оформлены
ввиде функций пользователя.
3.Результаты расчета обеих функций должны быть записаны в файл ре-
зультатов в виде двух столбцов: аргумент и значение.
4.Перед выводом таблиц значений функций должны быть заголовки.
5.Запись в файл должна быть реализована с помощью функции fprintf.
Рекомендации к выполнению программ
1. Для считывания данных из файла можно использовать любую функ-
цию.
2. Функции пользователя целесообразно реализовать так, чтобы в каче-
стве аргумента можно задавать вектор значений.
Лабораторная работа 6. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ
ГРАФИКИ В MATLAB
Цель работы: изучение методов работы с объектно-ориентированной графикой в среде MATLAB.
Основные сведения
В лаб. раб. 1 были изучены простейшие средства для работы с графикой MATLAB. Использование средств объектно-ориентированного подхода к графике позволяет раскрыть ее возможности значительно шире.
33
Графическое окно в MATLAB (figure) представляет собой графический объект, обладающий рядом свойств, например координаты его расположения на экране, ширина, высота, цвет фона. Внутри графического окна можно разместить другие графические объекты – оси, элементы управления. Оси используются для построения графиков, элементы управления – для создания приложений GUI (Graphic User Interface). В данной работе ограничимся построением графиков.
Связь графического окна (figure) с размещенными в нем осями (axes) строго иерархическая. Для осей графическое окно является предком, роди-
тельским объектом (parent), а объект axes – потомком, или дочерним объектом (children) графического окна. Внутри осей можно размещать линии (объ-
ект line) или текст (объект text), которые также являются дочерними по отношению к осям, в которых они размещены. Все эти объекты имеют свои свой-
ства, которые доступны изменениям с помощью универсальных функций. Для начала необходимо обеспечить доступ к графическим объектам. До-
ступ реализуется через механизм графических указателей (graphic handle). Чтобы создать графический указатель, можно использовать конструкции
h1 = figure(2);
h2 = axes;
h3 = plot(10, 10, '*');
При этом все указатели h1, h2, h3 указывают на различные объекты: h1 – на окно; h2 – на оси; h3 – на объект line (так как функция plot как раз реализует отрисовку линий). Для просмотра свойств графических объектов ис-
пользуется команда GET(H), где H – графический указатель. Эта же команда используется для просмотра значений любого свойства:
PROP = GET(H, ‘PropertyName’)
Самостоятельное задание: получить указатели родительских объектов для объекта с указателем h3 из примера. Убедиться по значениям идентификаторов указателей, что полученные указатели совпадают с h1 и h2.
Для изменения свойств любого графического объекта применяется функция SET, которая имеет вид
SET(H, ‘PropName1’, PropValue1, PropName1’, PropValue2, …)
H – графический указатель объекта; далее последовательно перечисля-
ются пары: наименование свойства объекта – новое значение. Число пар не ограничено. При изменении свойств необходимо следить за типом данных и размерностью значения.
34
Ниже приводится еще несколько полезных функций для работы с гра-
фическими указателями:
GCF(), GCA() – получение указателя на активную фигуру и активные оси соответственно. Активным считается последний созданный, вызванный или модифицированный объект.
LINE(), TEXT() – функции для создания графических объектов линий и текста, размещаемых внутри осей. Подобные объекты также называются графическими примитивами. Эти функции также возвращают графические указатели, их свойства можно менять, как свойства осей и графических окон.
Методика выполнения работы
1.В соответствие с вариантом задания (табл. П6) составить блок-схему алгоритма определения произвольного решения уравнения ax b f x .
2.Написать и отладить программу решения уравнения графическим способом. Оценить точность решений. В случае низкой точности (более 0.01) найти численное решение.
3.Отобразить решения, удовлетворяющие требуемой точности, средствами объектно-ориентированной графики.
4.Подобрать коэффициенты таким образом, чтобы уравнение имело единственное решение.
Рекомендации к выполнению работы
Для получения координат графика нужно использовать функцию ввода [X, Y] = GINPUT(n), где n – количество точек, задаваемых пользователем с помощью мыши; X, Y – векторы координат длиной n. Если указан один выходной параметр, координаты будут сформированы в виде матрицы разме-
ром n×2.
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
Matlab Documentation. URL:https://www.mathworks.com/help/matlab/index.
html.
Потемкин. В. Г. Введение в MATLAB (v 5.3). URL: http://matlab.exponenta.ru /ml/book1/index.php
35