Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Задачник-практикум по основам программирования. Учебное пособие по курсу «Информатика»

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

5. ПРИБЛИЖЕННЫЕ ВЫЧИСЛЕНИЯ

Рассмотрим задачувычисления суммы ak , гдеa0, a1, a2, образуют

числовую последовательность.

k =0

Соотношение, которое выражает элемент последовательности через предыдущий (один или несколько) называется рекуррентным [7].

Рекуррентное соотношение для определения члена ряда в типичном случае имеет вид:

ak

= ak 1 t,

k = 1, 2, ...

 

задано

,

a0

 

где t множитель, определяемый как отношение текущего члена ряда к предыдущему члену.

 

 

Вычисление суммы y = ak сходящегося ряда осуществляется на

 

 

k =0

основе рекуррентного соотношения:

yk

= yk 1 + ak ,

k = 1, 2, ...

 

= a0

 

y0

 

Если значения члена ряда {ak} по модулю монотонно убывают, то для получения приближенного значения суммы ряда следует выполнять вычисления, пока выполняется условие |ak| > eps (0 < eps < 1).

Многие функции имеют представление в виде сходящихся рядов.

Пример 5.1. Вычислить приближенное значение функции y = sin x, используя ее разложение в ряд [8]:

y = x

x3

+

x5

x7

+ ...

3!

5!

7!

 

 

 

 

Любой очередной член ряда ak (кроме первого) можно выразить через предыдущий элемент. Для этого необходимо найти их отношение:

t =

ak

=

(1)k x2k +1

 

(2k 1)!

= −

x2

.

ak 1

(2k + 1)!

(1)

k 1

x

2k 1

2k (2k + 1)

 

 

 

 

 

 

 

71

Откуда следует рекуррентное соотношение

 

 

x2

 

ak

= −ak 1

 

, k = 1, 2, 3, ...

2k (2k +1)

 

 

 

 

= x

 

 

a0

 

 

program Appr_1_1;

var x, y, eps, a :real; k :integer;

begin

write(’Введите значение аргумента x=’); readln(x);

write(’Введите значение eps=’); readln(eps);

a:=x; y:=a; k:=0; while abs(a)>=eps do begin

k:=k+1; a:=-a*x*x/2/k/(2*k+1);

y:=y+a

 

end;

’,y:10:7);

writeln(’y=

writeln(’sin x=’,sin(x):10:7) end.

Для проверки правильности вычислений следует выдать также значе- ние, вычисленное с использованием стандартной функции sin(x).

Для решения этой задачи могут использоваться и другие формулы. Для записи вида членов ряда aj можно использовать вспомогательную последовательность i = 1, 3, 5,…

Для нее рекуррентное соотношение имеет вид

i

= i

j1

+ 2 ,

j = 1, 2, 3, ...

j

 

 

 

 

= 1

 

 

i

 

 

0

 

 

 

 

Вид для общего члена ряда будет следующий:

a j =

xi

.

i!

 

 

Тогда члены ряда определяются следующими рекуррентными соот- ношениями:

72

ij

= ij1 + 2, j = 1,

2, 3...

 

 

 

x2

 

 

 

 

 

 

 

a j

= −a j1

 

 

 

, .

(ij

1)

 

 

 

ij

 

= 1, a0 = x

 

 

 

i0

 

 

 

program Appr_1_2;

var x, y, eps, a: real; i: integer;

begin

write(’Введите значение аргумента x=’); readln(x);

write(’Введите значение eps=’); readln(eps);

a:=x; y:=a; i:=1; while abs(a)>=eps do begin

i:=i+2; a:=-a*x*x/((i-1)*i); y:=y+a

end;

writeln(’y= ’,y:10:7); writeln(’sin x=’,sin(x):10:7) end.

Пример 5.2. Интегральный синус

Si(x) = x

sin t

dt

0

t

 

представляется в виде ряда [9]:

Si(x) = x

1

 

x3

+

1

 

x5

1

 

x7

+ ...

3!

3

5!

5

7!

7

 

 

 

 

 

 

 

Вычислить приближенное значение функции Si(x), используя ее раз- ложение в ряд.

Очередной член ряда a k (кроме первого) выражается через предыдущий член. Для этого необходимо найти их отношение:

t =

ak

 

(1)k

x2k +1

(2k 1)!

(2k 1)

 

x2 (2k 1)

 

=

 

 

 

 

 

=

 

.

ak 1

(2k + 1)!

(2k + 1)

(1)k 1

x2k 1

2 k (2k + 1)2

73

Откуда следует рекуррентное соотношение

 

x

2

(2k −1)

 

 

ak = −ak 1

 

 

, k = 1, 2, ...

2 k (2k +1)

2

 

 

 

 

 

 

a0 = x

 

 

 

 

 

 

 

program Appr_2_1;

var x, y, eps, a, c: real; k: integer;

begin

write(’Введите значение аргумента x =’); readln(x);

write(’Введите значение eps =’); readln(eps);

a:=x;

y:=a;

k:=0;

c:=-x*x/2; {постоянная часть множителя для члена ряда}

while abs(a)>=eps do begin

k:=k+1; a:=a*c*(2*k-1)/k/(2*k+1)/(2*k+1); y:=y+a

end;

writeln(’Si(x)=’,y:10:7)

end.

Как и в примере 5.1, можно получить другой вид рекуррентных со-

отношений:

 

 

 

 

 

 

ij

= ij1 + 2, j = 1,

2,

3...

 

 

 

x2

(ij

− 2)

 

 

 

 

 

a j

= −a j1

 

 

 

 

 

,

(ij

 

2

 

 

 

 

−1) ij

 

 

 

= 1, a0 = x

 

 

 

 

i0

 

 

 

 

program Appr_2_2;

var x, y, eps, a, c: real; i: integer;

begin

write(’Введите значение аргумента x =’); readln(x);

74

write(’Введите значение eps =’); readln(eps);

a:=x;

y:=a;

i:=1;

c:=-x*x; {постоянная часть множителя для члена ряда}

while abs(a)>=eps do begin

i:=i+2; a:=a*c*(i-2)/((i-1)*i*i); y:=y+a

end;

writeln(’Si(x)=’,y:10:7)

end.

Для проверки правильности вычисления приближенного значения ин- тегрального синуса Si(x) следует воспользоваться таблицами специальных функций, например, в [9–11].

Контрольные вопросы

1)x = 0.1 Si(x) = 0.09994

