Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Применение MATLAB для решения аналитических задач моделирования. Учебное пособие
.pdf
Функции времени и даты Matlab
91
Поскольку данные у нас ежемесячные, то столбца с днями у нас
нет, однако datenum требует указывать дату с точностью до дня. Поэтому
будем указывать середину месяца (15 число):
>>datenum(nao(1,1),nao(1,2),15)
ans = 712238
Так мы получили дату в маталбовском формате для первого изме-
рения. Мы можем последовательно рассчитать это для каждой строки
матрицы или создать цикл, но datenum прекрасно работает с векторами
(даже вперемешку со скалярами), поэтому:
>>d = datenum(nao(:,1), nao(:,2), 15);
Теперь нужно указать наш вектор с датами в функции plot:
>>.plot (d,nao(:,3))
MATLAB откладывает эти числа по оси Х. Однако можно испра-
вить, запустив функцию dateteick:
>>datetick('x','YYYY')
где ‘x’ – ось, с которой мы будем работать, а ‘YYYY’ – формат записи
даты (вы можете указать какой угодно, например ‘dd–mmm–yyyy’,
‘mm/dd/yy’, ‘mmmyy’ и т.п.). В результате получаем такую картинку:
В 2014 г. в MATLAB ввели новый формат переменных – datetime. Он
имеет много возможностей и вероятно заметки на эту тему ещё будут на
нашем сайте. Пока же ограничимся нашей задачей. Создать вектор со значениями в формате datetime очень просто и аналогично тому, как мы это
делали с datenum. С построением тоже сложностей не должно возникнуть:
>>d_new = datetime(nao(:,1),nao(:,2),15);
plot (d_new,nao(:,3))
Если вы захотите изменить формат отображения чисел, то можно
использовать xtickformat:
>>xtickformat('yyyy–mm')
Как видно, оба рассмотренных нами способа достаточно простые,
но по всей видимости datetime в современных версиях MATLAB более
предпочтителен, на нём уже завязаны многие обновлённые функции, а
будет завязано ещё больше. Если же у вас уже даты представлены в формате datenum, то перевести его в datetime несложно:
>>d_new2 = datetime(d,'ConvertFrom','datenum');

Применение Matlab для решения аналитических задач моделирования
92
Лабораторная работа № 12.
Функции времени и даты Matlab
В соответствии с вариантом по списку, выполните задание из
табл. 36.
Таблица 36
Варианты заданий для лабораторной работы № 12
№
варианта
Формат
Задание
1
'dd–mmM–yyyy'
Выведите календарь для даты первого полета
человека в космос. Рассчитайте, сколько дней
прошло с того дня
2
'HH:MM:SS'
Выведите текущее время на экран. Преобразуйте дату вашего рождения в ее порядковый
номер
3
'dd–rmiM–yyyy
HH:MM:SS'
Выведите на экран календарь за последний
месяц вашего года рождения
4
'dd–mmM–yyyy'
Выведите календарь для даты вашего первого
дня в школе. Рассчитайте, сколько дней прошло с того дня
5
'dd–rmiM–yyyy
HH:MM:SS'
Выведите на экран календарь за первый месяц
вашего года рождения
6
'HH:MM:SS'
Преобразуйте дату вашего рождения в ее порядковый номер. Выведите календарь для
даты вашего дня рождения за прошлый год
7
'dd–mmM–yyyy'
Выведите календарь с датой вашего первого
дня в университете
8
'dd–rmiM–yyyy
HH:MM:SS'
Выведите на экран календарь за последний
месяц вашего года рождения. Рассчитайте,
сколько дней прошло с последнего дня рождения
9
'dd–mmM–yyyy'
Преобразуйте дату вашего рождения в ее порядковый номер. Выведите на экран календарь за первый месяц вашего года рождения
10
'dd–rmiM–yyyy
HH:MM:SS'
Выведите на экран календарь за последний
месяц вашего года рождения. Рассчитайте,
сколько дней прошло с последнего дня
рождения

