- •Начала программирования в среде MatLab
- •Содержание
- •Предисловие
- •Введение
- •1. MatLAB как научный калькулятор
- •1.1. Командное окно
- •1.2. Операции с числами
- •1.2.1. Ввод действительных чисел
- •1.2.2. Простейшие арифметические действия
- •1.2.3. Ввод комплексных чисел
- •1.2.4. Элементарные математические функции
- •1.2.5. Специальные математические функции
- •1.2.6. Элементарные действия с комплексными числами
- •1.2.7. Функции комплексного аргумента
- •1.2.8. Задания
- •1.2.9. Вопросы
- •1.3. Простейшие операции с векторами и матрицами
- •1.3.1. Ввод векторов и матриц
- •1.3.2. Формирование векторов и матриц
- •1.3.3. Извлечение и вставка частей матриц
- •1.3.4. Действия над векторами
- •1.3.5. Поэлементное преобразование матриц
- •1.3.6. Матричные действия над матрицами
- •1.3.7. Матричные функции
- •1.3.8. Задания
- •1.3.9. Вопросы
- •1.4. Функции прикладной численной математики
- •1.4.1. Операции с полиномами
- •1.4.2. Обработка данных измерений
- •1.4.3. Функции линейной алгебры
- •1.4.4. Аппроксимация и интерполяция данных
- •1.4.5. Векторная фильтрация и спектральный анализ
- •1.4.6. Задания
- •1.4.7. Вопросы
- •1.5. Построение простейших графиков
- •1.5.1. Процедура plot
- •1.5.2. Специальные графики
- •1.5.3. Дополнительные функции графического окна
- •1.5.5. Задания
- •1.5.6. Вопросы
- •1.6. Операторы управления вычислительным процессом
- •1.6.1. Оператор условного перехода
- •1.6.2. Оператор переключения
- •1.6.3. Операторы цикла
- •1.6.4. Задания
- •1.6.5. Вопросы
- •2. Программирование в среде MatLAB
- •2.1. Функции функций
- •2.2. Создание М-файлов
- •2.2.1. Особенности создания М-файлов
- •2.3.1. Общие требования к построению
- •2.3.2. Типовое оформление процедуры-функции
- •2.3.3. Задания
- •2.3.4. Вопросы
- •2.4. Создание Script-файлов
- •2.4.1. Основные особенности Script-файлов
- •2.4.2. Ввод и вывод информации в диалоговом режиме
- •2.4.3. Организация повторения действий
- •2.4.4. Организация изменения данных в диалоговом режиме
- •2.4.5. Типовая структура и оформление Script-файла
- •2.5. Графическое оформление результатов
- •2.5.1. Общие требования к представлению графической информации
- •2.5.2. Разбивка графического окна на подокна
- •2.5.3. Вывод текста в графическое окно (подокно)
- •2.6. Создание функций от функций
- •2.6.1. Процедура feval
- •2.6.2. Примеры создания процедур от функций
- •2.6.3. Задания
- •2.7. Пример создания сложной программы
- •2.7.1. Программа моделирования движения маятника
- •2.7.2. Задания
- •3.1. Функции меню командного окна
- •3.1.2. Другие меню командного окна
- •3.1.3. Панель инструментов
- •3.2. Команды общего назначения
- •3.3. Создание М-книги
- •3.3.1. Начало новой М-книги
- •3.3.2. Написание М-книги
- •3.3.3. Редактирование М-книги
- •3.3.4. Преобразование документа WORD в М-книгу
- •3.3.6. Изменение параметров вывода результатов
- •4. Классы вычислительных объектов
- •4.1. Основные классы объектов
- •4.1.1. Класс символьных строк (char)
- •4.1.2. Класс записей (struct)
- •4.1.3. Класс ячеек (cell)
- •4.2. Производные классы MatLAB
- •4.2.1. Класс объектов Inline
- •4.2.2. Классы пакета CONTROL
- •4.3. Пример создания нового класса polynom
- •4.3.1. Создание подкаталога @polynom
- •4.3.2. Создание конструктора
- •4.3.3. Создание процедуры символьного представления polynom-объекта.
- •4.4. Создание методов нового класса
- •5.1. Формирование типовых процессов
- •5.1.1. Формирование одиночных импульных процессов
- •5.1.2. Формирование колебаний
- •5.2.1. Основы линейной фильтрации
- •5.2.2. Формирование случайных процессов
- •5.3. Процедуры спектрального (частотного) и статистического анализа процессов
- •5.3.1. Основы спектрального и статистического анализа
- •5.3.2. Примеры спектрального анализа
- •5.3.3. Статистический анализ
- •5.4. Проектирование фильтров
- •5.4.1. Формы представления фильтров и их преобразования
- •5.4.2. Разработка аналоговых фильтров
- •5.4.3. Проектирование БИХ-фильтров
- •5.5. Графические и интерактивные средства
- •5.5.1. Графические средства пакета SIGNAL
- •5.5.2. Интерактивная оболочка SPTOOL
- •6.1. Ввод и преобразование моделей
- •6.2. Получение информации о модели
- •6.3. Анализ системы
- •6.4. Интерактивный "обозреватель" ltiview
- •6.5. Синтез системы
- •7.1. Общая характеристика пакета SimuLink
- •7.1.1. Запуск SimuLink
- •7.1.2. Библиотека модулей (блоков)
- •7.1.3. Раздел Sinks (приемники)
- •7.1.4. Раздел Sources (Источники)
- •7.1.5. Раздел Сontinuous
- •7.1.6. Раздел Discrete
- •7.1.7. Раздел Math
- •7.1.8. Раздел Functions & Tables
- •7.1.9. Раздел Nonlinear
- •7.1.10. Раздел Signals & Systems
- •7.2. Построение блок-схем
- •7.2.1. Выделение объектов
- •7.2.2. Оперирование с блоками
- •7.2.3. Проведение соединительных линий
- •7.2.4. Проставление меток сигналов и комментариев
- •7.2.5. Создание подсистем
- •7.2.6. Запись и распечатка блок-схемы S-модели
- •7.3. Примеры моделирования
- •7.3.1. Моделирование поведения физического маятника
- •7.3.2. Моделирование поведения гироскопа в кардановом подвесе
- •7.4. Объединение S-моделей с программами MatLAB
- •7.4.2. Функции пересечения нуля
- •7.4.5. Образование S-блоков путем использования программ MatLab. S-функции
- •7.4.6. Пример создания S-функции
- •7.5.1. Создание библиотеки
- •7.5.2. Маскировка блоков
- •7.5.3. Моделирование процесса ориентации космического аппарата
- •Послесловие
- •Предметный указатель
- •Указатель операторов, команд, функций и функциональных блоков MatLAB
3.1. Основные классы объєктов |
167 |
|
|
|
|
>> PG72= struct('fam','Сергеев','imya','Сергей','bat','Сергеевич','god', 1981)
приведет к формированию такой переменной-записи:
PG72 =
fam: 'Сергеев' imya: 'Сергей' bat: 'Сергеевич' god: 1981
Используя индексацию, можно легко определить значение любого поля или элемента структуры. Таким же образом можно присвоить значение любому полю или элементу структуры.
Если к какому-либо из элементов массива записей (структуры) добавляется значение нового поля, то же поле автоматически появляется во всех остальных элементах, хотя значение этого поля у других элементов при этом остается пустым. Например:
>>PG81. fam = 'Аврутова' ;
>>PG81. imya = 'Марина'; PG81. bat = 'Степановна';
>>PG81(2). fam = 'Березнюк' ;
>>PG81(2). imya = 'Алексий'; PG81(2). bat = 'Иванович';
>>PG81(3). fam = 'Попіль' ;
>>PG81(3). imya = 'Богдан'; PG81(3). bat = 'Тимофеевич';
>>PG81(3). god = 1982
PG81 =
1x3 struct array with fields: fam
imya bat god
>> PG81(2). god ans = []
Чтобы удалить некоторое поле из всех элементов массива записей, надо использовать процедуру rmfield по схеме S = rmfield (S, 'имя поля '), где S - имя массива записей, который корректируется. Рассмотрим пример:
>> PG81 = rmfield(PG81, 'bat')
PG81 =
1x3 struct array with fields: fam
imya god
Класс struct, как видим, имеет незначительное число методов, что делает его непосредственное использование при расчетах довольно проблематичным.
Однако именно на использовании объектов этого класса основана возможность создавать новые классы объектов (см. далее). Поэтому этот класс является очень важным для расширения возможностей системы MatLAB.
4.1.3. Класс ячеек (cell)
Массив ячеек - это массив, элементами которого есть ячейки, которые сами могут содержать любой тип массива, в том числе и массив ячеек. Массивы ячеек позволяют хранить массивы с элементами разных типов и разных измерений. Например, одна из ячеек может содержать матрицу действительных чисел, вторая -
3.1. Основные классы объєктов |
168 |
|
|
|
|
массив символьных строк, третья - вектор комплексных чисел. Можно строить массивы ячеек любых размеров и любой структуры, включая и многомерные.
Создать массив ячеек можно двумя способами:
-использованием операторы присваивания;
-при помощи функции cell предварительно сформировать пустой массив, а потом присвоить значения отдельным ячейкам.
Применение операторов присваивания
Есть два способа присвоить значения отдельным каморкам - индексация ячеек и индексация содержимого.
Индексация ячеек. При присваивании значений отдельным элементам массива ячеек индексы ячейки в левой от знака присваивания части размещают в скобках, используя стандартные обозначения для массива, а в правой части при-
сваиваемое значение ячейки помещают в фигурные скобки.
Для примера рассмотрим создание массива C ячеек размером (2*2). Для этого определим каждый элемент этого массива, т. е. каждую из ячеек, так:
>>C(1,1) = {' Иванов И. Ю.'};
>>C(1,2) = {[1 2 3; 4 5 6; 7 8 9]};
>>C(2,1) = {5-3i};
>>C(2,2) = {-pi : pi/5 : pi}
C = ' Иванов И. Ю.' |
[3x3 double] |
[5. 0000- 3. 0000i] |
[1x11 double] |
Индексация содержимого. В этом случае в левой от знака присваивания части элемент массива ячеек указывается в фигурных скобках, а в правой части - содержимое соответствующей ячейки без скобок:
>>C{1,1} = ' Иванов И. Ю.';
>>C{1,2} = [1 2 3; 4 5 6; 7 8 9];
>>C{2,1} = 5-3i;
>>C{2,2} = -pi : pi/5 : pi
C = ' Иванов И. Ю.' |
[3x3 double] |
[5. 0000- 3. 0000и] |
[1x11 double] |
Как видно из примеров, система MatLAB отображает массив ячеек в сокращенной форме.
Чтобы отобразить содержимое ячеек, нужно применять функцию celldisp:
>> celldisp(C)
C{1,1} = |
Иванов И. Ю. |
||
C{2,1} = |
5.0000 - 3.0000i |
||
C{1,2} = |
1 |
2 |
3 |
|
4 |
5 |
6 |
|
7 |
8 |
9 |
C{2,2} = Columns 1 through 7 |
|
||
-3.1416 |
-2.5133 |
-1.8850 |
-1.2566 -0.6283 0 0.6283 |
Columns 8 through 11 |
|
||
1. 2566 |
1. 8850 |
2. 5133 |
3. 1416 |
Для отображения структуры массива ячеек в виде графического изображения на экране предназначена функция cellplot
>> cellplot(C)
3.1. Основные классы объєктов |
169 |
||
|
|
|
|
|
|
|
|
Рис. 3.1
Фигурные скобки являются конструктором массива ячеек так же, как квадратные скобки являются конструктором числового массива. Фигурные скобки аналогичны квадратным, за исключением того, что они могут быть еще и вложенными. Например, предшествующий массив С ячеек может быть построен так:
>> C = { ' Иванов И. Ю.', [1 2 3; 4 5 6; 7 8 9]; 5-3и,-pi : pi/5 : pi }
C = ' Иванов И. Ю.' |
[3x3 double] |
[5. 0000- 3. 0000i] |
[1x11 double] |
Применение функции cell
Функция cell позволяет создать шаблон массива ячеек, заполняя его пустыми ячейками.
Пример. Создадим пустой массив ячеек размером (2*3):
>> A = cell(2,3)
A =
[] [] [] [] [] []
Заполним одну из ячеек, используя оператор присваивания:
>> A(2,2) = {0 : pi/10:2*pi}
A = |
[] |
[] |
[] |
|
[] |
[1x21 double] |
[] |
Извлечение данных из массива ячеек можно также осуществить двумя пу-
тями.
Первый способ рассмотрим на примерах.
Извлечение содержимого отдельных ячеек производится указанием индек-
сов нужной ячейки в фигурных скобках:
>> B =C{1,2}
B = 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
3.1. Основные классы объєктов |
170 |
|
|
|
|
>> st = C{1,1} st = Иванов И. Ю.
Извлечение содержимого отдельных элементов определенной каморки про-
изводится дополнительным указанием в дужках индексов элемента массива, находящегося в нужной каморке:
>> x =C{1,2}(2,3) x = 6
>> y= C{1,1}(1:5) y = Иван
Второй способ позволяет извлекать из массива ячеек другой массив ячеек,
составляющий часть первого:
>> D = A(2,2:3)
D = [1x21 double] []
В этом случае применяются обычные скобки.
Массивы ячеек используются для объединения массивов данных разных типов и размеров. Массивы ячеек удобнее массивов записей (структур) в следующих обстоятельствах:
-когда нужен доступ одновременно к нескольким полям;
-когда нужен доступ к подмножествам данных в виде списка переменных;
-когда число полей не определено;
-когда нужно извлекать поля из структуры.
В заключение заметим, что для того, чтобы установить, какому классу принадлежит тот или другой вычислительный объект, к имени этого объекта следует применить процедуру class:
>>x=pi;
>>class(x)
ans =double
>>st='Письмо';
>>class(st)
ans =char
>> s=class(num2str(x)) s =char