- •§ 2.2. Командное окно системы matlab
- •§ 2.3. Рабочее пространство системы matlab
- •§ 2.4. Скаляры и массивы. Индексированные переменные
- •§ 2.5. Форматы представления вещественных чисел
- •§ 2.6. Арифметические выражения
- •2.6.1. Некоторая специфика использования вещественных данных
- •2.6.2. Некоторая специфика использования комплексных данных
- •2.6.3. Некоторые приемы работы с матрицами и векторами
- •2.6.4. Некоторые специфика выполнения арифметических и логических операций.
- •§ 2.7. Элементарные математические функции
- •Часть 2. Визуализация результатов вычислений
- •§ 2.8. Особенности графической подсистемы matlab
- •§ 2.9. Построение графиков функций одной переменной
- •2.9.1. Простые графики в декартовой системе координат.
- •2.9.2. Визуализация нескольких графиков.
- •2.9.3. Функция fplot.
- •2.9.4. Построение графиков в логарифмическом и полулогарифмическом масштабах.
- •2.9.5. Построение графиков в полярных координатах.
- •§ 2.10. Оформление графиков и графических окон
- •2.10.1. Выбор свойств линий.
- •2.10.2. Оформление осей координат.
- •2.10.3. Добавление надписей, заголовков и координатной сетки.
- •§ 2.11. Средства управления в графическом окне
- •§ 2.12. Общее знакомство с трехмерной графикой в matlab
- •2.12.1. Общий алгоритм визуализации функций двух переменных.
- •2.12.2. Построение трехмерных линий.
- •2.12.3. Построение поверхностей.
- •2.12.4. Задание дополнительных параметров трехмерных графиков.
- •2.12.5. Построение линий уровня.
- •2.12.6. Построение траектории точки, движущейся в пространстве.
- •2.12.7. Интерактивное редактирование графиков.
- •Часть 3. Вычисления с действительными и комплексными массивами чисел
- •§ 2.13. Операции отношения и логические операции над числами
- •2.13.1. Операции отношения.
- •2.13.2. Логические операции.
- •2.13.3. Приоритет операций.
- •§ 2.14. Формирование одномерных числовых массивов
- •2.14.1. Задание одномерных массивов и доступ к их элементам.
- •2.14.2. Об ускорении операций задания массива.
- •2.14.3. Об использовании операции формирования диапазона.
- •§ 2.15. Матрицы и векторы. Двумерные массивы чисел
- •2.15.1. Создание матриц и векторов.
- •2.15.2. Доступ к отдельным фрагментам матриц.
- •2.15.3. Удаление строк и столбцов матрицы.
- •2.15.4. Использование функций перестановки частей матриц.
- •2.15.5. Определение размеров и размерностей массивов.
- •2.15.6. Использование операций индексации.
- •2.15.7. Изменение размеров массива.
- •2.15.8. Специальные функции формирования массивов.
- •§ 2.16. Вычисления с массивами
- •2.16.1. Поэлементные и групповые операции над массивами.
- •2.16.2. Решение некоторых типовых задач линейной алгебры и аналитической геометрии.
- •2.16.3. Применение операций отношения и логических операций к массивам.
- •2.16.4. Некоторые функции для работы с массивами.
- •Часть 4. Стандартные средства решения некоторых типовых задач линейной алгебры и математического анализа
- •§ 2.17. Решение систем линейных алгебраических уравнений
- •§ 2.18. Решение некоторых задач линейной алгебры. Матричные функции
- •§ 2.19. Разреженные матрицы
- •§ 2.20. Решение нелинейных уравнений
- •§ 2.21. Поиск минимального значения функции
- •§ 2.22. Численное интегрирование
- •2.22.1. Использование метода трапеций.
- •2.22.2. Использование методов Симпсона и Гаусса-Лобатто.
- •2.22.3. Вычисление двойных интегралов.
- •§ 2.23. Операции над полиномами
- •2.23.1. Вычисление значения полинома.
- •2.23.2. Вычисление корней полинома.
- •2.23.3. Умножение и деление полиномов.
- •2.23.4. Дифференцирование и интегрирование полиномов.
- •§ 2.24. Интерполяция и аппроксимация данных
- •2.24.1. Полиномиальная аппроксимация.
- •2.24.2. Интерполяция сплайнами.
- •Часть 5. Символьные вычисления
- •§ 2.25. Создание символьных переменных, выражений и матриц
- •2.25.1. Создание символьных переменных.
- •2.25.2. Создание символьных выражений.
- •2.25.3. Создание символьных матриц.
- •§ 2.26. Символьные вычисления
- •2.26.1. Символьное дифференцирование.
- •2.26.2. Вычисление пределов.
- •2.26.3. Символьное интегрирование.
- •2.26.3. Вычисление суммы ряда. Разложение функций в ряды.
- •2.26.4. Упрощение выражений. Подстановки.
- •2.26.5. Управление точностью вычислений.
- •2.26.6. Операции над векторами. Операции над матрицами. Некоторые операции линейной алгебры.
- •2.26.7. Решение уравнений и систем уравнений.
- •§ 2.27. Визуализация результатов символьных вычислений
- •2.27.1. Построение двумерных графиков.
- •2.27.2. Построение трехмерных графиков.
- •Часть 6. Основы программирования на m-языке
- •§ 2.28. Основные понятия программирования в системе matlab
- •2.28.1. Назначение языка программирования matlab.
- •2.28.2. Основные средства программирования.
- •2.28.3. Основные типы данных.
- •2.28.4. Виды программирования.
- •2.28.5. Двойственность операторов, команд и функций.
- •2.28.6. Некоторые ограничения.
- •§ 2.29. Создание и использование m-файлов
- •2.29.1. Понятие об m-файлах.
- •2.29.2. Типы m-файлов.
- •2.29.3. Создание файл-программ.
- •2.29.4. Создание файл-функций.
- •2.29.5. Глобализация переменных и функций.
- •2.29.6. Синтаксический контроль программ.
- •§ 2.30. Управляющие структуры
- •2.30.1. Понятие об управляющих структурах.
- •2.30.2. Операторы цикла.
- •2.30.3. Операторы ветвления.
- •2.30.4. Прочие операторы.
- •§ 2.31. Работа с файлами
- •2.31.1. Общие замечания.
- •2.31.2. Подготовка файла к работе.
- •2.31.3. Завершение работы с файлами.
- •2.31.4. Контроль за исчерпанием данных.
- •2.31.5. Чтение из текстового файла.
- •2.31.6. Анализ ошибок в файловых операциях.
- •§ 2.32. Форматный ввод-вывод данных
- •2.32.1. Форматные преобразования (sprintf, sscanf).
- •2.32.2. Форматные преобразования при работе с файлами (fprintf, fscanf).
- •§ 2.33. Рекурсивные файл-функции. Производительность файл-функций
- •2.33.1. Понятие о рекурсивных файл-функциях.
- •2.33.2. Оценка производительности файл-функции.
- •§ 2.34. Файл-функции с переменным числом входных параметров и выходных значений
- •§ 2.35. Диалоговые программы
- •2.35.1. Ввод числовых и символьных данных.
- •2.35.2. Вывод результатов вычислений.
- •§ 2.36. Анимационные эффекты
- •§ 2.37. Контроль входных и выходных параметров файл-функции
- •§ 2.38. Отладка программы
- •2.38.1. Понятие о способах отладки программы.
- •2.38.2. Рекомендации по созданию и отладке программ.
- •Часть 7. Создание программ с визуальным интерфейсом
- •§ 2.39. Понятие о графическом интерфейсе пользователя (gui)
- •2.39.1. Предварительные замечания.
- •2.39.2. Основные команды для создания gui.
- •§ 2.40. Общие сведения о визуальной среде guide
- •§ 2.41. Программирование событий в matlab
- •§ 2.42. Свойства основных компонентов в matlab
- •§ 2.43. Диалоговые окна в matlab
- •§ 2.44. Динамическое создание компонентов
- •§ 2.45. Создание меню
- •§ 2.46. Некоторые рекомендации по созданию приложений с графическим интерфейсом пользователя
2.30.3. Операторы ветвления.
К операторам ветвления относятся условный оператор if и оператор переключения switch, которые позволяют создать такие алгоритмы, в ко-
торых при заданных условиях выполняются те или иные блоки команд.
Рассмотрим условный оператор if, использующий ключевые слова if (если), else (иначе), elseif (иначе если), end (конец всей конструкции).
Наиболее простой синтаксис применения оператора if имеет вид:
if условие
Инструкции
end
где условие – произвольное выражение (чаще всего включающее в себя операции сравнения и логические операции), истинность или ложность которого понимается как отличие от нуля или равенство нулю (заметим, что в логических выражениях в системе MATLAB допускается использование массивов, причем в тех случаях, когда значением таких выражений является массив истинность условия наступает, когда истинны (не равны нулю) все элементы массива, ну а если хотя бы один элемент такого массива отличен от нуля, то условие считается ложным, ложным условие считается и при использовании пустого массива).
При выполнении простейшего фрагмента программы
A=[1 2; 3 0];
if A
b=1;
else
b=2;
получим, что переменная b примет значение 2, в силу того, что матрица A содержит один нулевой элемент, в результате чего все условие считается ложным. Отметим, что запись типа if A по своему действию полностью эквивалентна записи if A~=0 и записи if all(A(:)).
Если заданное условие является истинным, то Инструкции выполняются, если же условие является ложным, то Инструкции не выполняются, и программа переходит к выполнению команд, расположенных после слова end. Набор выполняемых инструкций всегда должен завершиться оператором end. В более общем случае синтаксис оператора if следующий:
if условие_1
Инструкции_1
elseif условие_2
Инструкции_2
elseif условие_3
Инструкции_3
...
else
Инструкции
end
Поясним, что в такой конструкции может быть много ветвей с ключевым словом elseif, при этом если справедливо условие условие_1, то выполняется набор команд Инструкции_1, если справедливо условие условие_2, то выполняется набор команд Инструкции_2 и т.д. Если же все эти условия оказываются ложными, то выполняются команды, расположенные после слова else. Отметим, что с одной стороны число ветвей elseif неограниченно, с другой – ветви elseif могут отсутствовать вовсе. Рассмотренный условный оператор завершается ключевым словом end.
Покажем, как используется конструкция if...else...elseif...end на примере простейшей файл-программы temperature (сохраненной в файле temperature.m):
function temperature(t)
if(t<=0)
disp('Морозная погода')
elseif and(t>0, t<=10)
disp('Холодная погода')
elseif and(t>10, t<=18)
disp('Прохладная погода')
elseif and(t>18, t<=25)
disp('Теплая погода')
else
disp('Жаркая погода')
end
Работоспособность приведенной файл-функции несложно проверить, задавая произвольные значения температуры в качестве аргумента функции temperature. Так, например, будем иметь:
>> temperature(-30)
Морозная погода
>> temperature(5)
Холодная погода
>> temperature(11)
Прохладная погода
>> temperature(21)
Теплая погода
>> temperature(27)
Жаркая погода
Рассмотренный оператор break не работает вне циклов for и while. В соответствующих случаях нужно использовать оператор return. Так, например, последний применяется совместно с условными операторами в теле файл-функций для реализации досрочного завершения функции и выхода из нее. В качестве характерного примера приведем файл-функцию factorial вычисления факториала целого положительного числа (сохраненную в файле factorial.m):
function res=factorial(n)
res=1;
if n==1
return
else
for i=2:n
res=res.*i;
end
end
Если входной параметр данной функции равен единице, то оператор return осуществляет досрочный выход из функции ввиду того, что правильный результат (res=1;) уже сформирован.
Если оператор return не используется, нормальное завершение функции наступает по исчерпании всех инструкций, размещенных в теле функции.
Нередко условные операторы совместно с оператором break, размещаемые внутри цикла, используются для досрочного выхода из цикла. Более того, иногда такое условие и вовсе является единственным, например:
prod=1; i=1;
while 1
prod=prod.*i
i=i+1;
if i>9
break
end
end
Очевидно, что в данном примере цикл без команды break, работающей совместно с условным оператором if, был бы бесконечным. Таким образом, цикл оказывается конечным, в результате выполнения фрагмента программы будет возвращено значение произведения целых чисел от единицы до девяти (факториал девяти).
Алгоритмы, в которых должен осуществляться множественный выбор, можно реализовать посредством оператора переключения switch, который является эффективной альтернативой использованию оператора if. Ниже представлен синтаксис переключателя switch (аналогом последнего в языке программирования FORTRAN является конструкция SELECT CASE):
switch выражение
case значение_1
Инструкции
case значение_2
Инструкции
case {значение_3, значение_4,...}
Инструкции
...
otherwise
Инструкции
end
В данной конструкции, прежде всего, вычисляется значение выражения выражение (это может быть скалярное числовое значение либо строка символов). Далее это значение сравнивается со значениями значение_1, значение_2, значение_3, значение_4 и т.д. (которые могут быть числовыми либо строковыми). Если найдено совпадение, то выполняются Инструкции, стоящие после соответствующего ключевого слова case. В противном случае выполняются Инструкции, расположенные между ключевыми словами otherwise и end. Строк со словом case может быть сколько угодно, но строка с ключевым словом otherwise должна быть одна. Конструкция {значение_3, значение_4,...} означает, что в строке с ключевым словом case может находиться массив ячеек (в таком случае оператор case будет истинным, если значение выражения выражение совпадает с любым из значений этого массива ячеек).
Заметим, что в случае, когда выражение представляет собой строку символов, соответствующий оператор case будет истинным, если функция вида strcmp(выражение,значение) возвращает значение 1 (истина).
Следует указать на важную особенность переключателя switch в языке программирования MATLAB: если в переключателе switch выполнена одна из ветвей, то остальные ветви этого переключателя выполняться не будут, поэтому никакие дополнительные операторы, позволяющие избежать выполнения других ветвей в данном случае не требуются (в отличие, например, от языков программирования C/C++).
Приведенная ниже файл-программа seasons (сохраненная в файле seasons.m) демонстрирует работу переключателя switch:
switch lower(s)
case{'декабрь','январь','февраль'}
disp('Время года - зима')
case{'март','апрель','май'}
disp('Время года - весна')
case{'июнь','июль','август'}
disp('Время года - лето')
case{'сентябрь','октябрь','ноябрь'}
disp('Время года - осень')
otherwise
disp('Неизвестное время года')
end
Представленная программа позволяет определить, к какому времени года относится месяц, заданный в качестве значения переменной s (поясним, что функция lower(s) преобразовывает все символы заданной текстовой строки s к строчным). Если переменной s присвоить число либо строковое значение, которое не является названием месяца, то программа распознает его как неизвестное время года. Например, имеем:
>> s='август';
>> seasons
Время года - лето
>> s='ОктЯбрЬ';
>> seasons
Время года - осень
>> s='апрель';
>> seasons
Время года - весна
>> s='январь';
>> seasons
Время года - зима
>> s='125';
>> seasons
Неизвестное время года