Интеграция Matlab
93
ИНТЕГРАЦИЯ MATLAB
Matlab позволяет проводить интеграцию со сторонними программами и средами разработки. Например, можно создать C/C++ библиотеку
в среде Matlab и подключить ее средствами MATLAB Compiler в проект,
созданный в Microsoft Visual Studio7.
Интеграция с математическими системами, такими как Mathcad,
Maple V и Mathematica, снижает риск возникновения ошибок в расчетах.
MATLAB – Notebook позволяет объединять среду с современными тек-
стовыми процессорами, составлять документы в текстовом процессоре
Word различных версий. Наличие инструментов для вставки результатов
вычислений в виде документов позволяет оперативно изменять примеры
для электронных книг и презентаций. При этом данные могут быть представлены в численном, табличном и графическом виде (рис. 48). Экспорт
фигуры Matlab в Microsoft PowerPoint позволяет создавать наглядные презентации с точными расчетными данными.
Рис. 58. Окно сохранения графики
Графику можно экспортировать разными способами. Например,
при копировании рисунков из меню Правка (опция Копировать рисунок)
можно воспользоваться любым из рисунков-экспортеров функции (печать, hgexport, SAVEAS) (рис. 49). Разнообразие методов позволяет работать с растровыми изображениями и векторной графикой. С помощью
смарт-экспортера для Matlab можно сразу создать группу объектов для
PowerPoint.
7
Интеграция Matlab и Microsoft Visual Studio с помощью Matlab Compiler.
URL: https://exponenta.ru/news/integraciya-matlab-i-microsoft-visual-studio-s-pomoschyu-matlab-compiler

Применение Matlab для решения аналитических задач моделирования
94
Рис. 69. Экспорт графика
Смарт PowerPoint экспортер для Matlab представляет собой про-
грамму для экспорта фигур Matlab в PowerPoint и преобразует график в
группу объектов PowerPoint. Затем он редактирует различные свойства
объекта непосредственно в PowerPoint, таким образом, что они могут
быть легко изменены без нарушения внешнего вида, выравнивания и т.д.
Графиком можно поделиться в Интернете с помощью онлайнинструментов обмена, таких как SlideOnline.com.
Нажатие на кнопку открывает PowerPoint, с помощью COM-инте-
грации, а также создает объекты один за другим, основываясь на графических объектах на рисунке.

Интеграция Matlab
95
Лабораторная работа № 13.
Экспорт графиков в MS Power point
Экспортируйте графики, созданные по табл. 27, 28 в лабораторных
7 и 8 во все доступные форматы. Сравните качество и информационный
вес полученных файлов. Выберите наиболее эффективный метод экспорта
для двумерных и для трехмерных графиков по соотношению «вескачество». Номер варианта выберите из расчета: № варианта в прошлых
лабораторных+1. Таким образом, при обычном выполнении варианта 3, в
данной лабораторной требуется построить графики для 4-го варианта.

Применение Matlab для решения аналитических задач моделирования
96
РАБОТА С ФАЙЛАМИ
Создание программ часто предполагает сохранение результатов
расчетов в файлы для их дальнейшего анализа, обработки и хранения.
В связи с этим в среде MATLAB реализованы различные функции для
работы с файлами, содержащими данные в разных форматах.
Следующие операторы используются для загрузки данных из файла, расположенного на локальном диске, в среду выполнения MATLAB:
load, fread и fscanf. Для сохранения данных из рабочей среды MATLAB в
файл на локальном диске можно использовать следующие операторы:
save, fwrite, fprintf.
В простейшем случае для сохранения и последующей загрузки каких-либо данных в среде MATLAB предусмотрены соответственно сле-
дующие функции: save и load, которые имеют следующий синтаксис:
save<file_name><var_names>
load<file_name><var_names>
Функция сохранения позволяет сохранять произвольные переменные, используемые в программе, в файл, который по умолчанию будет
находиться в рабочем каталоге (обычно это рабочий подкаталог) и иметь
расширение .mat. Соответственно, функция загрузки позволяет загрузить
ранее сохраненные переменные из указанного файла с расширением .mat.
Недостатком функций сохранения и загрузки является то, что они
работают только с определенными форматами файлов (обычно с расширением .mat) и не позволяют загружать или сохранять данные в других
форматах. При этом возникает необходимость загрузки информации,
например, из бинарных файлов, созданных другими программными продуктами, для дальнейшей обработки результатов в среде MATLAB. Для
этого в среде MATLAB предусмотрены следующие функции:
fwrite(<file_id>, <variable>, <type>)
<variable>=fread(<file_id>, <size>, <accuracy>)
где <file_id> – указатель на файл, с которым вы хотите работать. Для получения идентификатора файла используется функция fopen, имеющая
следующий синтаксис:

