Материал: Sb97304

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Рекомендации к выполнению программы

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