Материал: Sb97304

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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