Паскаль. Основы программирования

       

Функциональные ряды


Функциональным рядом

называется выражение

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

Примеры

функциональных рядов.

 

Функции можно разложить в ряды

1. Показательная функция:

на множестве всех действительных чисел R, т. е. на промежутке от

 до
 .

2. Тригонометрические функции.



на множестве всех действительных чисел R.

на множестве R.

на промежутке [-1, 1].

Из этого ряда при x = 1 получается знаменитый ряд Лейбница

- первый ряд, дающий разложение числа

.

Для вычисления числа

 есть еще много других рядов. Вот некоторые из них, которые дают более быстрое приближение к числу
:

a)                             

б) ряд Леонардо Эйлера:

 

3. Логарифмическая функция

на промежутке (-1, 1).

4. Разложение бинома в ряд или биномиальный ряд:

на промежутке (-1, 1), где m - любое вещественное число, отличное от 0 и от всех натуральных чисел (при натуральном m получается известное разложение по формуле Ньютона - бином Ньютона).

Вы уже знакомы с последовательностями, которые задавались формулами n-го члена этих рядов и находили члены этих последовательностей. Это обстоятельство упростит нам процесс составления программ суммирования рядов.

Совершенно ясно, что с помощью этих рядов можно вычислять значения соответствующих функций.

Возникает следующий вопрос. Как оценить точность, с которой надо найти значение функции?

Математика также дает на этот вопрос ответ.

Пусть требуется вычислить значение функции ex с точностью до eps, где eps любое положительное число (в частности, eps может быть равно 0,1, 0,01, 0,001, 0,0001 и т.д.).

Для вычисления ex с заданной степенью точности eps необходимо n членов ряда, тогда можно записать, что приблизительно

Оставшиеся члены ряда можно обозначить rn(x) и назвать остатком ряда или остаточным членом, или дополнительным членом.

Чему равен этот остаточный член? Совершенно очевидно, что он по абсолютной величине будет меньше или равен заданной точности вычисления, т.е.
числу eps,

  Поэтому по абсолютной величине остатка rn(x) можно определять точность вычисления ex

с помощью данного ряда.

Можно записать, что



Математика дает несколько формул дополнительного члена различных рядов. Для этого ряда дополнительный член может быть

записан в следующем виде:
, где
 зависит от n и находится в промежутке (0, 1), 0 <
 < 1.

При x>0 погрешность по этой формуле оценивается так:



В частности, при x = 1,

 где 


Подумайте, почему в числителе дроби дополнительного члена оказалось число 3?

С помощью этой формулы можно с большой степенью точности вычислить число e.

Пример 1. Составим программу вычисления числа e по этой формуле.

Прежде найдем рекуррентную формулу, связывающую предыдущий и последующий члены ряда.

Это сделать нетрудно:  
  отсюда получим, 

 





Алгоритм

1. Начало.

2. Установить переменные и их типы.

Переменная n будет участвовать в получении членов ряда и должна иметь целый тип (integer).

Переменная eps задает точность, с которой подсчитывается сумма ряда, т.е. значение числа e. Она имеет вещественный тип.

Нужна переменная, в которую будут последовательно заноситься члены ряда. Эту переменную обозначим u. Она будет иметь вещественный тип.

И, наконец, переменная e - результат вычисления, т.е. сумма ряда имеет вещественный тип.

3. Основная программа, в которой вычисляется сумма членов ряда.

1). Ввод пользователем точности, с которой должно быть вычислено значение e. Оно присваивается переменной eps.

2). Для вычисления суммы ряда организуем цикл с последующим условием. Перед началом цикла установим переменным n и u первоначальные значения, которые равны 1, а переменной e - значение 0 (ведь в переменной e будет накапливаться сумма членов ряда).

3). В цикле подсчитывается сумма, "вырабатывается" следующий член ряда и увеличивается значение n на единицу.

4). Условие в конце цикла должно связывать заданную точность вычисления - eps и остаток ряда
 Подумайте, как оно должно быть записано?

5). Вывод информации.



4. Конец.

Программа

Program

Problem1; {Вычисление числа e}

    uses WinCrt;

    var

        n                : integer;

        e, u, z, eps : real;

{----------------------------------------------------------------------------------------}

{ Функция вычисления порядка - кол-во знаков после запятой }

   Function t(eps : real) : integer;

         var

            k : integer;

         begin

            k := -1;

            repeat

                eps := eps*10;

                 k := k + 1

            until eps > 1;

            t := k

         end;

{----------------------------------------------------------------------------------------}

   begin

       write('Задайте точность вычисления '); readln(eps);

        e := 0; u := 1; n := 1;

       repeat

          e := e+u;

          u := u/n; n := n+1

       until 3*u <= eps;

       write('Число e равно ', e:3:t(eps)); 

      writeln(' с точность до ', eps:1:t(eps))

    end.

Задание 1

Вы уже знаете, что значения sinx можно вычислять с помощью следующего ряда:
 где погрешность оценивается легко:


Так как ряд знакочередующийся, то его остаток меньше по абсолютной величине последнего "отброшенного" члена, т. е. n + 1 - го.

Составьте программу вычисления значений sinx с заданной степенью точности eps для различных, вводимых пользователем значений x.

Пример 2. С помощью биномиального ряда, в который разлагается двучлен
 можно не только возводить двучлены в любую степень, но и извлекать корни с любым вещественным показателем.

Надо лишь помнить, что значения x принадлежат промежутку (-1, 1), на котором рассматривается биномиальный ряд.

Для примера посмотрим, как вычислить значение корня кубического из числа 10, т.е.
.

Прежде надо преобразовать подкоренное выражение к виду
 где  |x| <1. Для этого достаточно подобрать число, куб которого близок к числу 10. Таким числом является 2, так как 23

=8, и тогда
преобразуем так:  

 

Полученное выражение можно разложить в биномиальный ряд и вычислить с любой степенью точности.



Осталось выяснить вопрос относительно оценки точности вычисления с помощью дополнительного члена. Для этого снова обратимся к разложению и его остатку.

              

Этот ряд также знакочередующийся, значит остаток по абсолютной величине меньше абсолютной величины n + 1 - го члена.



Нетрудно найти рекуррентную формулу для получения членов этого ряда.

Она будет такой:                
 

Теперь составим программу для вычисления корней с помощью этого ряда.

 





Программа

Program Problem2;

    uses WinCrt;

    var

       n                          : integer;

       x, m, z, eps, u, b : real;

{----------------------------------------------------------------------------------------}

{ Функция вычисления порядка - кол-во знаков после запятой }

   Function t(eps : real) : integer;

         var

            k : integer;

         begin

            k := -1;

            repeat

                eps := eps*10;

                 k := k + 1

            until eps > 1;

            t := k

         end;

{----------------------------------------------------------------------------------------}

    begin

       write('Введите значение x, |x|<1 '); readln(x);

       write('Введите значение дробного показателя m '); readln(m);

       write('Задайте точность вычисления '); readln(eps);

       b := 1; u := 1; n := 1;

       repeat

          u := (m - n + 1)*x*u/n;

          b := b + u;

          n := n+1

       until abs(u) <= eps;

       writeln('Корень', 1/m:3:0, ' - й степени из ', (1 + x):3:t(eps));

       writeln(' равен ', b:3:t(eps),' с точностью до ', eps:3:t(eps))

    end.

Задание 2

Составьте программу, которая вычисляет значение числа
 с заданной степенью точности

при помощи ряда Лейбница:



 






Содержание раздела