Лабораторная работа № 4. Управляющие конструкции языка программирования

  • doc
  • 13.05.2020
Публикация в СМИ для учителей

Публикация в СМИ для учителей

Бесплатное участие. Свидетельство СМИ сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 2. Лабораторная работа № 4. Управляющие конструкции языка программирования.doc

Лабораторная работа № 4. Управляющие конструкции языка программирования

 

            Цель работы

         Изучить управляющие конструкции языка программирования в среде MATLAB.

 

         Основные теоретические положения

         В предыдущих лабораторных работах мы рассмотрели достаточно простые примеры, для выполнения которых требуется набрать несколько команд в командной строке. Для более сложных задач число команд возрастает, и работа в ко­мандной строке становится непродуктивной. Использование истории ко­манд и сохранение переменных рабочей среды незначительно повышают производительность работы. Эффек­тивное решение состоит в оформлении собственных алгоритмов в виде про­грамм (М-файлов), которые можно запустить из рабочей среды или из ре­дактора. Встроенный в MATLAB редактор М-файлов позволяет не только набирать текст программы и запускать ее целиком или частями, но и отла­живать алгоритм.

 

Порядок выполнения работы

 

         Пример 1. Работа в редакторе М-файлов

Для создания М-файла раскройте меню File рабочей среды MATLAB и в пункте New выберите подпункт M-file или нажмите кнопку New M-file на панели инструментов рабочей среды. Новый файл открывается в окне редактора М-файлов, кото­рое приведено на рис. 9.

Вид строки меню и панели инструментов зависит от ширины окна. Если оно достаточно узкое, то часть инструментов перемещается в раскрывающийся список.

         Наберите в редакторе команды для построения двух графиков на разных осях в одном графическом окне:

         x = 0:0.1:7;

         f = exp(-x);

         subplot(1, 2, 1);

         plot(x, f);

         g = sin(x);

         subplot(1, 2, 2);

         plot(x, g)

Рис. 9. Окно редактора М-файлов MATLAB

         Сохраните теперь файл с именем mydemo.m в подкаталоге work основного каталога MATLAB, выбрав в меню File редактора пункт Save as. Для запус­ка на выполнение всех команд, содержащихся в файле, следует выбрать пункт Run в меню Debug или просто нажать <F5>. На экране появится гра­фическое окно Figure 1, содержащее графики функций. Результат эквивален­тен последовательному выполнению приведенных команд в командном ок­не. Однако если вы решили построить график косинуса вместо синуса, то достаточно просто изменить оператор присваивания g = sin(x) в М-файле на g = cos(x) и запустить из редактора все команды. Аналогичные дейст­вия из командной строки потребовали бы больше времени.

 

Пример 2. Операторы цикла

         Схожие и повторяющиеся действия выполняются при помощи операторов цикла for и while. Цикл for предназначен для выполнения заданного числа повторяющихся действий, а while для действий, число которых заранее не известно, но известно условие продолжения цикла.

         Использование for осуществляется следующим образом:

         for count = start:step:final

                   команды MATLAB

         end

         Здесь countпеременная цикла, start – ее начальное значение, final – конечное значение, а step – шаг, на который увеличивается count при каждом следующем заходе в цикл. Цикл заканчивается, как только значение count становится больше final. Переменная цикла может принимать не только целые, но и вещественные значения любого знака. Разберем приме­нение цикла for на примере.

         Пусть требуется вывести графики семейства кривых для , которое задано функцией , зависящей от параметра а, для значе­ний параметра а от -0.1 до 0.1 с шагом 0.02. Можно, конечно, последова­тельно вычислять у(х, а) и строить ее графики для различных значений а от -0.1 до 0.1, но гораздо удобнее использовать цикл for. В редакторе М-файлов наберите текст файл-программы, приведенный ниже, сохраните его в файле FORdem.m и запустите файл-программу на выпол­нение (или из редактора М-файлов, или из командной строки, набрав в ней FORdem и нажав <Enter>).

 

% создание графического окна

figure

% вычисление вектора значений аргумента

x = 0:pi/30:2*pi;

% перебор значений параметра в цикле

for a = -0.1:0.02:0.1

    % вычисление вектора значений функции

    % для текущего значения параметра

    y = exp(-a*x).*sin(x);

    % добавление графика функции

    hold on;

    plot(x, y);

end

 

В результате выполнения FORdem появится графическое окно, изображен­ное на рис. 10, которое содержит требуемое семейство кривых.

