3. Если функция f x в выбранном диапазоне изменяется слишком рез-
ко, скорректировать диапазон.
4. Обеспечить вывод графиков двух функций в разных графических окнах; оформить графические окна поясняющими подписями.
Требования к программе и результатам работы
1.Программа не должна иметь циклов.
2.График функции от переменной должен быть построен в полулога-
рифмических осях (с логарифмической шкалой по аргументу), значения в диапазоне должны быть заданы в виде логарифмической последовательности.
3.Расчет значений дробно-рациональной функции должен осуществляться с использованием функций для работы с полиномами.
4.Вместо операторов языка MATLAB можно использовать заменяющие их функции.
Рекомендации к оформлению и выполнению программы
1. Основной комментарий, указываемый в первой строчке программы,
позволяет индексировать файл программы. Проиндексированные файлы могут быть найдены с помощью команды lookfor. Комментарий в MATLAB
начинается с символа % и продолжается до конца строки.
2. После основного комментария рекомендуется указать команды clear и clc – для очистки переменных из рабочей области и командного окна. Это позволит избежать ошибок программирования, возникающих из-за использования в программе переменных, созданных вне программы и существующих
врабочей области.
3.Для автоматического закрытия всех графических окон можно исполь-
зовать команду close.
Примечание: данных рекомендаций следует придерживаться при оформ-
лении программ в дальнейшем.
Лабораторная работа 2. ОПЕРАТОРЫ УСЛОВИЯ И ЦИКЛА
Цель работы: освоить основные конструкции языка MATLAB для реализации ветвящихся и циклических алгоритмов, освоить принципы одномер-
ной индексации матриц.
16
Основные сведения
Организация ветвящихся алгоритмов. Отличительной особенностью алгоритмов с разветвлением является принятие решения в зависимости от хода выполняемых действий. На программном уровне такие алгоритмы реализуются при помощи условных операторов и операторов переключения.
Простейшая конструкция условного оператора включает оператор IF и записывается следующим образом:
IF условие операторы
end
Операторы будут выполняться в том случае, если условие истинно. В
качестве условия может быть использовано логическое выражение, либо переменная логического типа. Логические выражения строятся при помощи операторов сравнения и логических операторов (см. лаб. раб. 1).
При помощи оператора IF можно реализовывать и более сложные кон-
струкции, с проверкой нескольких условий. В общем случае формат записи оператора IF выглядит следующим образом:
IF условие1 операторы1
ELSEIF условие2
операторы2
….. ELSE
операторы
END
Операторы, находящиеся после ELSE, выполняются в том случае, если все условия, описанные в IF и ELSEIF, ложные. Все составные операторы языка программирования MATLAB заканчиваются ключевым словом end.
Самостоятельное задание: составить типовые блок-схемы разветвляющихся алгоритмов.
Оператор переключения будет рассмотрен в лаб. раб. 3.
Организация циклических алгоритмов. Циклические алгоритмы реа-
лизуют многократное повторение определенных действий. Соответствующая программная конструкция называется циклом, а повторяемое действие – ите-
рацией. В программном описании цикла можно выделить тело – набор повторяемых действий, а также условие продолжения цикла. Как правило, в
17
цикле явно или неявно присутствует внутренняя переменная, входящая в условие и изменяющая значение в ходе выполнения цикла.
В зависимости от очередности условия и действий различают циклы с предусловием и с постусловием. Кроме того, циклы классифицируют по количеству повторений: циклы-счетчики, циклы с неопределенным числом по-
вторений.
В языке программирования MATLAB существуют только циклы с пред-
условием. Цикл-счетчик реализуется при помощи оператора FOR и имеет следующий формат записи:
for переменная = вектор тело цикла
end
Количество итераций цикла-счетчика задается числом элементов векто-
ра в первой строке цикла FOR. Переменная по очереди принимает значения, соответствующие компонентам вектора. Обычно для циклов используют век-
торы-строки, заданные с помощью оператора перечисления, хотя можно использовать любой произвольный вектор.
MATLAB поддерживает также матричный вариант цикла FOR: for переменная = матрица
тело цикла
end
В этом случае количество итераций цикла задается числом столбцов матрицы в первой строке цикла. Переменная по очереди принимает значения столбцов матрицы.
Цикл с неопределенным числом повторений реализуется при помощи оператора WHILE:
WHILE условие тело цикла
END
Цикл выполняется до тех пор, пока условие остается истинным. Необходимо следить за тем, чтобы в ходе выполнения итераций параметры, задан-
ные в условии продолжения цикла менялись, иначе возникает бесконечный цикл, который может привести к зависанию программы.
Примечание: для прерывания выполнения программы можно использовать комбинации клавиш CTRL+C или CTRL+BREAK.
Для досрочного продолжения и прерывания цикла служат ключевые слова CONTINUE и BREAK.
18
Ключевое слово CONTINUE в теле цикла осуществляет переход к сле-
дующей итерации с начала цикла. В случае если CONTINUE находится внутри вложенных циклов, выполняется продолжение с новой итерации для бли-
жайшего внутреннего цикла.
Ключевое слово BREAK осуществляет досрочное прерывание цикла и переход на следующую строку после него. Если BREAK находится внутри вложенного цикла, выход осуществляется из ближайшего внутреннего цикла.
Вне циклов слова CONTINUE и BREAK не применяются.
Индексация матриц. Типовое обращение к элементам многомерных матриц предполагает использование количества индексов, равного размерно-
сти, например для двумерной матрицы обращение к элементу aij будет вы-
глядеть A(i, j).
В то же время MATLAB позволяет обращаться к элементам многомер-
ных матриц так же как к элементам векторов, с использованием одномерного индекса, называемого линейным. При этом направление увеличения индекса соответствует движению по столбцам (индекс 2 будет у элемента матрицы a21, индекс 3 – у a31, и т. д.). Для перехода от одномерного индекса к мно-
гомерному и обратно служат взаимообратные функции sub2ind и ind2sub.
Функция [IND] = SUB2IND(MSIZE, I1, I2, I3…) определяет одномерный индекс многомерной матрицы с размерами, заданными вектором MSIZE и ин-
дексами I1, I2, I3… Количество индексов должно быть равно размерности матрицы. Если в параметрах индекса указаны не числа, а матрицы одинакового размера, функция рассчитает матрицу одномерных индексов указанных элементов. Например, для того чтобы определить одномерный индекс элемента aij двумерной матрицы A, можно использовать команду
ind = sub2ind(size(A). i, j)
Функция [I1, I2, I3, … ] = IND2SUB(MSIZE, SUB) определяет многомер-
ный индекс элемента по его одномерному индексу SUB в матрице размером
MSIZE. Число выходных переменных должно соответствовать размерности матрицы. Следует отметить, что если число выходов не соответствует раз-
мерности матрицы, функция IND2SUB автоматически приведет матрицу к заданной числом выходов размерности и вернет соответствующий индекс без ошибки выполнения программы. Как и SUB2IND, функция может принимать матрицу одномерных индексов и рассчитывает соответствующие матрицы индексов.
19
Применение линейных индексов позволяет избегать использования вло-
женных циклов при обработке многомерных матриц.
Методика выполнения работы
1.В соответствии с заданием из табл. П2 составить блок-схему алгоритма вычисления функции двух переменных x t,T , заданной по интервалам.
2.Написать и отладить программу-сценарий вычисления функции в точке (не пользуясь стандартными математическими функциями).
3.Построить график функции x t при заданном значении T в диапазоне
t2T, 2T .
4.В соответствии с заданием из табл. П3 и П4 составить блок-схемы алгоритмов.
5.Написать и отладить программы вычисления суммы ряда (табл. П3) и
поиска элементов матрицы (табл. П4).
Требования к программам и результатам работы
1. Для функции двух переменных x t,T аргумент T должен быть про-
граммно задан произвольным положительным числом.
2.График x t нужно построить по 20–25 точкам на заданном интервале.
3.При вычислении суммы или произведения ряда следует выводить конечный результат (без промежуточных значений) и число итераций. Можно использовать математические функции MATLAB.
4.При поиске минимального/максимального элемента матрицы не раз-
решается пользоваться стандартными функциями min, max.
Рекомендации к выполнению программы
1. При вычислении точек для построения графика x t можно использо-
вать не цикл, а операторы сравнения для векторов.
2. При поиске минимального/максимального значения матрицы целесообразно использовать один цикл вместо двух вложенных, совместно с функ-
циями sub2ind и ind2sub.
20