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


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


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

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

Функциональные ряды
 где
Функциональные ряды
 (члены ряда) - суть функции одного и того же аргумента 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

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

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

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


 






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