- •Начала программирования в среде 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
2.2. Создание М-файлов |
96 |
заданному значению ее аргумента; n - желательное число частей разбиения указанного интервала. Если последнюю величину не задать, по умолчанию интервал разбивается на 25 частей. Несмотря на то, что количество частей "n" задано, число значений вектора "х" может быть значительно большим за счет того, что функция fplot проводит вычисления с дополнительным ограничением, чтобы приращение угла наклона графика функции на каждом шаге не превышало 10 градусов. Если же оно оказалось большим, осуществляется дробление шага изменения аргумента, но не больее чем в 20 раз. Последние два числа (10 и 20) могут быть изменены пользователем, для этого при обращении следует добавить эти новые значения в заголовок процедуры в указанном порядке.
Если обратиться к этойпроцедуре так:
[x, Y] = fplot (‘<имя функции>’, [<интервал>], n),
то график указанной функции не отображается на экране (в графическом окне). Вместо этого вычисляется вектор "х" аргументов и вектор (или матрица) Y соответствующих значений указанной функции. Чтобы при обращении последнего вида построить график, необходимо сделать это в дальнейшем с помощью процедуры plot(x, Y).
2.2. Создание М-файлов
2.2.1. Особенности создания М-файлов
Создание программы в среде MatLAB осуществляется с помощью либо собственного встроенного (начиная из версии MatLAB 5), либо стороннего текстового редактора, который автоматически вызовется, если его предварительно установить с помощью команды Preferences меню File командного окна MatLAB. Например, это может быть редактор Notepade среды Windows. Окно предварительно установленного редактора появляется на экране, если перед этим вызвана команда M-file из меню New или выбрано название одного из существующих М-файлов при вызове команды Open M-file из меню File командного окна. В первом случае окно текстового редактора будет пустым, во втором - в нем будет содержаться текст вызванного М-файла. В обоих случаях окно текстового редактора готово для ввода нового текста или корректировки существующего.
Программы на языке MatLAB имеют две разновидности - так называемые
Script-файлы (файлы-сценарии, или управляющие программы) и файлы-функции
(процедуры). Обе разновидности должны иметь расширение имени файла .m, т. е. их нельзя различить по типу файла. С помощью Script-файлов оформляют основные программы, управляющие от начала до конца организацией всего вычислительного процесса, и отдельные части основных программ (они могут быть записаны в виде отдельных Script-файлов). Как файл-функции оформляются отдельные процедуры и функции (т. е. такие части программы, которые рассчитаны на неоднократное использование Script-файлами или другими процедурами при измененных значениях исходных параметров и не могут быть выполнены без предварительного задания значений переменных, которые называют входными).
2.2. Создание М-файлов |
97 |
Главным внешним отличием текстов этих двух видов файлов является то,
что файл-функции имеют первую строку вида function <ПКВ> = <имя процедуры >(<ПВВ>),
где обозначен ПКВ - Перечень Конечных Величин, ПВВ - Перечень Входных Ве-
личин. Script-файлы такой строки не имеют.
Принципиальное же отличие состоит в совсем различном восприятии системой имен переменных в этих двух видах файлов.
Вфайл-функциях все имена переменных внутри файла, а также имена переменных, указанные в заголовке (ПКВ и ПВВ), воспринимаются как локальные, т.е. все значения этих переменных после завершения работы процедуры исчезают, и область оперативной памяти ПК, которая была отведена под запись значений этих переменных, освобождается для записи в нее значений других переменных.
ВScript-файлах все используемые переменные образуют так называемое рабочее пространство (Work Space). Значение и содержание их сохраняются не только на протяжении времени работы программы, но и на протяжении всего сеанса работы с системой, а, значит, и при переходе от выполнения одного Scriptфайла к другому. Иначе говоря, рабочее пространство является единым для всех Script-файлов, вызываемых в текущем сеансе работы с системой. Благодаря этому любой длинный Script-файл можно разбить на несколько фрагментов, оформить каждый из них в виде отдельного Script-файла, а в главном Script-файле вместо соответствующего фрагмента записать оператор вызова Script-файла, представляющего этот фрагмент. Этим обеспечивается компактное и наглядное представление даже довольно сложной программы.
За исключением указанных отличий, файл-функции и Script-файлы оформляются одинаково.
2.2.2.Основные особенности оформления М-файлов
Вдальнейшем под М-файлом будем понимать любой файл (файл-функцию или Script-файл), записанный на языке системы MatLAB.
Рассмотрим основные особенности записи текста программы (М-файла)
языком MatLAB.
1. Обычно каждый оператор записывается в отдельной строке текста программы. Признаком конца оператора является символ (он не появляется в окне) возврата каретки и перехода на следующую строку, который вводится в программу при нажатии клавиши <Enter>, т. е. при переходе на следующую строку.
2. Можно размещать несколько операторов в одной строке. Тогда предыдущий оператор этой строки должен заканчиваться символом ' ; ' или ' , '.
3. Можно длинный оператор записывать в несколько строк. При этом предыдущая строка оператора должна заканчиваться тремя точками (' ... ').
4. Если очередной оператор не заканчивается символом ' ; ', результат его действия при выполнении программы будет выведен в командное окно. Чтобы предотвратить вывод на экран результатов действия оператора программы, запись этого оператора в тексте программы должна заканчиваться символом ' ; '.
2.2. Создание М-файлов |
98 |
5.Строка программы, начинающаяся с символа ' % ', не выполняется. Эта строка воспринимается системой MatLAB как комментарий. Таким образом, для ввода комментария в любое место текста программы достаточно начать соответствующую строку с символа ' % '.
6.Строки комментария, предшествующие первому выполняемому оператору программы, т. е. такому, который не является комментарием, воспринимаются системой MatLAB как описание программы. Именно эти строки выводятся в командное окно, если в нем набрана команда
help <имя файла>
7.В программах на языке MatLAB отсутствует символ окончания текста программы.
8.В языке MatLAB переменные не описываются и не объявляются. Любое новое имя, появляющееся в тексте программы при ее выполнении, воспринимается системой MatLAB как имя матрицы. Размер этой матрицы устанавливается при предварительном вводе значений ее элементов либо определяется действиями по установлению значений ее элементов, описанными в предшествующих операторах или процедуре. Эта особенность делает язык MatLAB очень простым в употреблении и привлекательным. В языке МatLAB невозможно использование матрицы или переменной, в которой предварительно не введены или не вычислены значения ее элементов (а значит - и не определены размеры этой матрицы). В этом случае при выполнении программы MatLAB появится сообщение об ошибке - "Переменная не определена".
9.Имена переменных могут содержать лишь буквы латинского алфавита или цифры и должны начинаться из буквы. Общее число символов в имени может достигать 30. В именах переменных могут использоваться как прописные, так и строчные буквы. Особенностью языка MatLAB есть то, что строчные и пропис-
ные буквы в именах различаются системой. Например, символы "а" и "А" могут использоваться в одной программе для обозначения разных величин.
2.3. Создание файл-функций |
99 |
2.3. Создание простейших файл-функций (процедур)
2.3.1. Общие требования к построению
Как было отмечено ранее, файл-функция (процедура) должна начинаться со строки заголовка
function [<ПКВ>] = <имя процедуры>(<ПВВ>).
Если перечень конечных (выходных) величин (ПКВ) содержит только один объект (в общем случае - матрицу), то файл-функция представляет собой обычную функцию (одной или нескольких переменных). Фактически даже в этом простейшем случае файл-функция является уже процедурой в обычном смысле других языков программирования, если выходная величина является вектором или матрицей. Первая строка в этом случае имеет вид:
function <имя переменной> = <имя процедуры>(<ПВВ>).
Если же в результате выполнения файл-функции должны быть определены (вычислены) несколько объектов (матриц), такая файл-функция представляет собой уже более сложный объект, который в программировании обычно называется процедурой (в языке Паскаль), или подпрограммой. Общий вид первой строки в этом случае становится таким:
function [y1, y2, ... , y] = <имя процедуры>(<ПВВ>),
т. е. перечень выходных величин y1, y2, ... , y должен быть представлен как век- тор-строка с элементами y1, y2, ... , y (все они могут быть матрицами).
В простейшем случае функции одной переменной заголовок приобретет
вид:
function y = func(x),
где func - имя функции (М-файла).
В качестве примера рассмотрим составление М-файла для функции
y = f1( x ) = d 3 ctg( x ) sin4 ( x ) − cos4 ( x ) .
Для этого следует активизировать меню File командного окна MatLAB и выбрать в нем сначала команду New, а затем команду M-file. На экране появится окно текстового редактора. В нем нужно набрать такой текст:
function y = F1(x,d)
%Процедура, которая вычисляет значение функции
%y = (d3)*ctg(x)*sqrt(sin(x)4-cos(x)4).
% Обращение y = F1(x,d).
y = (d^3)*cot(x). *sqrt(sin(x). ^4-cos(x). ^4);
После этого необходимо сохранить этот текст в файле под именем F1.m. Необходимый М-файл создан. Теперь можно пользоваться этой функцией при расчетах. Так, если ввести команду
» y = F1(1, 0.1)
то получим результат
y = 4. 1421e-004.
Следует заметить, что аналогично можно получить сразу вектор всех значений указанной функции при разных значениях аргумента, если последние собрать в некоторый вектор. Так, если сформировать вектор
2.3. Создание файл-функций |
100 |
|
|
|
|
»zet= 0:0. 3:1. 8;
иобратиться в ту же процедуру
»my = F1(zet,1),
то получим:
Warning: Divide by zero |
|
|
my = |
|
|
Columns 1 through 4 |
|
|
Na + Infi 0 + 2. 9369i |
0 + 0. 8799i 0. 3783 |
|
Columns 5 through 7 |
|
|
0. 3339 |
0. 0706 |
-0. 2209 |
Примечания.
1.Возможность использования сформированной процедуры как для отдельных чисел, так и для векторов и матриц обусловлена применением в записи соответствующего М-файла вместо обычных знаков арифметических действий их аналогов с предшествующей точкой.
2.Во избежание вывода на экран нежелательных промежуточных результа-
тов, необходимо в тексте процедуры все вычислительные операторы завершать символом " ; ".
3.Как показывают приведенные примеры, имена переменных, указанные в заголовке файл-функции могут быть любыми (совпадать или нет с именами, ис-
пользуемыми при обращении к этой файл-функции), т. е. носят формальный характер. Важно, чтобы структура обращения полностью соответствовала структуре заголовка в записи текста М-файла и чтобы переменные в этом обращении имели тот же тип и размер, как и в заголовке М-файла.
Чтобы получить информацию о созданной процедуре, достаточно набрать в командном окне команду:
»help f1,
ив командном окне появится
Процедура, которая вычисляет значение функции y = (d3)*ctg(x)*sqrt(sin(x)4-cos(x)4).
Обращение y = F1(x,d).
Другой пример. Построим график двух функций: y1 = 200 sin(x)/x; y2 = x2.
Для этого создадим М-файл, который вычисляет значения этих функций: function y = myfun(x)
% Вычисление двух функций
% y(1) = 200 sin(x)/x, y(2) = x2. y(:,1) = 200*sin(x) . / x;
y(:,2) = x . 2;
Теперь построим графіки этих функций:
»fplot('myfun', [-20 20], 50, 2), grid
»set(gcf,'color','white'); title('Графік функции "MYFUN"')
Результат изображен на рис. 2.1.