Цикл while служит для организации повторений однотипных действий в случае, когда число повторений заранее неизвестно и определяется выпол­нением некоторого условия. Рассмотрим пример на вычисление суммы. Требуется найти сумму ряда для заданного х (разложение в ряд ):

 

Рис. 10. Семейство кривых

 

Конечно, до бесконечности суммировать не удастся, но можно накапливать сумму с заданной точностью. Известно, что для знакопеременного ряда теоретически достаточно удерживать слагаемые, превышающие по модулю заданную точность, например, . Однако суммирование таких рядов с ограниченной точностью вычислений может привести к потере значащих цифр и, в конечном итоге, к неверному результату. Значение k, обеспечи­вающее малость текущего слагаемого, заранее неизвестно, поэтому циклом for воспользоваться не удастся. Выход состоит в применении цикла while, который работает, пока выполняется условие цикла:

while условие повторения цикла

         команды MATLAB

end

В данном примере условием повторения цикла является то, что модуль те­кущего слагаемого  больше  . Для записи условия в форме, понятной MATLAB, следует использовать знак ">" (больше). Текст файл-функции mysin (mysin.m), вычисляющей сумму ряда на основе рекуррентного соотно­шения

приведен ниже:

 

function s = mysin(x)

% Вычисление синуса разложением в ряд

% Использование: y = mysin(x), -pi < x < pi

% Вычисление первого слагаемого суммы для k = 0

k = 0;

u = x;

s = u;

% Вычисление вспомогательной переменной

x2 = x*x;

while abs(u) > 1.0e-10

    k = k + 1;

    u = -u*x2/(2*k)/(2*k+1);

    s = s + u;

end

 

Обратите внимание, что у цикла while, в отличие от for, нет переменной цикла, поэтому пришлось до начала цикла k присвоить единицу, а внутри цикла увеличивать k на единицу.

Сравните теперь результат, задав в командной строке:

>> sin(pi/3)

ans =

    0.8660

>> mysin(pi/3)

ans =

    0.8660

>> 

Пример 3. Операторы ветвления

Условный оператор if и оператор переключения switch позволяют создать гибкий разветвляющийся алгоритм, в котором при выполнении определен­ных условий выполняется соответствующий блок операторов или команд MATLAB. Практически во всех языках программирования имеются анало­гичные операторы.

Оператор if может применяться в простом виде, для выполнения блока команд при удовлетворении некоторого условия, или в конструкции if-elseif-else для написания разветвляющихся алгоритмов.

Начнем с простейшего примера создайте файл-функцию для вычисления

Она работает для любых значений х, причем для -1<х<1 результат явля­ется комплексным числом. Предположим, что вычисления происходят в об­ласти действительных чисел и требуется вывести сообщение о том, что ре­зультат является комплексным числом. Перед вычислением функции следует произвести проверку значения аргумента х и вывести в командное окно предупреждение, если модуль х меньше единицы. Здесь уже не обой­тись без условного оператора if, применение которого в самом простом случае выглядит так:

if условие

         команды MATLAB

end

Если условие верно, то выполняются команды MATLAB, размещенные ме­жду if и end, а если условие неверно, то происходит переход к командам, расположенным после end. Условие является логическим выражением.

Файл-функция (Rfun.m), проверяющая значение аргумента, приведена в листинге ниже. В нем мы использовали функцию warning, которая служит для вывода пре­дупреждения в командное окно.

 

function f = Rfun(x);

% вычисляет sqrt(x^2-1)

% выводит предупреждение, если результат комплексный

% использование y = Rfun(x)

 

% проверка аргумента

if abs(x) < 1

    warning('Результат комплексный!')

end

% вычисление функции

f = sqrt(x^2-1);

 

Теперь вызов Rfun от аргумента, меньшего единицы по модулю, приведет к выводу в командное окно предупреждения:

>> y = Rfun(0.2)

Warning: Результат комплексный!

> In Rfun at 8

y =

        0 + 0.9798i

>> 

 

Контрольные вопросы

1       Как создать M-файл?

2       Как сохранить и запустить M-файл?

3       Для чего предназначен оператор for?

4       В каких случаях используется оператор while?

5       Какие переменные называются переменными цикла?

6       Какие операторы в MATLAB позволяют организовать ветвления?

7       Как выглядит применение оператора if в самом простом случае?


Скачано с www.znanio.ru