2)x = 0.5 Si(x) = 0.49311

3)x = 5 Si(x)= 1.54993

Пример 5.3. Вычислить приближенное значение постоянной Эйле- раМаскерони как предела последовательности

c = lim(n 1 ln n) 0.5772157

n→∞ i=1 i

n

 

Обозначим Sn = 1

i=1

i

Последовательное приближение к точному значению постоянной Эй- лераМаскерони c определяется рекуррентными соотношениями:

cn = S n

– ln n, n = 2, 3, ...

 

 

= Sn1

+

1

,

n = 2, 3, ...

,

Sn

n

 

c1 = 1

 

 

 

 

,

 

 

 

 

S1 = 1

 

 

 

 

 

 

 

Новое значение c вычисляется до тех пор, пока не будет выполнено условие |c – cp| < eps, где cp предыдущее значение c.

program Appr_3; var n:integer;

75

eps,S:real;

c,cp:real;{текущее и предыдущее значения посто-

янной} begin

write(’Введите значение eps =’); readln(eps);

n:=1; S:=1; c:=1; repeat

cp:=c; n:=n+1; S:=S+1/n; c:=S-ln(n)

until abs(c-cp)<eps; writeln(’константа c=’,c:10:7)

end.

ЗАДАЧИ

5.1. Найти приближенное значение суммы ряда y. Суммирование прекратить, как только очередное слагаемое станет меньше eps (0 < eps < 1). Близость приближенного и точного значений указывает на правильность вычислений.

1)

y = 1

1

 

+

1

1

+ ...

 

ln 2

 

 

 

 

2

 

 

 

 

3

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

 

1

,

 

 

n = 2, 3, ...

 

π

 

 

2)

Sn = Sn1

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

S1

= 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3)

y = 1+

1

 

 

+

 

 

1

 

+

 

1

 

+ ...

π 2

 

 

2

2

 

 

 

2

 

4

2

6

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

4)

y = 1

1

 

 

+

 

 

1

 

 

 

1

 

+ ...

π 2

 

 

2

2

 

 

 

2

 

 

4

2

12

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

5)

y = 1+

1

 

 

+

 

 

1

+

1

 

+ ...

π 2

 

 

2

 

 

 

 

2

7

2

 

8

 

 

 

 

 

3

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

6)

y = 1

1

 

 

+

 

 

1

 

1

 

+ ...

π 3

 

 

3

 

 

 

 

3

 

7

3

 

32

 

 

 

 

 

3

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

1

 

1

 

 

 

 

 

 

1

 

1

 

π

+ ln 2)

7)

y = 1

 

 

+

 

 

 

+

 

 

...

3 (

 

 

4

 

7

 

 

 

 

 

 

 

3

 

10

13

76

 

y =

1

 

1

 

1

 

 

 

1

 

 

 

1

 

 

1

(

π

ln 2)

8)

 

5

+ 8

 

 

 

+

 

 

 

...

3

 

