Консультация № 169992
29.06.2009, 10:34
0.00 руб.
0 8 2
Составить программу вычисления суммы членов бесконечного числового ряда с погрешностью
. Определить количество членов ряда, сравнить полученное значение суммы со значением функции y=arctg(x), lxl<1

Обсуждение

Неизвестный
29.06.2009, 10:37
общий
Здравствуйте, если кто-то может решить - то пожалуйста помогите с решением.
давно
Академик
320937
2216
29.06.2009, 13:06
общий
29.06.2009, 14:40
это ответ
Здравствуйте, qwer1235.

Ответ в приложении


Приложение:
program p169992;
{ arctg(x) }
var
a: real; { n-й член ряда }
e: real; { ошибка }
n: integer; { число итераций }
s: real; { сумма ряда }
x: real; { аргумент }
begin
write('x=');
readln(x);

write( 'oshibka e=');
readln( e );

s := 0;
n := 0;
a := x; {0й член}
while abs(a)>e do begin
s := s+a;
n := n+1;
a := -a*x*x* (2n-1)/(2*n+1);
end;

writeln('summa ryada =',s: 6: 5);
writeln('oshibka =',e: 6: 5);
writeln('chislo chlenov =', n);
writeln('ArcTan(',x:6:5,') =', ArcTan( x ):6:5);
writeln('rashogdenie =', abs(ArcTan(x)-s):6:5);
readln;
end.
Неизвестный
29.06.2009, 14:03
общий
29.06.2009, 14:40
это ответ
Здравствуйте, qwer1235.

Программа в приложении

Приложение:
{
Составить программу вычисления суммы членов
бесконечного числового ряда с погрешностью 10^(-4).
Определить количество членов ряда,
сравнить полученное значение суммы со значением
функции y = arctg(x), |x| < 1
Заданный ряд:
S = SUMM /n=0..+%/ ((-1)^n*(x^(2n+1))/(2n+1))
% - бесконечность
}

Program InfSeries;
(* Uses Crt; *)
{
Остаток знакопеременного ряда определяется как
абсолютное значение первого отброшенного члена:
S = Sn + Rn: |Rn| <= |a(n+1)|
Требуется, чтобы остаток был меньше погрешности:
|Rn| <= E
Заменяя |Rn| на заведомо не меньшее значение, получаем:
|Rn| <= |a(n+1)| <= E - условие прекращения итераций

Для заданной последовательности определим переход
к следующему элементу:
a(n) = a(n-1) * k(n) <=> k(n) = a(n)/a(n-1)
k(n) = (((-1)^n*(x^(2n+1))/(2n+1)) /
(((-1^(n-1)*(x^(2n-1)))/(2n-1))/(2n-1)) =
-1 * x^2 * (2n-1)/(2n+1) =
-x^2 * (2n-1)/(2n+1)
}

Const
E = 1E-4;

Function GetSum (x : Double; E : Double; var n : Word; var r : Double) : Double;
var
x2 : Double; { значение x^2 (постоянное значение внутри цикла) }
a : Double; { текущий элемент последовательности }
s : Double; { сумма ряда }

begin
s := 0;
a := x;
n := 0;
x2 := sqr (x);
Repeat
s := s + a;
Inc (n);
a := -a * x2 * (2n-1) / (2*n+1);
Until abs (a) <= E;

r := a;
GetSum := s;
end;

Procedure ClrScr; assembler;
asm
mov ax, 3
int 10h
end;

Var
x : Double;
s : Double;
r : Double;
n : Word;

f : Double;

ch : Char;

Begin
Repeat
Repeat
ClrScr;

write ('Введите значение аргумента (|x| < 1): '); readln (x);
Until abs (x) < 1;

s := GetSum (x, E, n, r);

writeln;
writeln ('Сумма ряда: ', s:10:8);
writeln ('Количество членов ряда: ', n);
writeln ('Разность ряда не более ', r:10:8, ' по модулю');
writeln;

f := arctan (x);
writeln ('Значение функции: ', f:10:8);
writeln ('Погрешность: ', abs (f - s):10:8);
writeln;
writeln;

write ('Еще один аргумент [Y/N]? '); readln (ch);
Until ch in ['N', 'n', 'Н', 'н'];
End.
5
давно
Старший Модератор
31795
6196
29.06.2009, 14:05
общий
qwer1235:
Смотрите исправленный ответ в приложении.

leonid59:
Откуда Вы взяли такой ряд: a := -a*x*x*(2*n-1)/(2*n+1);
Смотрите Википедию.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
29.06.2009, 14:16
общий
_Ayl_:
Вы программу проверяли?
Откуда Вы взяли такую формулу ряда?

a := -{=(-1)n}a * x2{=x(2*n+1)} * (2*n-1){ } / (2*n+1);

Переписали с предыдущего ответа с такойже ошибкой (2*n-1)?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
29.06.2009, 14:42
общий
Зенченко Константин Николаевич:
В комментарии все написано
На каждом шаге член ряда определяется не по формуле члена ряда, а как приращение предыдущего.
Если разделить a[sub]n[/sub] на a[sub]n-1[/sub], то получится выражение x[sup]2[/sup]*(2n-1)/(2n+1)
Что и написано в программе.
Поэтому просьба вернуть исходный текст как мой, так и эксперта leonid59, а в дальнейшем очень аккуратно подходить к правкам ответов.
Хотя бы прочитать комментарии к выполняемым действиям.
давно
Старший Модератор
31795
6196
29.06.2009, 14:47
общий
_Ayl_:
Разобрался, вернул.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
29.06.2009, 15:54
общий
Спасибо Огромное Вам всем ув спецы )))))))) Вы меня просто спасли ))
Форма ответа