Раздел: Документация
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 может содержать логическое выражение, составленное из операций отношения и логических операций или операторов. Для задания условия повторения цикла допустимы операции отношения, приведен-
Задание более сложных условий производится с применением логических операторов или операций. Например, условие —1 < jc < 2 состоит в одновременном выполнении неравенства х>-1 и х<2 и записывается при помощи логического оператора and and(x >= -1, х < 2) или эквивалентным образом с применением логической операции "и" — & (х >= -1) & (х < 2) Основные логические операции и операторы и примеры их записи приведены в табл. 7.2 (логические выражения подробно описаны в разд. "Логические операции с числами и массивами " этой главы). Таблица 7.2. Логические выражения
0 ... 121 122 123 124 125 126 127 ... 365
|