8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 121 122 123 124 125 126 127 ... 365

*=о (2* + 1)!

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

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

end

В данном примере условием повторения цикла является то, что модуль текущего слагаемого x2k+i/(2k + 1)! больше 1(Н°. Для записи условия в форме,

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

2

х

ак--ак~\

приведен в листинге 7.7.

Примечание

Конечно, в общем случае малость слагаемого— понятие относительное, слагаемое может быть, скажем, порядка I010, но и сама сумма того же порядка. В этом случае условие окончания суммирования должно быть другим, а именно малость модуля отношения текущего слагаемого к уже накопленной части суммы. Пока не будем обращать на это внимания — нашей задачей является изучение работы с циклами.

I Листинг 7.7. Файл-функция mysin, вычисляющая синус разложением в ряд

function s = mysin(х)

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

i Использование: у = mysin(х), -pi < х < pi

хожий на пример из предыдущего раздела. Требуется найти сумму ряда для заданного х (разложение в ряд sin jc ):

2к+\


1 вычисление первого слагаемого суммы для к = О к = 0; и = х;

s = и;

% вычисление вспомогательной переменной xZ = х*х;

while abs( u ) > 1.0e-10 к = к + 1,-u = -и* х2/(2*k) / (2*k + 1) ; s = s + u;

end

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

Сравните теперь результат, построив графики функций mysin и sin на отрезке [-П, л] на одних осях, например, при помощи fplot (команды можно задать из командной строки):

» fplot(@mysin, [-pi, pi]) » hold on

» fplot(@sin, [-pi, pi], k.)

Рис. 7.3. Сравнение mysin и sin


Получающиеся графики изображены на рис. 7.3, они свидетельствуют о правильной работе файл-функции mysin.

Условие цикла while может содержать логическое выражение, составленное из операций отношения и логических операций или операторов. Для задания условия повторения цикла допустимы операции отношения, приведен-

ные в табл. 7.1.

Таблица 7.1. Операции отношения

Обозначение

Операция отношения

==

Равенство

<

Меньше

<=

Меньше или равно

>=

Больше или равно

-=

Не равно

Задание более сложных условий производится с применением логических операторов или операций. Например, условие —1 < jc < 2 состоит в одновременном выполнении неравенства х>-1 и х<2 и записывается при помощи логического оператора and

and(x >= -1, х < 2)

или эквивалентным образом с применением логической операции "и" — &

(х >= -1) & (х < 2)

Основные логические операции и операторы и примеры их записи приведены в табл. 7.2 (логические выражения подробно описаны в разд. "Логические операции с числами и массивами " этой главы).

Таблица 7.2. Логические выражения

Тип

выражения

Выражение

Логический оператор

Логическая операция

Логическое "и"

л <3 и к=4

and (х < 3, к==4)

(х<3) & (к = 4)

Логическое "или"

х = 1 или 2

or (х == 1, х — 2)

(х == 1) (х == 2)

Отрицание "не"

в* 1.9

not (а == 1.9)

-{а == 1.9)



0 ... 121 122 123 124 125 126 127 ... 365