2

 

 

 

 

 

 

3

11

14

 

y =

 

 

1

 

1

 

 

 

1

 

 

 

1

 

 

 

 

1

 

{π + 2 ln( 2 + 1)}

9)

1

5 +

9

 

+

 

 

 

...

 

 

 

 

 

 

 

 

 

 

 

4

2

13

17

 

10)

y = sin x + sin 3x + sin 5x

+ sin 7x

+ ...

 

π

 

 

 

 

3

5

7

 

 

 

 

4

 

 

 

 

11)

y = cos x cos 3x + cos5x cos 7x + ...

π

 

 

 

 

3

5

7

 

 

 

4

 

 

 

 

12)

y = 1

cos 2x cos 4x cos 6x

...

π

sin

x

 

 

2

1 3

3 5

5 7

 

 

4

 

 

 

 

 

 

13)

y = sin 2x + 2 sin 4x + 3 sin 6x

+ ...

π

 

cos

x

 

 

1 3

3 5

5 7

 

 

8

 

 

 

 

 

 

14)

y = ln 2 + cos 2x + cos 4x

+ cos 6x

+ ...

≈ − ln

 

sin x

 

 

 

 

 

 

2

3

 

 

 

 

 

 

 

 

 

(0 < x < π )

( π2 < x < π2 ) ( π2 x π2 ) (0 < x < π )

(0 < x2 < π 2 )

5.2.Найтиприближенноезначениетригонометрическойилигиперболической функции, используя ее разложение в бесконечное произведение:

 

 

x

2

1) y = sinx = x 1

 

 

 

 

i=1

 

i π

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 x

 

 

 

2

 

 

 

 

 

 

 

2)

y = cosx =

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

π (2i 1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ex

ex

 

 

 

 

 

x

 

 

2

 

 

3)

y = shx =

 

 

2

 

 

= x

1+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=1

 

 

 

 

i π

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

x

+ e

x

 

 

 

 

 

2 x

 

 

2

 

4)

y = chx =

 

 

 

=

 

+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

π (2i

1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.3.Найтиприближенноезначениеспециальныхфункций[9–11], используя их разложение в ряд. Это значит, что нужно просуммировать члены ряда до первого члена, модуль которого меньше заданного eps (0 < eps < 1).

77

1) Интегральная показательная функция

 

 

x

i

 

 

 

 

 

 

 

 

 

Ei(x) = c + ln x +

 

 

 

 

 

 

 

(x > 0)

 

 

 

 

 

 

 

 

 

 

 

i=1 i i!

 

 

 

 

 

 

 

 

 

c 0.5772157 – постоянная Эйлера-Маскерони

Контрольные вопросы

 

 

 

 

 

 

 

 

 

 

 

 

x = 0.1 Ei(x) = –1.6228

 

 

 

 

 

 

 

 

 

x = 0.5

Ei(x) = 0.4542

 

 

 

 

 

 

 

 

 

x = 5

Ei(x) = 40.1853

 

 

 

 

 

 

 

 

 

2) Интегральная показательная функция

 

 

 

 

 

 

x

 

 

 

 

x

2

 

 

x

3

 

E1 (x) = − c + ln x

 

 

 

 

+

 

 

 

 

+ ...

1 1!

2 2!

3 3!

 

 

 

 

 

c 0.5772157 – постоянная Эйлера-Маскерони

Контрольные вопросы

 

 

 

 

 

 

 

 

 

 

 

 

x = 0.1

E1(x) = 1.823

 

 

 

 

 

 

 

 

 

 

 

 

x = 0.5

E1(x) = 0.5598

 

 

 

 

 

 

 

 

 

 

 

 

x = 5

E1(x) = 0.001148

 

 

 

 

 

 

 

 

 

 

 

 

3) Интегральный косинус

 

 

 

 

 

 

 

 

 

 

 

 

Ci(x) = c + ln x S (x) = c + ln x

1

 

x2

 

1

 

x4

 

1

 

x6

 

 

 

+

 

 

 

 

 

 

+ ...

 

 

 

 

 

 

 

1

2!

 

2

 

4!

 

4

 

6!

 

6

 

 

 

 

 

 

 

 

 

c 0.5772157 – постоянная Эйлера-Маскерони

Контрольные вопросы

x = 0.5 S1(x) = 0.06185

x = 1 S1(x) = 0.23981

x = 5 S1(x) = 2.37669

4) Функция ошибок (интеграл вероятностей)

(x > 0)

(x > 0)

 

2

 

x

3

 

 

x

5

 

x

7

erf x =

x

 

 

+

 

 

 

1! 3

2! 5

3! 7

 

π

 

 

Контрольные вопросы

