- •Раздел 1 Основные понятия среды matlab
- •1. Начало работы в среде matlab
- •1.1. Характеристика среды matlab
- •1.2. Общие положения и правила работы в среде matlab
- •1.3. Работа в командном окне
- •1.4. Правила и особенности ввода математических выражений
- •1.5. Сохранение содержимого рабочего окна
- •2 Системные переменные и типы данных
- •2.1 Системные переменные
- •2.2. Типы данных. Описание основных типов
- •2.3. Комплексные числа
- •2.4. Символьные переменные
- •2.5. Массивы
- •2.5.1 Задание массивов
- •2.5.2 Доступ к элементам массивов
- •2.5.3 Функции обработки массивов
- •2.6 Тип данных структура (struct)
- •2.6.1 Задание структур
- •2.6.2 Функции обработки структур
- •2.7 Тип данных ячейка (сell)
- •2.8 Функции определения типов
- •2.9 Функции для работы со значениями даты и времени
- •2.10 Функции преобразования типов
- •3. Основные операции и математические функции matlab
- •3.1 Основные арифметические операции
- •3.2 Основные элементарные функции
- •Help имя_функции,
- •3.3 Операции отношения и логические операции
- •4 Операторы среды matlab
- •4.1 Условный оператор if
- •4.2 Условный оператор switch
- •4.3 Реализация циклических процессов
- •4.3.1 Оператор цикла while
- •4.3.2 Оператор цикла for
- •Pause – останавливает выполнение программы до момента нажатия любой клавиши на клавиатуре; pause(n) – останавливает выполнение программы на n секунд;
- •Примеры.
- •Как и в случае сценариев, к подпрограмме функции можно обратиться по имени, более того функции могут быть компонентами математических выражений и операндов, а также параметрами других функций.
- •5.4 Создание подпрограмм с переменным списком входных и выходных параметров
- •5.5 Локальные и глобальные переменные
- •5.6 Созданий функций пользователя и указателей на функции. Функции как аргументы функций.
- •5.8 Сообщения об ошибках
- •6 Ввод данных и работа с файлами
- •6.1 Использование рабочей области Workspace
- •6.2 Чтение и запись неформатированных файлов
- •6. 3 Работа с текстовыми и бинарными файлами
- •6.3.1 Команды открытия и закрытия файлов
- •6.3.2 Команды чтения и записи fread и fwrite
- •6.4 Операции над форматированными файлами
2.6 Тип данных структура (struct)
2.6.1 Задание структур
Структура – это сложный тип, позволяющий объединить в себя данные разных типов, и даже другие структуры. Схематическое представление структуры приведено на рис. 1.6.
Рис. 1.6 Графическое представление структуры
Синтаксис
S = struct('field1',VALUES1,'field2',VALUES2,...), где field1 – название первого поля структуры; VALUES1 – переменная первого поля структуры, и т.д.
struct(OBJ) – конвертирует объект OBJ в эквивалентную структуру или массив структур. OBJ может быть объектом или массивом Java.
Поля могут представлять собой массивы. Также можно создавать массивы структур. Каждое поле имеет свой тип данных и значение. Для того, чтобы записать в эту структуру конкретные значения используется символ ‘.’ (точка) для доступа к тому или иному полю структуры.
Примеры.
Создание структуры с простыми полями.
S = struct('street','','building_number','','project', '','floors',1);
Структура состоит из следующих полей:
street – название улицы;
building_number – номер здания;
project – шифр проекта;
floors – количество этажей.
Зададим значения полей структуры:
S.street='Питерская';
S.building_number='3А';
S.project='1.400-15';
S.floors=9;
Для хранения информации о совокупности зданий, создадим массив структур из 500 элементов:
Building(500,1)=struct('street','','building_number','','project', … '','floors',1);
Обратиться к конкретному элементу массива можно следующим образом:
Building(1).street='Питерская';
Building(1).building_number='3А';
Building(1).project='1.400-15';
Building(1).floors=9;
Создание структуры с полями типа матрица и структура (рис. 1.7). Причем, поля также могут быть массивами.
>> A = struct('data',[1 2 3; 4 5 6],... % первое поле структуры
'info', struct('fild_1','val1','fild_2',[7 8 9])) % второе поле структуры
A =
data: [2x3 double]
info: [1x1 struct]
>> A(1).data = [1 2 3; 4 5 6];
>> A(1).info.fild_1 = 'val1'; A(1).info.fild_2 = [7 8 9];
>> A(2).data = [10 11 12; 13 20 30];
>> A(2). info.fild_1 = 'val2'; A(2). info.fild_2 = [30 40 50];
>> A =
1x2 struct array with fields:
Data
info
Рис. 1.7 Структура массива А (пример 2)
На рис. 1.7 видно, что структура А состоит из двух полей: data и info, которые являются векторами размерности 2, где в свою очередь значение первого поля – матрица, а второго – структура, состоящая также из двух полей.
2.6.2 Функции обработки структур
При работе со структурами полезными являются функции, приведенные в таблице 1.10, которые позволяют программно определить всю необходимую информацию о той или иной структуре и корректно выполнять обработку ее полей.
Таблица 1.10. Функции работы со структурами
Функция |
Назначение |
isstruct(S) |
возвращает 1 (истину), если аргумент структура и 0 в противном случае |
isfield(S, 'name') |
возвращает 1 (истину), если имеется такое поле и 0 в противном случае |
fieldnames(S) |
возвращает массив строк с именами всех полей |
getfield(S, 'field')
getfield(S.{i,j}, 'field', {k}) |
возвращает содержимое поля структуры S, что эквивалентно S.field эквивалентно F=S(i J).field(k) |
setfield(S. 'field' ,V)
setfie1d(S,{i,j},'field',{k},V) |
возвращает структуру S с присвоением полю 'field' значения V, что эквивалентно S.field=V эквивалентно S(i ,j).field(k)=V |
rmfield(S, 'field')
rmfield(S,FIELDS) |
возвращает структуру S с удаленным полем S.'field' возвращает структуру S с несколькими удаленными полями. Список удаляемых полей FIELDS задается в виде массива символов (строки) или строкового массива ячеек |
Примеры:
Пусть в рабочем поле сохранена структура S (пример 1 предыдущего раздела), содержащая информацию о строениях. Продемонстрируем на этой структуре использование специальных функций.
>> fieldnames(S) % определение полей структуры
ans =
'street'
'building_number'
' project'
' floors'
>> getfield(S,' street ') % определение значения поля street
ans =
Питерская
>> setfield(Building(1).'street','Тверская') % задание нового значения
ans =
Building(1).street='Тверская';
Building(1).building_number='3А';
Building(1).project='1.400-15';
Building(1).floors=9;
>> rmfield(S(2).' project ') % удаление поля
ans =
Building(1).street='Тверская';
Building(1).building_number='3А';
Building(1).floors=9;
Для инициализации структур и считывания значений полей в отдельные переменные можно использовать команду множественного присвоения deal.
Синтаксис.
[S.FIELD]=deal(X) – присваивает всем полям FIELD структуры S значения X. Если S не существует, то используется конструкция [S(1:M)*.FIELD]= deal(X).
[A,B,C,...]=deal(S.FIELD) – копирует содержимое поля FIELD массива структур S в отдельные переменные А, В, С,....
