
- •1. Цель работы
- •2. Основы применения м-Файлов и основы программирования в matlab
- •2.1. Работа в редакторе м-файлов
- •2.2. Типы м-файлов
- •2.3. Установка путей
- •2.4. Файл-функции
- •2.4.1. Файл-функции с одним входным аргументом
- •2.4.2. Файл-функции с несколькими входными аргументами
- •2.4.3. Файл-функции с несколькими выходными аргументами
- •2.5. Основы программирования в MatLab
- •2.5.1. Оператор цикла for
- •2.5.2. Оператор цикла while
- •2.5.3. Условный оператор if
- •2.5.4. Оператор ветвления if-elseif-else
- •2.5.5. Оператор ветвления switch
- •2.5.6. Оператор прерывания цикла break
- •3. Индивидуальные задания
- •4. Содержание отчета
2.5.2. Оператор цикла while
Рассмотрим
пример на вычисление суммы, похожий на
пример из предыдущего пункта. Требуется
найти сумму ряда для заданного x
(разложение
в ряд
):
.
Сумму
можно накапливать до тех пор, пока
слагаемые являются не слишком маленькими,
скажем больше по модулю
Циклом for
здесь
не обойтись, так как заранее неизвестно
число слагаемых. Выход состоит в
применении цикла while,
который работает, пока выполняется
условие цикла:
while условие цикла
команды MatLab
end
В
данном примере условие цикла
предусматривает, что текущее слагаемое
больше
.
Для записи этого условия используется
знак больше (>). Текст файл-функции
mysin,
вычисляющей сумму ряда, приведен в
следующем листинге.
Листинг файл-функции mysin, вычисляющей синус разложением в ряд
function S = mysin(x)
% Вычисление синуса разложением в ряд
% Использование: y = mysin(x), -pi<x<pi
S = 0;
k = 0;
while abs(x.^(2*k+1)/factorial(2*k+1))>1.0e-10
S = S + (-1)^k*x.^(2*k+1)/factorial(2*k+1);
k = k + 1;
end
Обратите внимание, что у цикла while, в отличие от for, нет переменной цикла, поэтому пришлось до начала цикла k присвоить нуль, а внутри цикла увеличивать k на единицу.
Условие цикла while может содержать не только знак >. Для задания условия выполнения цикла допустимы также другие операции отношения, приведенные в табл. 1.
Таблица 1. Операции отношения
Обозначение |
Операция отношения |
== |
Равенство |
< |
Меньше |
> |
Больше |
<= |
Меньше или равно |
>= |
Больше или равно |
= |
Не равно |
Задание
более сложных условий производится с
применением логических операторов.
Например, условие
состоит в одновременном выполнении
двух неравенств
и
,
и записывается при помощи логического
оператора and
and(x >= -1, x < 2)
или эквивалентным образом с символом &
(x >= -1) & (x < 2)
Логические операторы и примеры их использования приведены в табл. 2.
Таблица 2. Логические операторы
Оператор |
Условие |
Запись в MatLab |
Эквивалентная запись |
Логическое "И" |
|
and(x < 3, k == 4) |
(x < 3) & (k == 4) |
Логическое "ИЛИ" |
|
Or(x == 1,x == 2) |
(x == 1) (x == 2) |
Отрицание "НЕ" |
|
not(a == 1.9) |
(a == 1.9) |
При вычислении суммы бесконечного ряда имеет смысл ограничить число слагаемых. Если ряд расходится из-за того, что его члены не стремятся к нулю, то условие на малое значение текущего слагаемого может никогда не выполниться и программа зациклится. Выполните суммирование, добавив в условие цикла while файл-функции mysin ограничение на число слагаемых:
while (abs(x.^(2*k+1)/factorial(2*k+1))>1.0e-10)&(k<=10000))
или в эквивалентной форме
while and(abs(x.^(2*k+1)/factorial(2*k+1))>1.0e-10), k<=10000)
Организация повторяющихся действий в виде циклов делает программу простой и понятной, однако часто требуется выполнить тот или иной блок команд в зависимости от некоторых условий, т.е. использовать ветвление алгоритма.