
- •Начала программирования в среде 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
1.6. Операторы управления вычислительным процессом |
86 |
1.6. Операторы управления вычислительным процессом
Вообще говоря, операторы управления необходимы, главным образом, для организации вычислительного процесса, который записывается в виде некоторого текста программы на языке программирования высокого уровня. При этом к операторам управления вычислительным процессом обычно относят операторы безусловного перехода, условных переходов (разветвления вычислительного процесса) и операторы организации циклических процессов. Тем не менее, система MatLAB построена таким образом, что эти операторы могут быть использованы при роботе MatLAB и в режиме калькулятора.
В языке MatLAB отсутствует оператор безусловного перехода и, в соот-
ветствии с этим, нет понятию метки. Это обстоятельство затрудняет организацию перехода вычислительного процесса к любому предшествующему или следующему оператору программы.
Все операторы цикла и условного перехода построены в MatLAB в виде составного оператора, который начинается одним из служебных слов if, while, switch или for и заканчивается служебным словом end. Операторы между этими словами воспринимаются системой как части одного сложного оператора. Поэтому нажатие клавиши <Enter> при переходе к следующей строке не приводит в этом случае к выполнению этих операторов. Выполнение операторов начинается лишь тогда, если введена "завершающая скобка" сложного оператора в виде слова end, а затем нажата клавиша <Enter>. Если несколько составных операторов такого типа вложены друг в друга, вычисления начинаются лишь тогда, когда записан конец end наиболее охватывающего (внешнего) составного оператора. Отсюда следует возможность осуществления даже в режиме калькулятора довольно сложных и объемных (состоящих из многих строк и операторов) вычислений, если они охвачены сложным оператором.
1.6.1. Оператор условного перехода
Конструкция оператора перехода по условию в общем виде такова: if <условие>
<операторы1>
else
<операторы2>
end
Работает оператор так. Сначала проверяется, выполняется ли указанное условие. Если оно выполнено, программа выполняет совокупность операторов, которая записанная в делении <операторы1>. Если условие не выполнено, выполняется последовательность операторов <операторы2>.
Сокращенная форма условного оператора имеет вид: if <условие>
<операторы>

