- •Начала программирования в среде 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.5. Создание библиотек S-блоков пользователя |
396 |
|
|
|
|
7.5. Создание библиотек S-блоков пользователя
Когда серьезный пользователь углубленно занимается моделированием систем, он неизбежно, рано или поздно, соприкоснется с необходимостью подготовки собственных блоков, имеющих свойства стандартных библиотечных блоков пакета SimuLink. Потребность в этом возникает, когда пользователь при разных задачах моделирования в собственной предметной области вынужден или неоднократно использовать элементарные созданные ним блоки, которые являются оригинальными и не входят в состав стандартных библиотек SimuLink, или использовать одни и те же блоки многократно в определенных устойчивых их соединениях. В таких случаях время создания новой модели можно значительно сократить и при этом предотвратить многочисленные ошибки, если оформить эти новые блоки или соединения блоков в виде новых блоков и разместить их в библиотеке.
Преимущество использования собственных блоков в составе библиотек состоит в следующем:
-их возможно использовать неоднократно путем перетягивания изображения блока из библиотеки в окно блок-схемы модели;
-пользоваться ими удобнее всего, когда общение с ними осуществляется через специальные диалоговые окна настраивания блоков, аналогичные тем, которые рассматривались при описании стандартных блоков SimuLink.
Создания окон настраивания блоков осуществляется через так называемую
маскировку блока, т. е. создание маски блока.
7.5.1. Создание библиотеки
Рассмотрим процесс создания новой собственной библиотеки S-блоков на конкретных примерах.
Образование новой библиотеки начинается с обращения к браузеру SimuLink через предпоследнюю пиктограмму линейки инструментов командного окна MatLab. В результате на экране возникает окно этого браузера (рис. 7.106). Нажав мышкой на изображении первой пиктограммы в окне браузера, вызовем появление еще одного пустого окна untitled для введения блок-схемы модели. В этом новом окне следует вызвать меню File, а в нем – раздел New, а в возникающем нисходящем меню – раздел Library (см. рис. 7.107). В результате этих действий на экране возникнет пустое окно новосоздаваемой библиотеки (рис. 7.108) с именем Library untitled1. Теперь в нем можно создавать, или перетягивать в него созданные S-блоки.
Напомним, что в общем случае образовать S-блок можно на основе двух видов стандартных блоков:
-блока S-Function из раздела Function & Table библиотеки SimuLink;
-блока SubSystem из раздела Signals & Systems той же библиотеки.
7.5. Создание библиотек S-блоков пользователя |
397 |
|
|
|
|
Блок на основе S-Function получается на грунте написанных языком MatLab файлов S-функции, и имеет лишь один вход (возможно векторный) и один выход (тоже векторный). Блок на основе SubSystem состоит как схема из существующих блоков и может иметь произвольное количество входов и выходов произвольного вида.
Рис. 7.106 |
Рис. 7.107 |
Рис. 7. 108
Образуем в этой библиотеке S-блок S_DUE, на основе созданной прежде одноименной S-функции.
Прежде всего, перетянем в окно создаваемой библиотеки блок S-Function из указанного раздела библиотеки Function & Table библиотеки SimuLink. Окно библиотеки приобретет вид, приведенный на рис. 7.109.
Теперь, дважды щелкнув мышкой на изображении этого блока, вызовем его окно настраивания (рис. 7.110). В окошко S-Function name введем имени S-
функции (S_DUE), а в окошко S-Function parameters – ее параметры (J, UgSk0) (рис. 7.111) и нажмем мышкой на кнопку <OK> внизу этого окна. В результате (если соответствующий файл существует в путях, достижимых для MatLab, а список введенных параметров отвечает списку параметров, указанных в S-функции)
7.5. Создание библиотек S-блоков пользователя |
398 |
|
|
|
|
окно настраивания исчезнет, а изображение блока в окне библиотеки изменится
(см. рис. 1.112).
Рис. 7.109 |
Рис.7.110 |
Рис. 1.111 |
Рис. 1.112 |
Взавершение изменим название под блоком на такое "Динамические уравнения Эйлера", чтобы точнее отобразить сущность преобразований, которые осуществляет блок.
Вдальнейшем, для моделирования процесса управления ориентацией, например, космического аппарата (КА), обращающегося вокруг планеты по определенной замкнутой орбите, станет необходимым еще один блок, осуществляющий интегрирование кинематических уравнений ориентации, вычисляя значения параметров, определяющих текущее угловое положение корпуса КА относительно
орбитальной системы отсчета. Например, если в качестве таких параметров избрать кватернион поворота Q , который переводит текущее положение КА в нуж-
ное, соответствующие кинематические уравнения будут иметь вид ddQt = 12 (Q oω− ΩoQ) ,
где обозначено: ω - вектор-кватернион абсолютной угловой скорости КА; Ω - вектор-кватернион абсолютной угловой скорости орбитальной системы отсчета (жестко связанной с положением КА на орбите); o - знак кватернионного умножения.
Кватернионное кинематическое уравнение недостаточно удобно для проведения вычислений из-за того, что действия над кватернионами существенно отли-
7.5. Создание библиотек S-блоков пользователя |
399 |
|
|
|
|
чаются от действий над матрицами и не предусмотрены в системе MatLab. Значительно удобнее превратить его в совокупность сугубо матричных уравнений:
|
|
|
|
dq0 |
= − |
1 |
qt (ω− Ω) |
||
|
|
|
|
|
|
||||
|
|
|
dt |
2 |
|
||||
dq |
|
1 |
|
|
|||||
|
|
|
|
|
|
|
|||
|
|
= |
|
[q0 |
(ω− Ω) + (q×) (ω+ Ω)] |
||||
|
2 |
||||||||
dt |
|
|
|
|
|
|
|
В этих уравнениях величины q , ω и Ω суть векторы-столбцы из проекций,
соответственно, векторной части кватерниона поворота, вектора абсолютной угловой скорости КА на оси связанной системы координат и вектора угловой скорости орбитальной системы координат на ее же оси; q0 скалярная часть кватернио-
ну поворота; (q × ) – обозначения кососиметричной матрицы, составленной из проекций вектора q .
Создадим М-файл S-функции, осуществляющей интегрирование этих кинематических уравнений. Ниже приведен текст этого М-файла по имени
S_KUqwat.
function [sys,x0,str,ts] = S_KUqwat(t,x,u,flag,OM0,Qw0)
%S-функция S_KUqwat Кинематических Уравнений в кватернионах
%Реализует переход от заданного вектора абсолютной
%угловой скорости орбитального космического аппарата
%к кватерниону поворота КА относительно орбитальной
%системы отсчета
%ВХОД блока:
%u = [omx,omy,omz]- вектор проекций абсолютной угловой
%скорости КА на оси CК, жёстко связанной с ним
%ВЫХОД блока:
%y=[qw0,qw1,qw2,qw3] - вектор компонентов кватерніону поворота КА
%относительно орбитальной декартової системы координат
%Входные ПАРАМЕТРЫ S-функции:
%OM0 - орбитальная угловая скорость;
%Ug0 - вектор начальных значений углов поворота
%Лазарев Ю.ф. Укрaина 18-12-2001
switch flag, case 0
[sys,x0,str,ts] = mdlInitializeSizes(Ug0); case 1,
sys = mdlDerivatives(t,x,u,OM0); case 3,
sys = mdlOutputs(x); case 9
sys = []; end
%Конец процедуры
%
%===============================================
%Далее идут тексты внутренних процедур
%===============================================
%
function [sys,x0,str,ts] = mdlInitializeSizes(Ug0) sizes = simsizes;
sizes.NumContStates = 4; sizes.NumDiscStates = 0;
7.5. Создание библиотек S-блоков пользователя |
400 |
||
sizes.NumOutputs |
= 4; |
|
|
sizes.NumInputs |
= 3; |
|
|
sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; sys = simsizes(sizes);
x0 = Qw0; str = [];
ts = [0 0];
% Конец процедуры mdlInitializeSizes
%============================================= function z = mdlDerivatives(t,x,u,OM0)
%ВХОДНОЙ вектор "u" является вектором проекций моментов внешних сил,
%действующих на космический аппарат соответственно по осям X Y Z
%х(1)=qw0 - скалярная часть кватерниона;
%х(2:4)=qw(1:3) - векторная часть кватерниона;
%z(1)=d(qw0)/dt; z(2:4)=d(qw)/dt;
%Формирования векторов угловых скоростей и кватерниона
om=u; |
OM = [0 OM0 0]'; |
v=x(2:4); |
omMOM=om-OM; omPOM=om+OM; |
||
z(1)=-(v'*omMOM)/2; |
% уравнения скалярной части кватерниона |
z4=(x(1)*omMOM+cross(v,omPOM))/2; % уравнения векторной части кватерниона z(2:4)=z4;
% Конец процедуры mdlDerivatives
%=============================================% function y = mdlOutputs(x)
y=x;
% Конец процедуры mdlOutputs
Полностью аналогично предыдущему создадим новый S-блок за именем S_Kuqwat. В нем входом является вектор проекций абсолютной угловой скорости КА, а выходом – вектор, состоящий из четырех компонентов кватерниона поворота КА относительно орбитальной системы координат. Первый компонент представляет собой скалярную часть, остальные три – проекции векторной части этого кватерниона. В результате получим окно библиотеки в виде, представленном на рис. 1.113.
Наконец, довольно важно создать S-блок, который осуществлял бы операцию векторного умножения двух векторов, аналогичную М-функции cross.
Для этого удобнее использовать другой стандартный блок SubSystem из раздела Signals & Systems. Перетянем его мышью в окно новой библиотеки (рис. 1.114). Дважды щелкнув на изображении этого блока, получим пустое окно, в котором составим блок-схему подсистемы, приведенную на рис. 1.115.
В ней использован блок MATLAB Function из раздела Functions & Tables, окно настраивания которого представлено на рис. 7.116. Именно он, собственно, и выполняет операцию векторного умножения двух входных векторов, используя для этого стандартную функцию cross системы MatLab.