- •Начала программирования в среде 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.4. Создание Script-файлов |
103 |
|
|
|
|
2.3.4.Вопросы
1.Для чего создаются программы в среде MatLAB?
2.Чем отличаются файл-функции от Script-файлов? Какова сфера применения каждого из этих видов файлов?
3.Что понимается под понятием "функция функций"? Какие наиболее употребительные стандартные функции функций есть в MatLAB?
4.Как создать М-файл процедуры или функции?
5.Какие основные правила написания текстов М-файлов в языке MatLAB?
2.4. Создание Script-файлов
2.4.1. Основные особенности Script-файлов
Как уже было отмечено, основные особенности Script-файлов таковы:
Script-файлы являются независимо (самостоятельно) исполняемыми блоками операторов и команд;
все используемые переменные образуют так называемое рабочее пространство, которое является общим для всех исполняемых Script-файлов; из этого следует, что при выполнении нескольких Script-файлов имена переменных в них должны быть согласованы, так как одно имя означает в каждом из них один и тот же объект вычислений;
в них отсутствует заголовок, т. е. первая строка определенного вида и назначения;
обращение к ним не требует указания никаких имен переменных: все переменные формируются в результате выполнения программы либо сформированы ранее и существуют в рабочем пространстве.
Необходимо отметить, что рабочее пространство Script-файлов недоступ-
но для файлов-функций, которые используются в нем. В файлах-функциях невозможно использовать значения, которые приобретают переменные в Script-файле, обходя заголовок файл-функции (так как все переменные файл-функции являются локальными). Единственной возможностью сделать так, чтобы внутри файлфункции некоторая переменная рабочего пространства могла сохранить свое значение и имя, является специальное объявление этой переменной в Script-файле как глобальной с помощью служебного слова global. Кроме того, аналогичная запись должна содержаться и в тексте М-файла той файл-функции, которая будет использовать значение соответствующей переменной Script-файла.
Например, можно перестроить файл-функции первого и третьего примеров из предыдущего раздела, вводя коэффициенты соответствующих функций как глобальные переменные:
function y = dvob1(x)
%Вычисление функции
%y = K(1)+K(2)*x+K(3)*sin(K(4)*x+K(5)),
%где К - глобальный вектор из пяти элементов
%Применяется для определения текущих значений
%параметров движения подвижного объекта
2.4. Создание Script-файлов |
104 |
|
|
|
|
global K
y = K(1)+K(2)*x+K(3)*sin(K(4)*x+K(5));
Чтобы использовать новую файл-функцию dvob1 в Script-файле, в последнем до обращения к этой функции должна быть записана строка
global K
и определен вектор-строка К из пяти элементов (заданы их значения).
Если в одной строке объявляются несколько переменных как глобальные,
они должны отделяться пробелами (не запятыми!).
2.4.2. Ввод и вывод информации в диалоговом режиме
Для обеспечения взаимодействия с пользователем в процессе выполнения М-файла в системе MatLAB используются такие команды:
disp, sprintf, input, menu, keyboard, pause.
Команда disp осуществляет вывод значений указанной переменной или указанного текста в командное окно. Обращение к ней имеет вид:
disp (<переменная или текст в апострофах>).
Особенностью этой команды является то, что аргумент у нее может быть только один. Поэтому невозможно без специальных мер осуществить вывод нескольких переменных и, в особенности, объединение текста с численными значениями некоторых переменных, что часто необходимо для удобного представления информации.
Для устранения этого недостатка используют несколько способов.
Чтобы вывести значения нескольких переменных в одну строку (например, при создании таблиц данных), нужно создать единый объект, который содержал бы все эти значения. Это можно сделать, объединив соответствующие переменные в вектор, пользуясь операцией создания вектора-строки:
x = [x1 x2 ... x].
Тогда вывод значений нескольких переменных в одну строку будет иметь
вид:
disp ([x1 x2 ... x]).
Приведем пример:
» x1=1.24; x2=-3. 45; x3=5.76; x4=-8. 07; » disp([x1 x2 x3 x4])
1. 2400 -3. 4500 5. 7600 -8. 0700.
Аналогично можно объединять несколько текстовых переменных, напри-
мер:
» x1=' psi '; x2=' fi '; x3=' teta '; x4=' w1 '; » disp([x1 x2 x3 x4])
psi fi teta w1
Гораздо сложнее объединить в одну строку текст и значение переменных, что часто бывает необходимо. Трудности возникают потому, что нельзя объединять текстовые и числовые переменные, так как они являются данными разных типов. Одним из путей преодоления этого препятствия есть перевод числового значения переменной в символьную (текстовую) форму. Это возможно, если вос-
2.4. Создание Script-файлов |
105 |
|
|
|
|
пользоваться функцией num2str, которая осуществляет такое преобразование. Запись:
y = num2str(x)
превратит числовое значение переменной "х" в текстовое представление. При этом форма представления определяется установленным режимом вывода чисел на экран (Numeric Format), например:
» x = -9. 30876e-15 x = -9. 3088e-015
» y = num2str(x) y = -9. 309e-015
Если Т - текстовая переменная, или некоторый текст, а Х - числовая переменная, то вывод их в одной строке можно обеспечить обращениям
disp ([T num2str(X)]).
Рассмотрим пример: x =
-9. 3088e-015
»T = 'Значение параметра равняется ';
»disp([T x])
Значение параметра равняется
» disp([T num2str(x)])
Значение параметра равняется -9. 309e-015
Как следует из этого примера, "механическое" объединение текстовой и числовой переменных не приводит к желаемому результату.
Другим средством достижения того же результата есть использование функции sprintf. Обращение к ней имеет вид:
Y= sprintf (‘<текст1> %g <текст2>’, X).
Врезультате получается текстовая строка Y, состоящая из текста, указанного в <текст1>, и значения числовой переменной Х в соответствия с форматом %g, причем текст из фрагмента <текст2> располагается после значения переменной Х. Эту функцию можно использовать в команде disp в виде:
disp (sprintf (‘<текст> %g', X) ).
Пример:
» disp(sprintf('Параметр1 = %g ',x))
Параметр1 = -9. 30876e-015
Ввод информации с клавиатуры в диалоговом режиме можно осуществить с помощью функции input. Обращение к ней вида:
x = input(‘<приглашение>’)
приводит к следующим действиям ПК. Выполнение операторов программы прекращается. ПК переходит в режим ожидания окончания ввода информации с клавиатуры. После окончания ввода с клавиатуры (которое определяется нажатием клавиши <Enter>) введенная информация запоминается в программе под именем "х", и выполнение программы продолжается.
Удобным инструментом выбора некоторой из альтернатив будущих вычислительных действий является функция menu MatLAB, которая создает текущее окно меню пользователя. Функция menu имеет такой формат обращения:
k=menu(‘Заголовок меню','Альтернатива1','Альтернатива2',..., 'Альтернатива n').
2.4. Создание Script-файлов |
106 |
|
|
|
|
Такое обращение приводит к появлению на экране меню, изображенного на рис. 2.2. Выполнение программы временно приостанавливается, и система ожидает выбора одной из кнопок меню с альтернативами. После правильного ответа исходному параметру "k" присваивается значение номера избранной альтернативы (1, 2 , …, n). В общем случае число альтернатив может быть до 32.
Теперь, в зависимости от полученного значения этого параметра, можно построить процесс разветвления вычислений, например, выбора параметра, значение которого нужно изменить.
Команда pause временно прекращает выполнение программы до тех пор, пока пользователь не нажмет любую клавишу клавиатуры. Если после названия команды указать в скобках некоторое положительное целое число n, то задержка выполнения программы будет осуществлена на протяжении n секунд.
Если в тексте М-файла встречается команда keyboard, то при выполнении программы выполнение М-файла прекращается, и управление передается клавиатуре. Этот специальный режим работы сопровождается появлением в командном окне MatLAB нового вида приглашения к действиям
k>>.
В этом режиме пользователь может осуществить любые действия, проверить или изменить данные. При этом ему доступны все команды и процедуры системы MatLAB. Для завершения работы в этом режиме необходимо ввести команду return. Тогда система продолжит роботу программы с оператора, следующего за командой keyboard.
Рис. 2.2 |
Рис. 2.3 |
2.4.3. Организация повторения действий
Одной из главных задач создания самостоятельной программы есть обеспечение возвращения к началу программы с целью продолжения ее выполнения при новых значениях исходных данных.
Пусть основные операторы созданной программы расположены в Scriptфайле с именем "ScrFil_yadro. m". Тогда схема обеспечения возврата к началу выполнения этого Script-файла может быть, например, такой:
flag =0;
while flag == 0 ScrFil_yadro kon=0;
kon=input('Закончить работу-<3>, продолжить - <Enter>');