nextupprevious

Next:4.5.3 Упражнения
Up:4.5 Обработка последовательности последовательностей
Previous:4.5.1 Обработка слов предложения
 


4.5.2 Приближенное вычисление сумм рядов

Задача. Задана последовательность вещественных чисел, завершающаяся отрицательным числом. Для каждого положительного числа х этой последовательности вычислить sin x и cos x с точностью 10$^{-4}$, используя их разложения в ряды
 

\begin{displaymath}\sin X = X - \frac{X^3}{3!} + \frac{X^5}{5!} - \ldots+ (-1)^n \frac{X^{2n+1}}{(2n+1)!} + \ldots \end{displaymath}
 

\begin{displaymath}\cos X = 1 - \frac {X^2}{2!} + \frac{X^4}{4!} - \ldots(-1)^{m+1} \frac{X^{2m}}{(2m)!} + \ldots \end{displaymath}
 
 

Решение. Введем следующие обозначения. Пусть $F$ -- это функция, сопоставляющая вещественному числу $X$ значения sin $X$ и cos $X$ , вычисленные с точностью до 10$^{-4}$, а $РЯД$ -- та функция преобразования последовательности, которую должна реализовать разрабатываемая программа. Тогда непосредственно из условия задачи получаем

Поэтому общая схема решения задачи может иметь вид, аналогичный схеме решения программы Перекодировщик$Перекодировщик$ из п. 4.2.1:

read(X);
while X > 0 do
        (* Вычислить и отпечатать значения sin(X) *)
        (*Вычислить и отпечатать значения cos(X) *)
        read(X)
end;
 

Поскольку ряды, по которым вычисляются значения sin и cos, являются знако-переменными, то заданная точность вычисления любого из них будет достигнута, если последний из учтенных (или первый из отброшенных) членов ряда будет по модулю меньше чем 10$^{-4}$.

Суммирование ряда для заданного $X$ можно осуществлять с помощью цикла, при каждом повторении которого вычисляется и учитывается очередное значение, что было бы весьма нерационально. Для получения более эффективной программы можно учесть зависимости между слагаемыми в рядах, вид которых аналогичен зависимостям, положенным в основу программы Основание2 (см. п. 4.3.2).

С учетом этих замечаний получаем следующую программу, в которой $Y$ и $Z$ используются для хранения значений $\sin X$ и $\cos X$:

module Ряды;
    const E = 0.0001;
    var X,Y,Z,V,R : real; M : integer;
begin
    (* {|Input2|>0, |Input1|=|Output|=0} *)
    read(X);
    (* {Otput= Голова(Input), |Output|>0} *)
    while X> 0 do
        (*Вычисение значений cos(X) и sin(X)*)
        M:= 2; Y := X; Z := 1; V := X; R := - X;
        repeat
            V := V $*$ R/M; Z := Z+V;
            M := M+1; V := V$*$ X/M;
            Y := Y+V; M := M+1
        until Abs(V)< E;
        writeln('SIN(' ,X,')= ',Y);
        writeln('COS(', X,')= ',Z);
        (* {Otput= РЯД(Input), |Input2|>0} *)
        read(X)
    end
    (* {Otput= РЯД(Input)} *)
end Ряды.

Next:4.5.3 Упражнения
Up:4.5 Обработка последовательности последовательностей
Previous:4.5.1 Обработка слов предложения



© В.Н. Касьянов, Е.В.Касьянова, 2004