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

1-2 Моделирование / Matlab. Практический подход. Самоучитель

.pdf
Скачиваний:
769
Добавлен:
31.01.2021
Размер:
12.72 Mб
Скачать

Приложение А. Файловый ввод/вывод

Рис. А.5. Сохранение данных в файл с помощью функции save()

ски в команде res=[x',y',z'] используются для формирования матрицы из трех столбцов. Содержимое этой матрицы мы записываем в текстовый файл. Для этого используется команда save('C:\Documents\Data\Funcs. txt','res','-ascii'). Первый аргумент функции save() определяет полное название файла, в который записывается переменная, определяемая вторым аргументом функции save(). Опция -ascii является индикатором того, используется ли текстовый формат. В результате в файл Funcs.txt будет записано содержимое переменной res. Содержимое этого файла показано на рис. А.6.

Рис. А.6. Содержимое файла Funcs.txt

На заметку

Если файл Funcs.txt не существовал, он будет создан. Если он существовал, содержимое файла переписывается.

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

421

Самоучитель Matlab

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

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

Табл. А.1. Некоторые опции определения режима открытия файла

Опция

Назначение

 

 

'r'

Файл открывается для чтения. Этот режим применяется по умолчанию

'w'

Файл открывается (или создается новый) для записи. Если у файла есть

содержимое, при записи оно удаляется

 

 

'a'

Файл открывается (или создается новый) для записи. Новое содержимое

дописывается в конец файла. Старое содержимое не удаляется

 

 

'r+'

Существующий файл открывается для чтения и записи

'w+'

Открывается существующий файл или создается новый для чтения и за-

писи. Новое содержимое замещает старое

 

 

'a+'

Открывается существующий файл (или создается новый) для чтения и за-

писи. Новое содержимое дописывается в конец файла

 

 

По умолчанию используется режим работы с бинарными файлами. Для работы с текстовыми файлами в опции режима добавляется литера t – например, 'rt' (открытие текстового файла для чтения) или 'wt+' (открытие (создание) текстового файла для чтения и записи).

В качестве результата при вызове функции fopen() возвращается указатель на открытый файл. Открываемые файлы нумеруются подряд, начиная с номера 3. Если файл открыт не был, возвращается значение -1.

На заметку

По умолчанию индексы 0, 1 и 2 имеют стандартные файлы системного ввода stdin, системного вывода stdout и системный файл потока ошибок stderr соответственно. Эти файлы доступны автоматически, и открывать их не нужно.

После завершения работы с файлом его следует закрыть с помощью функции fclose(). Аргументом функции передается указатель на файл (индикатор файла, который получаем при его открытии). Есть также ряд полезных функций, которые используются при работе с файлом. Среди них функции fread() и fwrite(), предназначенные соответственно для чтения данных из файла и записи данных в файл. Функция feof() позволяет определить, достигнут ли конец файла, функция ftell() возвращает в качестве значения текущую позицию указателя (смещение в байтах от начала файла), функция frewind() переводит указатель в начало файла, а функция fseek() позволяет перемещать указатель в нужную позицию в файле.

422

Приложение Б Структуры и ячейки

Чрезвычайно интересно! Поразительную ерунду сочиняют эти газетчики с утра. Дождемся вечерних новостей.

К/ф "Клуб самоубийц, или Приключения титулованной особы"

Понятие структуры в Matlab близко к тому, что мы подразумеваем под структурами, например, в С++. Структура представляет собой способ организации разнородных данных. Данные относятся к структуре через поля. Фактически в структуре объединяются разные переменные, которые являются полями структуры. Другими словами, если о каком-то объекте известно, что по своей типизации он относится к структуре, то, во-первых, об этом объекте будем говорить, что он является экземпляром структуры и, во-вторых, у этого объекта есть поля. Значения полей могут быть самыми разнообразными.

На заметку

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

Но если в С++ перед созданием экземпляров структуры саму структуру нужно предварительно описать, то в Matlab экземпляр структуры можно создавать сразу. Существует несколько способов сделать это. Так или иначе, используется точечный синтаксис – после имени экземпляра структуры через точку указывается поле (имя поля). Пример создания экземпляра простой структуры приведен в документе на рис. Б.1.

Экземпляр структуры создается командой

Card.name='Алексей Васильев';

Card.age=36;

Card.city='Киев';

Card.email='vasilev@univ.kiev.ua'

У созданного экземпляра структуры Card четыре поля: name, age, city и email. Для того, чтобы получить значение поля, используем инструкцию вида структура.поле – как, например, в команде Card.email.

Экземпляры структур можно создавать также с помощью функции struct(). Простой пример использования этой функции приведен в документе на рис. Б.2.

423

Самоучитель Matlab

Рис. Б.1. Создание экземпляра структуры

Рис. Б.2. Еще один способ создания экземпляра структуры

В этом случае экземпляр структуры создается такой командой:

Card=struct('name','Алексей Васильев','age',36,...

'city','Киев','email','vasilev@univ.kiev.ua')

Аргументы функции struct() указываются парами поле-значение. Результат – аналогичный предыдущему.

Использование единственного экземпляра структуры представляется малоперспективным. Вся прелесть структур связана как раз с возможностью использования многих экземпляров структуры. Обычно такие "многие" экземпляры реализуют в виде массива – массива структур. Пример создания небольшого массива структур приведен в документе на рис. Б.3.

424

Приложение Б. Структуры и ячейки

Рис. Б.3. Массив структур

Создание структур – элементов массива основано на определении полей соответствующих структур. Обращение к полям структуры – элемента массива выполняется в формате структура(индекс).поле. Например, массив из трех структур создается такими командами:

>>MS.code=[1 2 3]; MS.num=100;

>>MS(2).code=[4 5 6]; MS(2).num=200;

>>MS(3).code=[7 8 9]; MS(3).num=300;

Вызов команды, состоящей из имени массива структур (например, команда MS), приводит к отображению общей информации о массиве.

425

Самоучитель Matlab

На заметку

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

Ссылка вида структура(индекс) означает обращение к экземпляру структуры - элементу массива. Инструкция вида массив_структур.поле (как, например, в команде MS.num) возвращает в качестве результата список из значений соответствующих полей элементов массива структур.

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

Во многом массив ячеек похож на обычный массив. Однако при этом важно помнить, что элементы такого массива в общем случае относятся к разным типам. Кроме того, при работе с массивами ячеек следует понимать разницу между ячейкой массива и содержимым ячейки массива. Создается массив ячеек с помощью функции cell() (аргументы – размеры массива) или путем явного указания элементов массива. Однако если элементы обычного массива заключаются в квадратные скобки, то элементы массива ячеек заключаются в фигурные скобки. Чтобы получить доступ к содержимому ячейки, индекс ячейки указывается в фигурных скобках после имени массива. Простой пример создания массива ячеек с помощью функции cell() приведен в документе на рис. Б.4.

Сначала командой IM=cell(2,3) объявляем массив ячеек размерами 2×3. Чтобы заполнить ячейки значениями, выполняем оператор цикла. Индексная переменная i пробегает в цикле значения от 1 до 3. В теле цикла выполняются две команды: IM{1,i}=ones(i) и IM{2,i}=rand(i,i). Таким образом, ячейки первого ряда массива ячеек IM заполняются квадратными единичными (заполненными единицами) матрицами размера 1, 2 и 3 соответственно. Ячейки второго ряда массива ячеек IM заполняются квадратными матрицами, заполненными случайными числами. Вызов имени массива ячеек IM приводит к отображению информации о содержимом ячеек массива. Чтобы получить содержимое ячейки массива, индексы указываем в фигурных скобках – как, например, в команде IM{1,2}. Результатом является квадратная матрица из единиц размера 2×2. Результатом вызова команды IM{2,3} является матрица из случайных чисел размера 3×3. Другой пример – на этот раз "явного" создания массива ячеек – приведен во второй части рассмотренного выше документа, представленной на рис. Б.5.

426

Приложение Б. Структуры и ячейки

Рис. Б.4. Создание массива ячеек с помощью функции cell()

Массив ячеек создается командой CA={'Текст',100;[1 2 3],IM}. Массив ячеек CA состоит из четырех ячеек – по две ячейки в строке. Первая ячейка в первой строке является текстом, вторая – числом. Первая ячейка второй строки содержит числовой массив, а вторая ячейка во второй строке сама является массивом ячеек – это тот массив IM из матриц, который был создан на предыдущем этапе (см. рис. Б.4). Как и в предыдущем случае, вызов команды из имени массива ячеек позволяет получить общие сведения о том, что записано в ячейки массива. Для доступа к содержимому ячейки индексы указываем в фигурных скобках. Например, в результате вызова команды CA{1,1} получаем значение первой ячейки в первой строке. Для инструкции CA{2,1} результатом является массив, записанный в эту ячейку. Возможно, комментариев потребует команда CA{2,2}{1,3}, в результате выполнения которой получаем квадратную матрицу размера 3×3, заполненную единицами. Объяснение простое. Результатом инструкции CA{2,2} является содержимое второй ячейки во втором столбце. Это массив ячеек IM. Поэтому инструкция CA{2,2}{1,3} на самом деле означает содержимое ячейки IM{1,3}. Это и есть наша загадочная матрица.

427

Самоучитель Matlab

Рис. Б.5. Явное создание массива ячеек

428

Приложение В

Надстройка для работы с Excel

В сфере услуг еще, к сожалению, характер требуется. Не докажешь – не получишь!

К/ф "Чародеи"

Приложение Excel занимает особое место среди офисных приложений. Если коротко, то приложение это исключительно простое в использовании как для расчетного пакета и достаточно продуктивное как для массового приложения, рассчитанного на широкий круг пользователей. Более того, приложение Excel идеологически близко, если так можно выразиться, к пакету Matlab, поскольку в Excel также используется принцип реализации структур данных в виде таблиц/матриц. Это обстоятельство наводит на естественную мысль о том, чтобы объединить каким-то образом удобство интерфейса Excel и вычислительную мощь Matlab. Такая возможность реализуется с помощью надстройки Spreadsheet Link EX, которая входит в состав пакета Matlab. Здесь мы опишем, во-первых, как эта надстройка подключается, и, во-вторых, рассмотрим некоторые простые примеры использования возможностей надстройки.

На заметку

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

Общая идея, положенная в основу использования надстройки Spreadsheet Link EX, состоит в том, что после подключения надстройки часть функциональных возможностей Matlab становится доступной непосредственно из рабочего документа Excel. Другими словами, данные из документа Excel могут быть импортированы в рабочее пространство Matlab, обработаны там и экспортированы в документ Excel. Еще раз подчеркнем, что все эти действия можно выполнить, так сказать, "не покидая" приложение Excel.

Как уже отмечалось выше, для того, чтобы использовать надстройку Spreadsheet Link EX, ее необходимо подключить. Процедура эта достаточно простая и стандартная для Excel. В частности, на вкладке Файл ленты приложения Excel выбираем команду Параметры (рис. В.1).

В результате открывается окно настроек Excel, которое называется Параметры Excel. В левой части окна имеется ряд пиктограмм, определяющих

429

Самоучитель Matlab

тот или иной раздел для выполнения настроек. В данном случае нас интересует раздел Надстройки (рис. В.2).

Рис. В.1. На вкладке Файл выбираем команду Параметры

В нижней части этого окна есть раскрывающийся список Управление, который по умолчанию открыт в позиции Надстройки Excel. Справа от этого списка есть кнопка Перейти, которую необходимо щелкнуть. После этого откроется диалоговое окно Надстройки, в котором непосредственно выбираются надстройки для подключения. В принципе, достаточно в списке надстроек установить флажок опции с названием надстройки Spreadsheet Link EX и щелкнуть кнопку OK (рис. В.3).

Проблема,однако,втом,что,скореевсего,вспискедоступныхнадстроекнужной надстройки не будет. Причина та, что по умолчанию в списке надстроек отображаются только те из них, что записаны в определенный каталог. Очевидно, что файл надстройки Spreadsheet Link EX находится не там, где хотелось бы. Соответствующий файл следует найти, что называется, вручную. Для этого щелкаем кнопку Обзор и в открывшемся окне находим в системе каталогов файл надстройки Spreadsheet Link EX. В Matlab для разных версий Excel предлагаются разные файлы надстройки. Для версии Excel 2010 (как и Excel 2007) файл называется excllink2007.xlam. По умолчанию файл находится в подкаталоге \toolbox\exlink того каталога, в который установлен Matlab (например, каталог C:\Program Files\MATLAB\R2010b\

430