- •§ 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.2. Операторы цикла.
Цикл – это процесс повторного выполнения группы инструкций, составляющих тело цикла. Количество выполнений команд можно либо задать заранее, либо определить в процессе выполнения программы. В зависимости от способа определения условия останова (окончания циклических повторений) различают два вида операторов цикла в M-языке: если число выполнений инструкций известно, то используется цикл for (своеобразный аналог цикла do в языке программирования FORTRAN), если же известно лишь условие продолжения цикла, но неизвестно количество его повторений, то применяется цикл while. Операторы цикла можно вводить как в интерактивном режиме (режиме калькулятора), вводя операторы непосредственно с клавиатуры, так и в текстах программ на M-языке.
Синтаксис цикла for имеет вид:
for var=выражение
Инструкции
end
где var – выбираемое программистом имя переменной (параметра, счетчика) цикла; выражение определяет набор возможных значений переменной var и, как правило, имеет вид a1:a2:a3, т.е. переменная цикла при каждом повторении цикла изменяется от начального значения a1 до конечного значения a3 с шагом a2 (если шаг a2 не задан, то по умолчанию он принимается равным 1 – по аналогии с языками программирования FORTRAN и Basic единичное приращение переменной цикла можно опускать), причем цикл завершается как только значение var превысит a3; если инструкций в теле цикла несколько, то они разделяются запятой (,) или точкой с запятой (;), их набор завершается оператором end.
Ниже представлен простейший пример использования цикла for. В результате выполнения программы
for x=1:3:10
y=x/4
end
будем иметь:
y =
0.2500
y =
1
y =
1.7500
y =
2.5000
В следующем фрагменте программы осуществляется вычисление частичной суммы ряда
.
т.е. складывается 57 членов ряда
s=0
for k=1:1:57
s=s+1./k^2;
end;
В заголовке цикла (управляющем выражении) можно явно указать весь набор значений переменной цикла в виде вектор-строки, например:
for k=[2 5 7 8 11 15 25]
В данном случае цикл будет выполняться семь раз, при этом переменная k будет последовательно принимать значения 2, 5, 7, 8, 11, 15 и 25.
Весьма необычным, хотя и возможным является использование матриц в заголовке цикла:
A=[1 2; 3 4];
for k=A
Количество повторений такого цикла совпадает с количеством столбцов матрицы A, т.е. в рассматриваемом примере цикл повторится два раза. На каждом шаге цикла переменная цикла принимает значение очередного столбца матрицы, т.е. переменная цикла является вектор-столбцом. Так, например, приведенный ниже фрагмент программы вычисляет сумму длин векторов, являющихся столбцами матрицы A:
S=0; A=[1 2; 3 4];
for k=A
s=s+sqrt(k(1)^2+k(2)^2);
end;
Синтаксис цикла while имеет вид:
while Условие
Инструкции
end
где цикл выполняется до тех пор, пока истинно указанное Условие; набор выполняемых в цикле while инструкций, как и в цикле for должен завершаться оператором end; Условие – это любое распознанное MATLAB выражение, которое может включать операции сравнения и логические операции.
Ниже представлен простейший пример программы вычисления синуса 12 значений от 0 до 11 с помощью цикла while:
i=1; t=0;
while t<=11
y(i)=sin(t)
i=i+1;
t=t+1;
end
Рассмотрим более сложный пример вычисления частичной суммы ряда
.
Будем иметь следующий фрагмент реализующей программы:
s=0; k=1; u=1;
while u>1.e-8
s=s+u;
k=k+1;
u=1./k^2;
end
Условием останова в данном случае
является требование к складываемым
элементам ряда быть больше некоторого
заранее заданного числа (в данном случае
это
):
как только очередное слагаемое станет
меньше этого числа, условие, стоящее
после ключевого слова while,
становится ложным и суммирование
прекращается.
Отметим, что в соответствии с указанным выше, представленный фрагмент кода, в котором тело цикла занимает несколько строк, также можно вводить с клавиатуры последовательно строка за строкой, при этом необходимо нажимать клавишу Enter каждый раз после ввода очередной строки. После ввода заголовка оператора цикла и нажатия клавиши Enter текстовый курсор перемещается на следующую физическую строку, однако знак строки при вводе (>>) не появляется. По сути, это означает, что MATLAB ожидает дальнейшего ввода с клавиатуры последовательности команд, составляющих тело цикла (эти инструкции могут занимать несколько физических строк командного окна). Текстовый курсор перемещается на следующую строку после нажатия клавиши Enter. После ввода ключевого слова end система MATLAB приступает к циклически повторяющемуся выполнению инструкций из тела цикла. По завершении этого процесса, длительность выполнения которого определяется объемом вычислительной работы, на следующей за циклом строке появляется знак >>.
Для досрочного прерывания циклов for и while используется команда break, размещаемая внутри тела цикла. Это позволяет размещать фактическое условие останова внутри тела цикла, а не в его заголовке. В таком случае в заголовке цикла можно писать всегда истинное выражение while 1. Если оператор break применяется во вложенном цикле, то он осуществляет выход только лишь из внутреннего цикла.
Оператор continue прерывает выполнение текущего шага цикла, т.е. позволяет перейти к следующей итерации в операторах циклов for и while, игнорируя все операторы, которые следуют за ним в теле цикла. Если оператор continue встречается во вложенном цикле, то осуществляется переход к следующей итерации основного цикла.
В системе MATLAB всюду, где это возможно, вместо операторов цикла следует применять соответствующие команды M-языка, предназначенные для обработки массивов, ввиду того, что при этом существенно сокращается время вычислений. Так, например, вместо фрагмента программы
k=0;
for x=0:0.1:100
k=k+1;
y(k)=sin(x);
end;
целесообразнее использовать операции с массивами
x=0:0.1:100;
y=sin(x);
Замену операторов цикла эквивалентными им по результату функциями M-языка принято называть векторизация кода [7,69-71,109,132,177].
