Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Особенностью итерационного цикла является то, что число повторений операторов тела цикла заранее неизвестно. Для его организации используется цикл типа ПОКА. Выход из итерационного цикла осуществляется в случае выполнения заданного условия.
На каждом шаге вычислений происходит последовательное приближение к искомому результату и проверка условия достижения последнего.
Задача 6.11. Составить алгоритм вычисления sin x с помощью ряда:
Y = sin x = x – x3 / 3! + x5 / 5! - … + (-1)n x 2n+1 / (2n+1)!
с заданной точностью e. Для данной знакочередующейся бесконечной суммы требуемая точность будет достигнута, когда очередное слагаемое станет по абсолютной величине меньше e.
Вычисление сумм — типичная циклическая задача. Особенность задачи 6.11. в том, что число повторений тела цикла, т.е. число слагаемых, заранее неизвестно. Поэтому выполнение цикла должно завершиться в момент достижения требуемой точности.
При составлении алгоритма нужно учесть, что очередное слагаемое можно вычислить используя значение предыдущего слагаемого. Обозначим очередное слагаемое аn, тогда
a0 =x a1 = - x3 /3! = -a0 * x2 /(2*3) (3!=1*2*3)
a2 = + x5 /5! = -a1 * x2 /(4 * 5) … (5!=1*2*3*4*5=3!*4*5)
an = - an-1 * x2 / (2*n*(2*n+1))
Коэффициент для пересчета слагаемого можно получить, если an разделить на an-1 и преобразовать формулу:
an = (-1)n x 2n+1 / (2n+1)! = -1 x 2n+1 / (2n-1)! = - x 2
an-1 (-1)n-1 x 2(n-1)+1 / (2(n-1)+1)! x 2n-1 / (2n+1)! 2n(2n+1)
Тест: Вход x=1.57 e=0.00001
Выход y= 1.000004 sin x = 1.000000
Решение задачи 6.11. на языке Turbo Pascal:
Program PR_sinX;
Var E, {заданная точность}
x, {заданный аргумент функции sin }
a, {очередной член ряда - слагаемое}
y: Real; {сумма ряда}
n: Integer; {номер итерации}
BEGIN
Write(’Введите аргумент функции: ’);
ReadLn(x);
Write(’Введите точность: ’);
ReadLn(E);
y:=0; a:=x; n:=0;
While abs(а) >=E do begin
y:=y + a;
n:=n + 1;
a:=-a*x*x/(2*n*(2*n+1));
end;
WriteLn(’О т в е т: y= ’, y);
WriteLn(’О т в е т: sin x= ’, sin(x));
ReadLn
END.
Пояснения к программе:
1) Оператор цикла
While abs(а) >=E do begin
….
end;
обеспечивает вычисление суммы ряда, пока модуль очередного слагаемого больше или равен заданной точности Е.
2) Перед выполнением цикла переменным присваиваются начальные значения:
начальное значение суммы y:=0;
начальный номер итерации n:=0;
значение первого слагаемого a:=x;
В теле цикла вычисляется сумма ряда y:=y + a;
увеличивается номер итерации n:=n + 1;
пересчитывается слагаемое a:=-a*x*x/(2*n*(2*n+1));
3) Оператор WriteLn(’О т в е т: y= ’, y); выводит значение суммы ряда y, а оператор WriteLn(’О т в е т: sin x= ’, sin(x)); - значение полученное с помощью стандартной функции sin (x). Если алгоритм вычисления верен, эти значения совпадут.
Дата публикования: 2015-01-14; Прочитано: 375 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!