Проект закрыт, ничего заказать и купить нельзя! Существует лишь для ностальгии создателя!

Сумма бесконечного ряда - Итерационные циклы

Pascal 2016-04-18 в 01:36 2005

Среди циклов с неизвестным числом повторений большое место занимают циклы, в которых в процессе повторений большое место занимают циклы, в которых в процессе повторения тела цикла образуется последовательность значений a1 , a2 , ... , an , ... , сходящихся к некоторому пределу a.

Каждое новое значение an в такой последовательности является более точным приближением к исходному результату а.

Циклы, реализующие такую последовательность приближений/итераций, называются итерационными.

В итерационных циклах условие окончания цикла основывается на свойстве безграничного приближения значений an к искомому пределу с увеличением n. Итерационный цикл заканчивается, если для некоторого значения n выполняется условие:

|an - an - 1|<=

, где - допустимая погрешность вычислений. При этом результат отождествляют со значением an , то есть считают, что an = a.

Пример

Вычслить значение функции y = cos(x) с погрешностью, используя разложение косинуса в ряд:

Накопление суммы производим по рекуррентной формуле:

Здесь общий вид слагаемого суммы может быть записан в следующей форме:

Для сокращения объема вычислений его целесообразно вычислять по формуле

Блок-схема

Тогда текущий член ряда будет вычисляться по формуле:

Начальное значение t0(x) находим подстановкой в формулу для общего члена tn(x) значения n=0

:

Начальное значение суммы можно принять равным первому члену ряда, то есть S0=1. Учитывая, что значения текущего члена ряда и суммы при n = 0 уже определены, номер члена ряда n примем равным единице.

На блок-схеме приведен алгоритм вычисления бесконечного ряда с заданной погрешностью eps.

Программа вычисления такой суммы имеет вид:


program laba8_v2;
Var {Описание переменных}
 eps, s, t, x, u: real;
 n: integer;
Begin
 Write('Vvedite x = ');
 Readln(x); {Ввод х}
 Write('Vvedite eps = ');
 Readln(eps); {Ввод погрешности}
 Writeln('Dlya x = ', x:6:2, ' s pogreshnostiu = ', eps); {Вывод введеной информации}
 u := 1; {Расчет нулевого слагаемого}
 s := u; {Присваение сумме значения нулевого слагаемого}
 n := 1; {Так как мы расчитали нулевое слагаемое, то выбрасываем иго из цикла}
 while abs(u) > eps do {Как только слогаемое становиться меньше погрешности завершаем цикл}
 begin
 t := -x*x/(2*n*(2*n-1)); {Расчитываем фи}
 u := u * t; {Умножаем фи на предыдущее слагаемое, таким образом получаем текущее слагаемое}
 s := s + u; {Прибавляем текущее слагаемое к сумме}
 n := n + 1; {Прибавляем к n единицу}
 end;
 Writeln('s = ', s:12:9, ' za ', n - 1, ' shagov'); {Выводим результат}
 Writeln('Kontrolnoe znachenie: ', cos(x)); {Выводим контрольное значение для проверки}
 Readln; {Задержка экрана}
End.

Статьи по программированию от спонсора данной статьи Eduget

Не можете справиться с заданием?
Специалисты нашего проекта помогут вам справиться с любыми заданиями по программированию!
Чтобы оставлять комментарии, необходимо войти или зарегистрироваться