Изучить управляющие конструкции языка программирования в среде 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
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.