Методическое пособие "Итерационные циклы. Вычисление суммы ряда"

Методическое пособие «Итерационные циклы. Вычисление суммы ряда»

(Колтакова Ирина Павловна, ГБОУ города Москвы «Лицей №1451»

Итерационные циклы


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

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

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

Математический метод итерации состоит в следующем. Пусть необходимо найти корень алгебраического уравнения F(x)=0. Это уравнение представляется в виде: x=φ(x).

При этом считается, что очередное приближение корня равно значение функции φ от приближения корня, полученного на предыдущем шаге: xi=φ(xi-1).

Если существует предел последовательности значений xi, то можно получить искомый корень xn.

Вычисления прекращаются, когда текущая погрешность вычислений δxi=xi-xi-1 становится по модулю меньше заданной величины ξ: |xi-xi-1|<ξ.

Вычислительный процесс сходится, если в интервале между приближенным значением корня x0 и корнем уравнения xn модуль первой производной функции φ(x) не превосходят единицу: |φ(x)|<1. Если же неравенство |φ(x)|<1 не выполняется, необходимо изменить вид уравнения x=φ(x). .

Смысл метода итерации можно пояснить и графически:















Представим левую и правую части уравнения x=φ(x) в виде двух функций Y=x и Y=φ(x). Исходя из уравнения x=φ(x) точка пересечения графиков функций Y=x и Y=φ(x) дает искомый корень уравнения ξ, который находится последовательным приближением в соответствии с формулой результат xi=φ(xi-1), где начальное приближение корня x=x0 может быть найдено, например графическим построением функции f(x).

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

Вначале находят текущую погрешность вычислений подстановкой xi=φ(xi-1) в δxi=xi-xi-1

δxi=Xi-Xi-1=φ(xi-1)-xi-1

Затем определяют значение нового приближения корня:

=Xi=xi-1+δxi

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










Вычисление суммы ряда

Задача сводится к нахождению суммы

S= U(1)+ U(2)+ U(3)+ … +U(n) = ∑U(n), сумма N от 1 до бесконечности.

каждое слагаемое является функцией от номера N, определяющего место этого слагаемого в сумме. А также может являться функцией одного или несколько дополнительных параметров, например:

S=1/2*3 + 2/3*4 + … + n/(n+1)(n+2) + …. = ∑n/(n+1)*(n+2),

или

S= X2 /1*2 + X4/3*4 + … + (-1)n-1 *X2n/(2n-1)*2n +…= ∑(-1)n+1 *X2n/(2n-1)*2n,

Сумма N от 1 до бесконечности.

В общем случае начальное значение номера члена ряда N может быть отличным от 1 (например, равным 0). Обозначив его через ν, получим S = U(n), сумма N от 1 до бесконечности.

Для вычисления суммы ряда используется прием накопления суммы: суммирование считается законченным при выполнении условия достижения заданной погрешности ξ: |U(n)|≤ ξ.

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

Процесс вычисления определяется рекуррентным соотношением

S(n)=S(n-1)+U(n). Для определения начального значения суммы перепишем S = U(n), сумма N от 1 до бесконечности, в виде: S=U(ν)+U(n).

Элемент U(ν) можно принять в качестве начального значения суммы, а параметр n в итерационном процессе будет принимать значения ν+1, ν+2, .

Общая схема алгоритма вычисления суммы приведена на рисунке. Поскольку в вычислениях по рекуррентной формуле одновременно участвуют лишь два значения S(n) и S(n-1), в схеме алгоритма вместо этих переменных используется переменная S. Значение S будет изменяться каждый раз при прибавлении очередного члена суммы. Справа от знака присваивания значение переменной соответствует предыдущему значению суммы S(n-1), слева – текущему S(n)

Обычно формула общего члена суммы принадлежит одному из следующих типов:


Решение: Вычисление суммы бесконечного ряда


На языке Бейсик

На языке Паскаль

Input x, eps

S=1: U=1: n=1

While abs(u) > eps

U=(-1)*u*x*x/((2*n-1)*2*n)

S=S+u

N=n+1

Wend

Print “n=”,n,”S=”,S

end

Var x, eps : real;
Begin
Read(x, eps); { ввод значений x, eps}

S:=1; U:=1; n:=1; {задание начальных значений}

While abs(u) > eps Do {проверка условия цикла}

Begin

U:=(-1)*u*x*x/((2*n-1)*2*n);{слагаемое суммы ряда}

S:=S+u; {наращивание суммы}

N:=n+1; {увеличение N на единицу}

End;

Write (‘n=’, n, ‘S=’,S); {вывод результата суммы}

End.

Задание 1. Разложение SinX ряда Тейлора без остаточного члена. Считать, что требуемая точность достигнута, если очередное слагаемое по модулю <ξ. Все последующие слагаемые можно уже не учитывать. Полученную сумму сравнивать с результатом обращения к соответствующей встроенной функции.

Решение: Вычислить с точностью ξ>0, вводимой с клавиатуры сумму ряда:


SinX=X-X3/3!+X5/5!–X7/7!+X9/9!-X11/11! +…+ (-1)n-1*X(2n-1)/(2n-1)!


Var I : Integer;
y, S, x, eps : real;
Begin
Writeln(‘Введите Х=’);
Read(x); { ввод значения x}
Writeln(‘Введите eps=’);
Readln(eps); { ввод значения eps}
{*******Задание начальных значений**********}

I:=1; {задание начального значения переменной i}

Y:=X; {задание начальных значений}

S:=X; {задание начальных значений}

While abs(Y) > eps Do {проверка условия цикла (с точностью)}

Begin

i := i + 1; {увеличение i на единицу}

Y:=(-1)*Y*X*X/((2*i-2)*(2*i-1)); {слагаемое суммы ряда}

S:=S+Y; {наращивание суммы}

End;

Writeln (‘Сумма ряда=’, S:6:4); {вывод результата суммы}

Writeln (‘SinX=’, Sin(X):6:4); {вывод результата SinX}

Readln;

End.




Номера операции цикла

Выполняемые опера ции

Значения

I

Y

S

Ввести значение Х:=

Ввести значение eps := 0.0001

0 (перед циклом)

Abs(Y) > eps



I := 1



Y0 := X



S :=X

1


I + 1 = 2

Y1 := (-1) *(X*Х)/(2*3) *Y0

S := S+ Y1

2


I + 1 = 3

Y2 := (-1) *(X*Х)/(4*5) *Y1

S := S+ Y2

3


I + 1 = 4

Y3 := (-1) *(X*Х)/(6*7) *Y2

S := S+ Y3

N


I + 1 = N

Вычисление общего члена ряда:

Yn := (-1) 2n-1*(X*Х)/((2*I-2)*(2*I-1))*Yn-1

S := S+ Yn



Задание 2. Разложение CosX ряда Тейлора без остаточного члена. Считать, что требуемая точность достигнута, если очередное слагаемое по модулю <ξ. Все последующие слагаемые можно уже не учитывать. Полученную сумму сравнивать с результатом обращения к соответствующей встроенной функции.

Решение: Вычислить с точностью ξ>0, вводимой с клавиатуры сумму ряда:


CosX = 1 – X2/2! + X4/4! – X6/6! +…+ (-1)n*X(2n)/(2n)!


Var I : Integer;
y, S, x, eps : real;
Begin
Writeln(‘Введите Х=’);
Read(x); { ввод значения x}
Writeln(‘Введите eps=’);
Readln(eps); { ввод значения eps}
{*******Задание начальных значений**********}

I:=0; {задание начального значения переменной i}

Y:=1; {задание начальных значений}

S:=1; {задание начальных значений}

While abs(Y) > eps Do {проверка условия цикла (с точностью)}

Begin

i := i + 2; {увеличение i на два}

Y:=(-1)*Y*X*X/(i*(i-1)); {слагаемое суммы ряда}

S:=S+Y; {наращивание суммы}

End;

Writeln (‘Сумма ряда=’, S:6:4); {вывод результата суммы}

Writeln (‘CosX=’, Cos(X):6:4); {вывод результата SinX}

Readln; {задержка на экране}

End.



Номера операции цикла

Выполняемые опера ции

Значения

I


Y

S

Ввести значение Х:=

Ввести значение eps := 0.0001

0 (перед циклом)

Abs(Y) > eps




I := 0




Y0 := 1




S :=1

1


I + 2 = 0+2 = 2

Y1 := (-1) *(X*Х)/(2*1) *Y0

S := S+ Y1

2


I + 2 = 2+2 = 4

Y2 := (-1) *(X*Х)/(4*3) *Y1

S := S+ Y2

3


I + 2= 4+2 = 6

Y3 := (-1) *(X*Х)/(6*5) *Y2

S := S+ Y3

N


I + 1 = N

Вычисление общего члена ряда:

Yn := (-1) 2n*(X*Х)/(I*(I-1)) *Yn-1

S := S+ Yn



Задание 3. Вычислить с N-ое приближение выражения

Arctg(X) = X – X2/2! + X4/4! – X6/6! +…+ (-1)nX(2n)/(2n)!

Считать, что требуемая точность достигнута, если очередное слагаемое по модулю <ξ. Все последующие слагаемые можно уже не учитывать.

Решение:


Var I : Integer;
y, S, x, eps : real;
Begin
Writeln(‘Введите Х=’);
Read(x); { ввод значения x}
Writeln(‘Введите eps=’);
Readln(eps); { ввод значения eps}
{*******Задание начальных значений**********}

I:=0; {задание начального значения переменной i}

Y:=X; {задание начальных значений}

S:=0; {задание начальных значений}

While abs(Y) > eps Do {проверка условия цикла (с точностью)}

Begin

i := i + 1; {увеличение i на единицу}

Y:=(-1)*Y*X*X/(2*i-1)); {слагаемое суммы ряда}

S:=S+Y; {наращивание суммы}

End;

Writeln (‘Сумма ряда=’, S:6:4); {вывод результата суммы}

Readln; {задержка на экране}

End.



Номера операции цикла

Выполняемые опера ции

Значения

I


Y

S

Ввести значение Х:=

Ввести значение eps := 0.0001

0 (перед циклом)

Abs(Y) > eps




I := 0




Y0 := X




S :=0

1


I + 1 = 2

Y1 := (-1) *(X*Х)/3 *Y0

S := S+ Y1

2


I + 1 = 3

Y2 := (-1) *(X*Х)/5 *Y1

S := S+ Y2

3


I + 1 = 4

Y3 := (-1) *(X*Х)/7 *Y2

S := S+ Y3

N


I + 1 = N

Вычисление общего члена ряда:

Yn := (-1) 2n-1 *(X*Х)/(2*I-1))*Yn-1

S := S+ Yn




Нравится материал? Поддержи автора!

Ещё документы из категории информатика:

X Код для использования на сайте:
Ширина блока px

Скопируйте этот код и вставьте себе на сайт

X

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

После чего кнопка «СКАЧАТЬ» станет доступной!

Кнопочки находятся чуть ниже. Спасибо!

Кнопки:

Скачать документ