РЕКУРРЕНТНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ Числовая последовательность {xk} называется рекуррентной ранга p, если k 0, 1, ..., p 1, xk ak , xk f (k , xk 1 , xk 2 ,..., xk p ), k p, p 1, ... где a0, a1, …, ap – 1 – константы, а f – функция. __________________________________________ Сумма элементов ai – рекуррентная последовательность ранга 1: S 0 0, S i S i 1 ai , i 1, 2, ..., n . __________________________________________ S:=0; for i:=1 to n do S:=S+ a(i); __________________________________________ Полином от x степени n можно представить в виде формулы Горнера: Pn ( x) an x n an 1x n 1 ... a1x a0 (...(an x an 1 ) x ... a1 ) x a0 , где an, an–1, …, a1, a0 – коэффициенты полинома. Вычисление полинома при заданном значении x и коэффициентов a0, a1, …, an : P0 a n , Pi Pi 1 x a n i , i 1, 2, ..., n . __________________________________________ P:=a[n]; for i:=1 to n do P:=P*x+a[n-i]; __________________________________________ Вычисление цифр a0, a1, …, an неотрицательного целого числа Pn при заданном значении основания x: ai Pn i mod x, Pn i 1 Pn i div x, i 0, 1, ..., n, Pn i 0, __________________________________________ i:=0; while P>0 do begin a[i]:=P mod x; P:=P div x; i:=i+1 end; n:=i-1; __________________________________________ Числа Фибоначчи задаются рекуррентной последовательностью ранга 2: f 0 0, f 1 1, f k f k 1 f k 2 , k 2, 3, ... , __________________________________________ f1:=0; f2:=1; for k:=2 to n do begin f3:=f2+f1; f1:=f2; f2:=f3 end __________________________________________ Формула Муавра n n 1 1 5 1 5 . fn 5 2 2 Доказательство. Базис. При n = 0 и n = 1 проверяем простой подстановкой. Предположение. Пусть при n ≥ 0 формула верна. Вывод. При n + 1 получаем: n n 1 1 5 1 5 f n 1 5 2 2 1 1 5 5 2 n 1 n 1 1 1 5 5 2 учитывая, что n 1 n 1 1 5 2 1 5 2 2 1 5 1 5 1 . 2 2 _________________________________________ Число lim ( f k 1 / f k ) (1 5) / 2 1,618 k называют золотым сечением. __________________________________________ Алгоритм Евклида, вычисляющий наибольший общий делитель НОД(a, b) двух целых чисел a ≥ 0, b ≥ 0, основан на инвариантных соотношениях: 1) НОД(a, 0) = a; 2) НОД(a, b) = НОД(b, a); 3) НОД(a, b) = НОД(a mod b, b), a ≥ b > 0. __________________________________________ Докажем третье соотношение. Операция r = a mod b эквивалентна многократному вычитанию b из a до тех пор, пока не будет выполняться 0 ≤ r < b. Поэтому достаточно доказать, что НОД(a, b) = НОД(a – b, b), a ≥ b > 0. Пусть верно противоположное утверждение, а именно: НОД(a, b) = d, НОД(a – b, b) = c, причем c ≠ d. ab a b ab b Но тогда , а также , при этом c c c c c a – оба целые, в то время как может быть c целым лишь в случае, если c = d. Это противоречие и доказывает третье соотношение. __________________________________________ Последовательность пар {xi, yi} такова, что НОД(xi, yi) = НОД(a, b), max(xi, yi) > max(xi + 1, yi + 1) x 0 a , y 0 b, x i 1 x i mod y i , y i 1 y i , при x i y i 0, y y mod x , x x , при y x 0. i 1 i i i 1 i i i _________________________________________ x:=a; y:=b; while (x>0)and(y>0) do if x>=y then x:=x mod y else y:=y mod x; if x>0 then nod:=x else nod:=y _________________________________________ Трудоемкость программы определяется числами a и b. Наихудший случай будет, если при fk ≥ max(a, b) > fk – 1, где fk , fk – 1 – числа последовательности Фибоначчи, выполняется условие max(a, b) = fk , min(a, b) = fk – 1 . Тогда k – количество выполнений цикла. Пренебрегая вторым слагаемым в формуле n n 1 1 5 1 5 fn 5 2 2 и логарифмируя левую и правую части, получим: k log ( 5 f k ) log 2 log 2 ( 5 f k ) , k log 2 log 2 ( 5 max(a, b)) 1.4 log 2 max(a, b) , Т.е. трудоемкость алгоритма Евклида имеет порядок O(log max(a, b)). __________________________________________ ПРИБЛИЖЕННОЕ ВЫЧИСЛЕНИЕ ПРЕДЕЛА ПОСЛЕДОВАТЕЛЬНОСТИ Последовательность может иметь предел при n → ∞. Пусть S 0 0, S k S k 1 f k , k 1, 2, ... а слагаемые f k стремятся к нулю при k → ∞. f 1 a, f k p(k , f k 1 ), k 2, 3, ... _________________________________________ S:=a; f:=a; k:=2; while abs(f)>=eps do begin f:= p(k, f); S:=S+f; k:=k+1 end _________________________________ Трудоемкость программы, т.е. количество k выполнений цикла, определяется из формулы fk+1 < ε. _______________________________________ Приближенное значение функции sin x : x3 x5 x 2 k 1 k 1 sin x x ...(1) 3! 5! (2k 1)! Рекуррентное соотношение для элементов суммы f 1 x, x2 f f , k 2, 3, ... k 1 k (2k 1)(2k 2) __________________________________________ S:=x; f:=x; k:=2; while abs(f)>=eps do begin f:=-f*x*x/((2*k-1)*(2*k-2)); S:=S+f; k:=k+1 end __________________________________________ Трудоемкость алгоритма (количество k выполнений цикла): 2 k 1 x f k 1 (2k 1)! Если |x| ≤ 1, ε ≤ 1/2, то k ≤ log2 1/ε . _________________________________________ Сумма 1 1 1 S 1 ... ... 2 3 k стремится к бесконечности при k → ∞, хотя 1 lim 0 k k _________________________________________ S:=1; k:=2; while (1/k)>=eps do begin S:=S+1/k; k:=k+1 end _________________________________________ При eps=10-4 значение S≈9,79, при eps=10-8 значение S≈19. _________________________________________ Рекуррентная последовательность Герона: s 0 1, s 1 s a , k 1, 2, ... k 2 k 1 s k 1 Докажем, что lim s k a при a ≥ 0. k Доказательство. Пусть s k a ek , где ek – ошибка k-го приближения. Тогда 1 a sk a ek 1 2 a ek 1 1 ek21 a a ek 2 a ek 1 __________________________________________ ( a 1) 2 1 e1 s1 a 1 a a 0 2 2 ek21 1 ek 0, 2 a ek 1 ek 1 ek 1 , 2 k 2, ... Т.е. e1/e2 ≥ 2, e1/e3 ≥ 4, …, e1/ek ≥ 2k – 1, откуда 1 a . k log 2 2ε s:=(1+a)/2; e:=eps; while e>=eps do begin s1:=(s+a/s)/2; e:=s-s1; s:=s1 end __________________________________________ МЕТОД ДИХОТОМИИ ВЫЧИСЛЕНИЯ КОРНЯ ФУНКЦИИ На интервале [a, b] задана непрерывная функция y = f(x), значения функции на концах интервала f(a) и f(b) имеют разные знаки. Требуется найти такое z, что | x0 – z | ≤ ε / 2 . Рекуррентная последовательность пар чисел {ui , vi}: u 0 a , v 0 b, u i 1 u i , v i 1 (u i v i ) / 2, при sign f (u i ) sign f ( u (u v ) / 2, v v , при sign f (u ) sign f ( i 1 i i i 1 i i u:=a; v:=b; x:=(u+v)/2; while (v-u)>=eps do begin if f(u)*f(x)<=0 then v:=x else u:=x; x:=(u+v)/2 end b a k log 2 Трудоемкость : ε __________________________________________ Вычисление определенного интеграла I от функции f (x) на интервале [a, b] методом трапеций путем деления интервала на n равных частей. I d ( f a / 2 f a d f a 2d ... ... f a (n 1)d f b / 2) ________________________________________________________________ I 1 d ( f (a) f (b)) / 2, I i 1 I i d f (a i d ), i 1, 2, ..., n 1. _________________________________________ type func=function(x:real):real; ___________________________________ function Integr(f:func; a,b:real;n:integer):real; var i:integer; d,s:real; begin s:=(f(a)+f(b))/2; d:=(b-a)/n; for i:=1 to n-1 do s:=s+f(a+i*d); Integr:=s*d end; _________________________________________ function f1(x:real):real; begin f1:=exp(sqrt(x)) end; ___________________________________ function f2(x:real):real; begin f2:=sqrt(exp(x)) end; ___________________________________ I1:=Integr(f1,0,1,10); вычисляет интеграл функции f ( x) e x на интервале [0,1] путем дробления интервала на 10 частей __________________________________________ I2:=Integr(f2,-1,1,20); вычисляет интеграл функции f ( x) e x на интервале [–1,1] путем дробления интервала на 20 частей. __________________________________________