Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Как используется конструкция if-elseif-else для изменения хода программы в зависимости от нескольких условий? Как работают операторы switch,break? (В1Б14,В2Б21,В3Б8).



Ветвление в ходе работы программы осуществляется при помощи конструкции if-elseif-else. Самый простой вариант ее использования (без elseif и else ) реализован в файл-функции possum , которая предназначена для нахождения суммы всех элементов вектора, больших 2:

Если ход программы должен изменяться в зависимости от нескольких условий, то следует использовать полную конструкцию if-elseif-else. Каждая из ветвей elseif в этом случае должна содержать условие выполнения набора команд, размещенных после нее. Важно понимать, что условия проверяются подряд, первое выполненное условие приводит к работе соответствующего набора, выходу из конструкции if-elseif-else и переходу к команде, следующей за end. У последней ветви else не должно быть никакого условия. Команды, находящиеся между else и end, выполняются в том случае, если все условия оказались невыполненными.

Оператор переключения switch

 

Ход работы программы может определяться значением некоторой переменной (переключателя). Такой альтернативный способ ветвления программы основан на использовании оператора переключения switch. Переменная-переключатель помещается после switch через пробел. Оператор switch содержит наборы команд, начинающиеся со слова case. После каждого case через пробел записывается то значение переключателя, при котором выполняется данный набор. Последний набор начинается со слова otherwise, его команды выполняются в том случае, когда ни один из наборов case не был выполнен. Если хотя бы один из наборов case выполнен, то происходит выход из оператора switсh и переход к команде, следующей за end.

Предположим, что требуется найти количество единиц и минус единиц в заданном массиве и, кроме того, найти сумму всех элементов, отличных от единицы и минус единицы. Создадим файл-функцию, которая по заданному массиву возвращает число минус единиц в первом выходном аргументе, число единиц – во втором, а сумму – в третьем. В ней следует перебрать все элементы массива в цикле, причем в роли переменной-переключателя будет выступать текущий элемент массива.

Набор case может быть выполнен не только при одном определенном значении переключателя, но и в том случае, когда переключатель принимает одно из нескольких допустимых значений. В этом случае значения указываются после слова case в фигурных скобках через запятую, например, case {1, 2, 3}.

Оператор прерывания цикла break

 

Досрочное завершение циклов while или for осуществляется при помощи оператора break.

Пусть, например, требуется по заданному массиву x образовать новый массив y по правилу y(k) = x(k+1)/x(k) до первого нулевого элемента x(k), т. е. до тех пор, пока имеет смысл операция деления. Номер первого нулевого элемента в массиве x заранее неизвестен, более того, в массиве xможет и не быть нулей. Решение задачи состоит в последовательном вычислении элементов массива y и прекращении вычислений при обнаружении нулевого элемента в x.

 

15)Как с помощью команды plot(…) вывести в одном окне графики двух одномерных функций, аргументы которых заданы на интервалах разной длины, но шаг дискретизации аргументов одинаков? (В1Б13, В2Б8, В2Б29, В3Б15, В3Б29).

Построение графика функции одной переменной (или нескольких таких графиков) в линейном масштабе осуществляется с помощью команды plot(…).

Рассмотрим использование команды plot(…) на конкретных примерах.

Пример 1. Построить график функции y(t) = e-2tcos(10t), где аргумент t меняется в интервале [0; 1] с шагом 0, 01 (рис. 5.1).

> > t=[0: 0.01: 1];

> > y=exp(-2*t).*cos(10*t);

> > plot(t, y)

 

 

Рис. 5.1

Пример 2. Построить в одном окне графики двух функций x(t) = 2sin(50t) иy(t)=e-2tcos(10t), где аргумент t меняется в интервале [0; 2] с шагом 0, 01, (рис. 5.2).

> > t=[0: 0.01: 2];

> > y=exp(-2*t).*cos(10*t);

> > x=2*sin(50*t);

> > plot(t, x, t, y)

 

 

Рис. 5.2

Обсудим построенные графики.

1. Команда plot(t, x) позволяет строить в декартовой системе координат график одномерной функции x с аргументом t. При этом в скобках на первом месте стоит аргумент, а на втором функция.

2. MATLAB (если это не указано специально) самостоятельно выбирает цвет графика, масштаб и оцифровывает оси абсцисс и ординат. Из рис. 5.2 видно, что масштабирование производится по максимальным значениям одной из функций и ее аргумента.

3. Для функции x(t) = 2sin(50t) шаг изменения аргумента оказался не достаточно малым, и поэтому на ее графике отчетливо видны изломы.

Порой неверный выбор шага изменения аргумента функции может существенно исказить ее график.

Если пользователь затрудняется выбрать подходящий шаг (шаг дискретизации аргумента), то при выводе графика функции можно воспользоваться командой fplot(…), и MATLAB подберет шаг дискретизации самостоятельно. Поясним это на примере.

Пусть требуется вычислить функцию y = cos10x·(sinx+0, 1sin(100π x)) на интервале [0; 1].

Если шаг дискретизации Δ х выбрать равным Δ х=0.01, то при выводе графика с помощью команды plot(…) получим результат, показанный на рис. 5.3а, что не соответствует истинной картине. Дело в том, что при таком шаге второе слагаемое сомножителя, заключенного в скобки, все время обращается в нуль. Верен график, показанный на рис. 5.3б.

Листинги программ вычисления функции и вывода ее графика с помощью команды plot(…) и команды fplot(…) выглядят следующим образом:

Вариант с применением Вариант с применением

команды plot(…) (рис. 5.3а) команды fplot(…) (рис. 5.3б)

x=[0: 0.01: 1]; y=myfun(x);

y=cos(10*x).*(sin(x)+0.1*sin(100*pi*x)); fplot(‘myfun’, [0, 1])

plot(x, y)

 

Рис. 5.3а Рис. 5.3б

Первым входным аргументом fplot(…) является имя файл-функции, а вторым – вектор, элементы которого есть границы отрезков: fplot('имя файл-функции', [a, b]).

Для приведенного примера файл-функция myfun имеет вид:

function y=myfun(x);

y=cos(10*x).*(sin(x)+0.1*sin(100*pi*x));

Иногда требуется сравнить поведение двух функций, значения которых сильно отличаются друг от друга. При этом на графике с небольшими значениями функции бывает трудно выявить ее характерные особенности. В таком случае можно воспользоваться командой plotyy(…), который позволяет вывести графики двух функций в одно окно и нанести в этом окне две оси ординат, имеющие подходящий масштаб.


Поделиться:



Последнее изменение этой страницы: 2017-03-17; Просмотров: 344; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.014 с.)
Главная | Случайная страница | Обратная связь