Работа с файлами
97
<file_id>=fopen(<file_name>,<operating_mode >)
где параметр <operating_mode> может принимать значения, указанные в
табл. 37.
Таблица 37
Основные функции для работы с файлами
Функции
Назначение
A = fread(fileID)
Считывает данные из открытого двоичного файла в вектор-столбец A и устанавливает указатель файла на маркер
конца файла. Бинарный файл обозначается идентификатором файла, fileID. Используйте fopen, чтобы открыть
файл и получить значение fileID. Когда вы закончите
чтение, закройте файл, вызвав fclose(fileID)
A = fread
(fileID,sizeA)
Ссчитывает данные файла в массив A с размерами
sizeA и устанавливает указатель файла после послед-
него прочитанного значения. fread заполняет A в порядке столбцов
A = fread
(fileID,precision)
Интерпретирует значения в файле в соответствии с
формой и размером, описываемыми точностью
A = fread
(fileID,sizeA,precision)
Считывает данные файла в массив A с размерами sizeA
и устанавливает указатель файла после последнего прочитанного значения. fread заполняет A в порядке столбцов. Значения в файле интерпретируются в соответствии с формой и размером, описываемыми точностью
A = fread(___,skip)
Пропускает количество байтов или битов, указанное параметром skip, после чтения каждого значения в файле
A = fread
(___,machinefmt)
Дополнительно указывает порядок чтения байтов или
битов в файле
[A,count] = fread(___)
Дополнительно возвращает количество символов, которые fread считывает в A. Вы можете использовать этот
синтаксис с любым из входных аргументов предыдущих
синтаксисов
Если функция fopen() по какой-то причине не может корректно от-
крыть файл, она возвращает –1. После завершения всех файловых операций файл необходимо закрыть с помощью функции fclose следующей
структуры:
fclose(<file_id>)
С помощью команды fclose (all) вы можете закрыть сразу все от-
крытые файлы, кроме стандартных системных файлов.

Применение Matlab для решения аналитических задач моделирования
98
Рис. 50. Пример считывания конкретного количества элементов из файла
В упрощенной версии явно указывается количество элементов файла, которые необходимо подсчитать (рис. 50). Если общее количество элементов неизвестно или динамически изменяется в процессе работы, данные
из файла считываются до тех пор, пока не будет достигнут его конец. Чтобы проверить, достигнут ли конец файла, MATLAB использует функцию
feof (<идентификатор файла>), которая возвращает 1, когда конец файла
достигнут, и 0 в противном случае. EOF расшифровывается по аналогии с
другими языками программирования, как конец файла (end of file).
Таблица 38
Режимы работы с файлами в среде MATLAB
при использовании функции fopen
Режим
работы
Назначение
r
Чтение данных
r+
Чтение и запись
w
Запись с заменой содержимого файла
w+
Чтение и запись с заменой содержимого и созданием файла при
необходимости
a
Добавление данных и создание файла при необходимости
a+
Чтение данных, добавление данных и создание файла при необходимости
b
Работа с бинарными файлами, например, rb – чтение данных из бинарного файла
Описанные ранее функции для работы с файлами позволяют записывать и читать информацию по байтам, которые затем нужно правильно
интерпретировать для преобразования в числа или строки. В то же время
результатом работы многих программ являются текстовые файлы, в которых явно прописаны определенные числа или текст. Побайтовое чтение
такого файла и последующая интерпретация полученных данных – до-

Работа с файлами
99
вольно трудоемкая задача, поэтому для этих целей были специально разработаны функции форматированного чтения или записи информации:
fscanf и fprintf соответственно.
Синтаксис fscanf (функция для чтения данных из файла):
[value, count]=fscanf(file_id, format, size)
Cинтаксис fprintf (функция для записи данных в файл):
count=fprintf(file_id, format, x,y,...)
где значение (value) – результат чтения данных из файла; count – количество прочитанных (записанных) данных; fid – указатель на файл; format формат чтения (записи) данных; size – максимальное количество прочитанных данных, x,y,… – переменные для записи в файл.
Таблица 39
Основные настройки для параметра format
функций fscanf() и fprintf()
Спецификаторы
Спецификатор
Назначение
%d
целые числа
%f
вещественные числа
%u
беззнаковые целые числа
%c
символы
%s
строковые данные
Управляющие символы
Символ
Назначение
\r
возврат каретки
\t
горизонтальная табуляция
\n
переход на новую строку
Функция fprintf() позволяет вносить в один файл разнородные
данные в нужном формате. Доступность строковых переменных позволяет добавлять различные текстовые надписи в файл.
Для вывода цветного текста в командной строке вводится функция
cprintf. Помимо замены цвета для текста можно задать подчеркивание и
полужирное начертание (рис. 51).

Применение Matlab для решения аналитических задач моделирования
100
Рис. 51. Пример использования функции cprintf
Лабораторная работа № 14.
Форматированные файлы
Рассмотрите на практике все перечисленные выше режимы работы
с файлами. Измените и сохраните файл one.txt из библиотеки. Создайте
новый файл one.bin и скопируйте в него данные из файла one.txt.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
