Рекуррент

advertisement
РЕКУРРЕНТНАЯ
ПОСЛЕДОВАТЕЛЬНОСТЬ
Числовая последовательность {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.
ab a b
ab
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
ek21
 a 
 a  ek
2 a  ek 1
__________________________________________
( a  1) 2
1
e1  s1  a  1  a   a 
0
2
2
ek21
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 частей.
__________________________________________
Download