x = 0.1 erf x = 0.1125 x = 1 erf x = 0.8427 x = 2 erf x = 0.9953

5) Интеграл вероятностей

+ ...

 

x

 

2

 

x3

 

 

 

x5

 

 

 

 

x7

 

 

P(x) = erf

 

=

 

x

 

 

+

 

 

 

 

 

 

 

 

+ ...

2

π

2 1 ! 3

2

2

2 !

5

2

3

3 !

7

 

 

 

 

 

 

 

 

78

Контрольные вопросы

x = 0.1 P( x ) = 0.0797 x = 1 P( x ) = 0.6827 x = 4 P( x ) = 0.9999

6) Эллиптический интеграл

 

π

 

 

1 2

 

1 3 2

 

2

 

1 3 5 2

 

3

 

 

< 1 .

 

 

 

 

K(x) =

 

1

+

 

x +

 

 

x

 

+

 

 

x

 

+ ...

x

 

2

 

 

2

 

2 4

 

 

 

2 4 6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Контрольные вопросы x = 0.1 K(x) = 1.61244 x = 0.5 K(x) = 1.85408 x = 0.9 K(x) = 2.57809

7) Эллиптический интеграл

 

π

 

 

1

2

 

1 3 2

 

x2

 

1 3 5 2

E(x) =

 

1

x

 

 

 

 

 

 

2

 

3

 

 

 

 

2

 

 

2 4

 

 

2 4 6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Контрольные вопросы x = 0.1 E(x) = 1.53075 x = 0.5 E(x) = 1.35064 x = 0.9 E(x) = 1.10477

8) Интеграл Френеля

 

 

 

 

 

 

 

π 2

 

x5

 

π

4

 

x9

 

π

6

C(x) = x

 

 

+

 

 

2! 5

4! 9

2

 

 

2

 

 

 

2

 

Контрольные вопросы

x = 0.2 C(x) = 0.199921 x = 2 C(x) = 0.488253 x = 4 C(x) = 0.498199

9) Интеграл Френеля

 

x

3

 

x

 

< 1 .

 

 

− ...

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

x13

 

+ ...

x > 0

6!

13

 

 

 

 

π

 

 

x3

 

π 3

 

x7

 

π

5

x11

 

 

S(x) =

 

 

 

 

 

 

 

 

 

 

+

 

 

 

 

− ...

x > 0

1!

3

3!

7

5! 11

 

2

 

 

2

 

 

2

 

 

 

Контрольные вопросы

x = 0.2 S(x) = 0.0041876 x = 2 S(x) = 0.343415 x = 4 S(x) = 0.420517

79

5.4. Периметр эллипса, заданного своими полуосями a и b (a b), определяется суммой ряда

p = 2π a

 

 

1

2

(1− k

2

 

1 3 2

 

(1

k 2 ) 2

 

1 3

5

2

(1− k 2 )3

 

1

 

 

 

) −

 

 

3

 

 

 

5

− ... ,

 

 

 

2

 

 

 

 

 

2 4

 

 

 

2 4 6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где

k = b

a

 

коэффициент

сжатия.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Получить таблицу длин эллипсов для заданной большей полуоси a, меняя b от 0 до a.

5.5.Найти первый член последовательности {an}, для которого выполнено условие |an – an-1| < eps, если последовательность образована по закону:

1)

an

=

 

 

n

 

 

 

 

;

 

 

 

 

 

n2

1 +

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n2 + 1

 

 

 

 

 

2)

an

= (1

1 )(1

1)...(1

 

 

1

);

 

 

n + 1

 

 

 

 

 

2

 

 

3

 

 

 

 

 

3)

an

= (1

1

)(1

+

1

)...(1

+

(1)n

).

2!

3!

(n + 1)!

 

 

 

 

 

 

 

 

 

 

 

 

5.6. Среди членов последовательности, вычисляемых по формулам xi = (2 xi31 ) / 5 (i = 1, 2,...), x0 = 1 ,

найти xi для которого выполняется неравенство |xi xi-1| < 0.0001. 5.7. Для заданных x > 0 и eps вычислить y = x , используя формулу

yn

=

1

( yn1 +

x

) , y0 = x.

2

 

 

 

 

yn1

Вычисления прекратить, если будет выполнено условие |yn yn-1| < eps. 5.8. Для заданных x и eps вычислить y = 3 x , используя формулу

sin 1

аn = 1 nn

В качестве начального приближения принять

y0

x / 3,

если

x 1

 

=

если

x < 1

.

 

x,

 

Вычисления прекратить, если будет выполнено условие |yn yn-1|< eps. 5.9. Для заданных x и eps вычислить y = 5 x , используя формулу

yn

=

4 yn1 +

x

.

4

 

 

5

5yn1

80

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]