- •Начала программирования в среде 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
7.4. Объединение S-моделей с программами MatLab |
384 |
|
|
|
|
'MaxRows' – максимальное количество строк в выходном векторе; неотрицательное целое; по умолчанию равно 0;
'InitialState' – вектор начальных значений переменных состояния; по умолчанию он пустой ([]);
'FinalStateName' – имя вектора, в который будет записываться конечные значения вектора состояния модели; символьная строка, по умолчанию – пустое ('');
'OutputVariables' – выходные переменные; по умолчанию имеет значение {txy}; возможные варианты | tx | ty | xy | t | x | y; все они неявно указывают, какие именно выходные переменные не будут выводиться.
7.4.5. Образование S-блоков путем использования программ MatLab. S-функции
В системе MatLab предусмотрен механизм преобразования некоторых процедур, написанных языками высокого уровня, в блок SimuLink-модели. Осуществляется этот механизм с помощью так называемых S-функций.
S-функция – эта относительно самостоятельная программа, которая написана на языке MatLab или C. Главное назначение S-функции – решать следующие задачи:
-образования новых блоков, которые дополняют библиотеку пакета
SimuLink;
-описания моделируемой системы в виде системы математических уравнений;
-включения ранее созданных программ на языке С или MatLab в S- модель.
Программа S-функции имеет определенную четкую структуру. Для случая, когда S-функция создается на основе М-файла, эта структура приведена в виде файла SfunTMPL.m в директории TOOLBOX\SIMULINK\BLOCKS. Из рассмотрения этого файла-шаблона вытекает, что заголовок S-функции в общем случае может иметь следующий вид:
function [sys,x0,str,ts] = <Имя_S-функции> (t,x,u,flag{, <Параметры>})
Стандартными аргументами S-функции являются: t – текущее значение аргумента (времени);
x – текущее значение вектора переменных состояния; u – текущее значение вектора входных величин;
flag – целочисленная переменная, отражающая форму представления результатов действия S-функции;
<Параметры> - дополнительные идентификаторы, которые характеризуют значения некоторых параметров системы, которые используются в S- функции; наличие их не является обязательным.
В результате вычислений, осуществляемых при работе S-функции, получают значение такие переменные:
7.4. Объединение S-моделей с программами MatLab |
385 |
|
|
|
|
sys – системная переменная, содержание которой зависит от значения, которое приобретает переменная flag;
x0 – вектор начальных значений переменных состояния;
str – символьная переменная состояния (обычно она пуста []);
ts – матрица размером (m*2), которая содержит информацию о дискретах времени.
Текст S-функции состоит из текста самой S-функции и текстов собственных (внутренних) подпрограмм, которые она вызывает, а именно:
mdlInitializeSizes, устанавливающей размеры переменных S-функции и начальные значения переменных состояния;
mdlDerivatives, используемой как процедура правых частей системы дифференциальных уравнений модели в форме Коши в случае, когда переменные состояния объявлены как непрерывные;
mdlUpdate, которая используется как процедура обновления на следующем интервале дискрета времени значений переменных состояния, которые объявлены как дискретные;
mdlOutputs, которая формирует вектор значений выходных переменных в блоке S-функции;
mdlGetTimeOfNextVarHit – вспомогательная функция, которая используется для определения момента времени, когда определенная переменная состояния пересекает заданный уровень;
mdlTerminate – функция, которая завершает работу S-функции.
В зависимости от типа уравнений (алгебраические, или дифференциальные, или разностные), которыми описывается блок, который моделируется через S- функцию, некоторые из указанных функций не используются. Так, если блок описывается алгебраическими уравнениями, то не используются почти все внутренние указанные процедуры, за исключением процедуры mdlOutputs, в которой и вычисляются соответствующие алгебраические соотношения, определяющие связь между входными переменными u и выходными y. В случае, когда поведение блока описывается системой непрерывных дифференциальных уравнений, не используется процедура mdlUpdate, а если уравнения блока являются разностными, не используется функция mdlDerivatives. Обязательными являются лишь процедуры инициализации mdlInitializeSizes и формирования выхода mdlOutputs.
Главная процедура S-функции содержит, главным образом, обращения к той или другой внутренней процедуре в соответствия со значением переменной flag на манер нижеследующего:
switch flag, case 0,
[sys,x0,str,ts]=mdlInitializeSizes; case 1,
sys=mdlDerivatives(t,x,u);
case 2,
sys=mdlUpdate(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case 4,
7.4. Объединение S-моделей с программами MatLab |
386 |
|
|
|
|
sys=mdlGetTimeOfNextVarHit(t,x,u);
case 9,
sys=mdlTerminate(t,x,u);
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
В соответствии со значением переменной flag выполняется та или другая внутренняя процедура:
flag=0 – выполняется инициализация блока S-функции;
flag=1 – осуществляется обращение к процедуре правых частей непрерывных дифференциальных уравнений;
flag=2 – вычисляются новые значения переменных состояния на следующем шаге дискретизации (для дискретной S-функции);
flag=3 – формируется значения вектора выходных величин блока S- функции;
flag=4 – формируется новое значение модельного времени, которое отсчитывается от момента пересечения заданного уровня определенной переменной состояния;
flag=9 – прекращается работа блока S-функции.
Установление и изменение значения переменной flag осуществляется автоматически, без вмешательства пользователя, в соответствии с логикой функционирования блоков SimuLink при моделировании (см. п. 7.4.1).
Итак, использование S-функции позволяет моделировать работу как обычных алгебраических, так и динамических (непрерывных или дискретных) звеньев.
Процесс образования блока S-функции состоит из следующих этапов:
1)написания текста S-функции, например, в виде М-файла; текст составляется на основе файла-шаблона SfunTMPL.m с учетом заданных уравнений поведения блока;
2)перетаскивания из библиотеки SimuLink (SimuLink> Functions & Tables>) стандартного блока S-function (рис. 7.97) в окно блок-схемы, внутри которой будет создаваться новый S-блок;
system
S-Function
Рис. 7.97
3)двойного нажатия мышью на изображении этого блока, что приводит к возникновению на экране нового окна (рис. 7.98), содержащего два окошка ввода:
S-function name (имя S-функции), в которое вводится имя новой написанной S-функции;
7.4. Объединение S-моделей с программами MatLab |
387 |
|
|
|
|
S-function parameters (параметры S-функции), в которое вводятся имена или значения тех параметров блока, которые указаны в разделе <Параметры> составленного М-файла S-функции;
Рис. 7.98
Рис. 7.99
4)введения в указанные окошки имени написанного М-файла S-функции и списка значений параметров S-функции; если, например, ввести в качестве имени S_KA, а в окошко параметров, - строку J, Ug0, UgSk0, то это окно изменит свой вид на следующий (рис. 7.99):
S_KA
S-Function
Рис. 7.100
5)теперь нужно нажать мышью на кнопку <OK> этого окна; если система обнаружит М-файл с введенным именем в достижимых ей путях, окно (рис. 7.99) исчезнет, а изображение блока в окне блок-схемы изменит свой вид (рис. 7.100) – внутри него возникнет введенное имя S-функции.