1.6. Операторы управления вычислительным процессом |
87 |
end
Действие оператора в этом случае аналогично, за исключением того, что при невыполнении заданного условия выполняется оператор, следующий за оператором end.
Легко заметить недостатки этого оператора, вытекающие из отсутствия оператора безусловного перехода: все части программы, которые выполняются в зависимости от условия, должны размещаться внутри операторных скобок if
и end.
В качестве условия используются выражения типа:
<имя переменной1> <операция сравнения> <имя переменной2>
Операции сравнения в языке MatLAB могут быть такими:
< |
- меньше; |
> |
- больше; |
<= |
- меньше или равно; |
>= |
- больше или равно; |
= = |
- равно; |
~ = |
- не равно. |
Условие может быть составным, т. е. состоять из нескольких простых условий, объединенных знаками логических операций. Знаками логических операций
вязыке MatLAB являются:
&- логическая операция “И” (“AND”);
| |
- логическая операция “ИЛИ” (“OR”); |
~ |
- логическая операция “НЕТ” (“NOT”). |
Логическая операция “Исключительное ИЛИ” может быть реализована с помощью функции xor(А,В), где А и В - некоторые условия.
Допустима еще одна конструкция оператора условного перехода: if <условие1>
<операторы1> elseif <условие2> <операторы2> elseif <условие3> <операторы3>
. . .
else
<операторы>
end
Оператор elseif выполняется тогда, когда <условие1> не выполнено. При этом сначала проверяется <условие2>. Если оно выполнено, выполняются <операторы2>, если же нет, <операторы2> игнорируются, и происходит переход к следующему оператору elseif, т. е. к проверке выполнения <условия3>. Аналогично, при выполнении его выполняются <операторы3>, в противном случае происходит переход к следующему оператору elseif. Если ни одно из условий в операторах elseif не выполнено выполняются <операторы>, размещенные за операто-
1.6. Операторы управления вычислительным процессом |
88 |
ром else. Так может быть обеспечено разветвление программы по нескольким направлениям.
1.6.2. Оператор переключения
Оператор переключения имеет такую структуру: switch <выражение, скаляр или строка символов>
case <значение1> <операторы1>
case <значение2> <операторы2>
. . .
otherwise
<операторы>
end
Он осуществляет разветвление вычислений в зависимости от значений некоторой переменной или выражения, сравнивая значение, полученное в результате вычисления выражения в строке switch, со значениями, указанными в строках со словом case. Соответствующая группа операторов case выполняется, если значение выражения совпадает со значением, указанным в соответствующей строке case. Если значение выражения не совпадает ни с одним из значений в группах case, выполняются операторы, которые следуют за словом otherwise.
1.6.3.Операторы цикла
Вязыке MatLAB есть две разновидности операторов цикла - условный и арифметический.
Оператор цикла с предусловием имеет вид: while <условие>
<операторы>
end
Операторы внутри цикла выполняются лишь в случае, если выполнено условие, записанное после слова while. При этом среди операторов внутри цикла обязательно должны быть такие, которые изменяют значения одной из переменных, указанных в условии цикла.
Приведем пример вычисления значений синуса при 21 значении аргумента от 0.2 до 4 с шагом 0.2:
»i = 1;
»while i <= 20
x= i/5;
si = sin(x); disp([x,si]) i = i+1;
end
0.2000 0.1987
0.4000 0.3894
0.6000 0.5646
1.6. Операторы управления вычислительным процессом |
89 |
|
0.8000 |
0.7174 |
|
1.0000 |
0.8415 |
|
1.2000 |
0.9320 |
|
1.4000 |
0.9854 |
|
1.6000 |
0.9996 |
|
1.8000 |
0.9738 |
|
2.0000 |
0.9093 |
|
2.2000 |
0.8085 |
|
2.4000 |
0.6755 |
|
2.6000 |
0.5155 |
|
2.8000 |
0.3350 |
|
3.0000 |
0.1411 |
|
3.2000 |
-0.0584 |
|
3.4000 |
-0.2555 |
|
3.6000 |
-0.4425 |
|
3. 8000 |
-0. 6119 |
|
4.0000 |
-0. 7568 |
|
Примечание. Обратите внимание на то, какими средствами в указанном примере обеспечен вывод на экран значений нескольких переменных в одну строку. Для этого используется оператор disp. Но, в соответствии с правилами применения этого оператора, в нем должен быть только один аргумент (текст, переменная или матрица). Чтобы обойти это препятствие, нужно несколько числовых переменных объединить в единый объект - вектор-строку, а последнее легко выполняется с помощью обычной операции формирования вектора-строки из отдельных элементов
[ x1, x2, ... , x].
Таким образом, с помощью оператора вида: disp([x1, x2, ... , x])
можно обеспечить вывод результатов вычислений в виде таблицы данных.
Арифметический оператор цикла имеет вид: for <имя> = <НЗ> : <Ш> : <КЗ>
<операторы>
end,
где <имя> - имя управляющей переменной цикла ("счетчика" цикла); <НЗ> - заданное начальное значение этой переменной; <Ш> - значение шага, с которым она должна изменяться; <КЗ> - конечное значение переменной цикла. В этом случае <операторы> внутри цикла выполняются несколько раз (каждый раз при новом значении управляющей переменной) до тех пор, пока значение управляющей переменной не выйдет за пределы интервала между <НЗ> и <КЗ>. Если параметр <Ш> не указан, по умолчанию его значение принимается равным единице.
Чтобы досрочно выйти из цикла (например, при выполнении некоторого условия) применяют оператор break. Когда программа сталкивается с этим оператором, выполнение цикла досрочно прекращается, и начинает выполняться оператор, следующий за словом end цикла.
Для примера используем предыдущую задачу:
» a = [' |
i |
',' |
x |
',' sin(x) ']; |
»for i = 1:20
x= i/5;
si = sin(x);