Тема: Вычисление значений функций 1. Вычисление значения алгебраического полинома. Схема Горнера. n n 1 P ( x ) a x a x ... a1 x a0 Рассмотрим полином n n 1 Наша задача – найти значение этого полинома при x = ξ. То есть вычислить P( ) an n an1 n1 ... a1 a0 Для рационального вычисление перепишем полином в виде P( x) a0 x(a1 x(a2 x(a3 x(.... x(an1 xan )...)))) Отсюда легко сконструировать нужную последовательность вычислений, начиная с самых внутренних скобок: b0=an; b1=an-1+b0ξ; b2=an-2+b1ξ; ……… bn-1=a1+bn-2ξ; bn=a0+bn-1ξ. это искомое значение. Сравним эффективность предложенного варианта вычислений (схемы Горнера) с прямым вычислением «в лоб». В качестве критерия будем использовать количество операций умножения. При вычислении по формуле нам потребуется выполнить 1+2+3+…+n=n(n+1)/2 операций умножения. А по схеме Горнера только n операций. 2. Приближенное суммирование числовых рядов. Зада заключается в том, чтобы найти сумму S сходящегося числового ряда ai с нужной нам точностью ε (ε – абсолютная погрешность). i 1 Сумма ряда всегда представляется в виде S=Sn+Rn, где Sn – n-ая частичная сумма, Rn – остаток ряда. Остаток ряда характеризует остаточную погрешность. Задумаемся на вопросом, из-за чего появляются погрешности при суммировании ряда. Тому имеется три причины: остаточная погрешность, погрешность вычисления самих элементов ряда, погрешность при округлении результата. Наша задача корректно учесть все эти нюансы. Процедура вычислений такова. Выбираем три положительных числа ε1, ε2, ε3, таких, что ε1+ ε2+ ε3= ε. Количество ‘n’ слагаемых в частичной сумме Sn выберем столь большим, чтобы остаточная погрешность |Rn|≤ ε1. Каждое из слагаемых ai частичной суммы вычисляем с предельной абсолютной погрешностью, не превышающей ε2/n. Тогда |ai-Ai|≤ ε2/n, i=1,2,…,n, а для n частичной суммы s1n= ai погрешность суммирования будет удовлетворять i 1 неравенству |Sn-s1n|≤ε2. Полученный результат (s1n), при желании, может быть округлен (заменен на s2n). Округление необходимо производить таким образом, чтобы |s1n-s2n|≤ε3. При выполнении такой процедуры суммирования ряда, полученный результат s2n будет соответствовать искомой сумме с погрешностью не более ε. Это легко показать. В самом деле, рассмотрит тождество S-s2 = (S-Sn) + (Sn-s1) +(s1-s2), оценим его по модулю |S-s2|≤|S-Sn|+|Sn-s1|+|s1-s2| |S-s2|≤ ε1+ ε2+ ε3 ≤ ε. Теорема. Если члены ряд представляют собой соответствующие значения положительной монотонно убывающей функции f(x), то есть аn=f(n), тогда n 1 f ( x)dx Rn f ( x)dx n Теорема. Если ряд знакочередующийся и модули его членов монотонно убывают, тогда |Rn| ≤ |an+1|. 3. Вычисление значение аналитических функций. Функция f(x) аналитическая в точке x=ξ, если в окрестности этой точки она разлагается в ряд Тейлора, то есть ее можно представить в виде (n) f ( ) f ( ) f ( x) f ( ) f ( )( x ) ( x ) 2 ... ( x ) n ... 2! n! Остаточный член разложения Rn(x) представляет собой ошибку при замене функции отрезком ряда Тейлора n Rn ( x) f ( x) k 0 f ( k ) ( ) (x )k k! Для остаточного члена существует несколько форм представления. Одна из них такая f (n1) ( ( x )) Rn ( x) ( x )n1 , (n 1)! 0 1 Замена функции отрезком ряда Тейлора - распространенный способ вычисления значение различных функций. Вычисление экспоненты ( ех). Известно из курса математического анализа, что экспоненциальная функция в окрестности точки 0 разлагается в ряд Тейлора вида: x 2 x3 xn e 1 x ... ... 2! 3! n! x e x n1 x 0 1. Остаточный член этого ряда имеет вид: Rn ( x) (n 1)! Непосредственно в таком виде использовать представление экспоненты неэффективно, так как хn+1 сильно растет, когда |x|>1. Для достижения требуемой точности придется использовать много членов разложения (большая трудоемкость). Для обхода этих затруднений предлагается следующая процедура. Представим аргумент х в виде х=Е(х) + q, Е(х) – целая часть числа х, – дробная часть (|q|<1). Тогда ех = еЕ(х)*еq. q Число е = 2.71828182… известно с очень высокой точностью. Поэтому величину еЕ(х) = е*е*е*…*е можно считать вычисляемой с какой угодно точностью. Второй сомножитель еq будем вычислять, пользуясь разложением в ряд Тейлора. Очевидно, что при |q|<1 сходимость ряда qn e n 0 n ! q будет быстрой, то есть потребуется мало членов разложения. Для величины остаточного члена можно получить более точную оценку. В самом деле, по определению остатка, можем записать q n1 q n 2 q n 3 Rn (q) ... (n 1) ! (n 2) ! (n 3) ! q n1 1 q n1 q q2 [1 ...] (n 1) ! 1 q (n 1) ! (n 2) (n 2)( n 3) n2 Если учесть, что n 2 n 1 , то получим n 1 n Если обозначить q n1 n 1 q n1 Rn (q) (n 1) ! n n n ! qn un , un - последний сохраненный член частичной n! суммы, тогда для остаточного члена можно записать q 0 Rn (q) un n Если нам задана остаточная погрешность (εr), тогда количество слагаемых частичной суммы ряда легко определить в процессе вычисления. Находить новые слагаемые и суммировать их можно прекратить, как только для очередного слагаемого выполниться условие q un r n Таким образом вычисление экспоненциальной функции сводится ех = u0 + u1 + u2 +…+ un, где u0 =1, uk = xuk-1/k . Предложенный ранее вариант определения количества слагаемых можно уточнить (дать более точные условия прекращения суммирования) если предположить, что выполняются следующие нежесткие условия, а именно: n≥ 2 |x| >0. В этом случае Rn ( x) Rn ( x ) x n1 (n 1) ! 1 1 x n2 С учетом принятого предположения, вторая дробь не может быть больше 2 (это легко проверить). Тогда, Rn 2x n 1 2x x n un (n 1) ! n 1 n ! Отсюда вывод, процесс суммирования можно прекратить, если последний вычисленный член un по модулю не превосходит εr, то есть |un|< εr. r Вычисление натурального логарифма Начнем с известного представления рядом Тейлора функции натурального логарифма в окрестности 1. n x 2 x3 x 4 n 1 x Ln(1 x) x ... (1) ... , 2 3 4 n 1 x 1 Недостатки этого представления: 1) диапазон чисел узкий; 2) для значений х, близких по модулю к 1, сходимость ряда становиться медленной. Получим другое представление для натурального логарифма. x2 x3 xn Ln(1 x) x ... ... 2 3 n Найдем разность этих представлений 1 x x3 x5 Ln 2( x ...) 1 x 3 5 Обозначим 1 x z 1 x , откуда x=(1-z) / (1+z) . В результате получим 1 z 1 1 z 3 1 1 z 5 Ln( z ) 2 [ ( ) ( ) ...] , 1 z 3 1 z 5 1 z 0 z . Диапазон чисел расширили. Пусть х – положительное число, логарифм которого надо вычислить. Представим его в виде произведения х=2m * q, где 0.5 ≤ q < 1, и далее обозначим 1 q где 0 1 1 / 2 1 1 1/ 2 3 1 q Теперь логарифм числа х можно представить в виде 2 n1 Rn Ln( x) Ln(2 q) mLn(2) Ln(q) mLn(2) 2 ... 3 2n 1 m Остаточный член, по определению, имеет вид (заменa знаменателей во всех слагаемых на 2n+1) 2 n1 2 n 3 2n1 Rn 2 ... 2 1 2 4 ... 2n 1 2n 1 2n 3 В правой части неравенства, в круглых скобках - бесконечная геометрическая прогрессия, со знаменателем меньшем 1. Сумма такой прогрессии легко находится, и равна 1 1 2 Получаем неравенство для остаточного члена 2 2 n1 Rn 1 2 2n 1 Если учесть, что тогда можно записать 0 1 3 2 9 1 2 4 Окончательно получаем неравенство 9 2 n 1 0 Rn 4 2n 1 Сам вычислительный процесс можно организовать следующим образом. Обозначим Uk 2 k 1 2k 1 тогда можно получить , k 1, 2, ... Ln( x) mLn(2) 2(U 1 U 2 ... U n ) Rn Считая, что Ln(2) = 0.69314708 вычисление логарифма любого положительного числа не представляет труда. Окончание процесса суммирования производим тогда, когда U n 4 R Где R остаточная погрешность. В самом деле, в этом случае имеем 9 2 2 n 1 1 Rn Un R 4 2n 1 4