Помощь - Поиск - Пользователи - Календарь
Полная версия: вычисление суммы членов бесконечного числового ряда
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
dim0n
Собственно сама задача:
Составить программу вычисления суммы членов бесконечного числового ряда с погрешностью Е=10^-4. Определить количество членов ряда,сравнить полученное значение суммы со значением функции y=Ln(x),x=1.5.

формула суммы ряда фото: Нажмите для просмотра прикрепленного файла
мое творение:
 
Program primer;
{Ln(x)}
var
a:real; {n-й член ряда}
b:real; {ошибка}
n:integer; {число итераций}
s:real; {сумма ряда}
x:real; {аргумент}
begin
write('x=');
readln(x);
write('точность e=');
readln(e);
s:=0;
n:=1;
a:=x; {0й член}
while abs(a)>e do begin
s:=s+a;
n:=n+1;
a:=(x-1)*n*n/(n*x*n*n);
end;
writeln('сумма ряда=',s:6:5);
writeln('точность=',e:6:5);
writeln('число членов=',n);
writeln('Ln(',x:6:5,')=',Ln(x):6:5);
writeln('расхождение=',abs(Ln(x)-s):6:5);
readln;
end.



гуру гляньте пожалуйста, правильно ли я мыслю?
IUnknown
Формулу в порядок приведи, хотелось бы видеть, с правильной ли ты формулой работаешь вообще... Кстати, твоя программа компилироваться не будет - переменная E не описана... И еще: E - это не ошибка, а точность. Ошибка вычисляется по другому...
dim0n
исправил... wub.gif
IUnknown
В таком случае (раз ты выбрал эту формулу), я бы сделал так:

    s:=0;
n:=1;
a:=1;
while abs(a)>e do begin
a:=a * (x-1) / x;
s:=s+a/n;
n:=n+1;
end;
Сравни, за сколько итераций находится решение у тебя и за сколько - в моем варианте...

А вообще тут напрашивается использование repeat/until. Сделал действие, посчитал член последовательности, тут же сравнил его с погрешностью. Если не надо считать дальше - вышел, не начиная следующую итерацию цикла. Вот так я делал: http://volvo71.narod.ru/faq_folder/math.htm#taylor_ln
dim0n

А можете написать полностью программу от начала,до конца? Я просто не могу понять что и куда писать? Буду очень благодарен
IUnknown
Зачем от начала до конца? Вот основа:
    write('x='); readln(x);
write('e='); readln(e);
s:=0;
n:=1;
a:=1;
repeat
a := a * (x-1) / x;
s := s + a/n;
n := n+1;
until a / n < e;
, дальше выводи что тебе нужно... Сумма посчитана, номер члена, который меньше погрешности - тоже.
dim0n
блин,всё равно въехать не могу:-( я не знаю как сама задача решается и поэтому обратился на этот форум. Мне просто нужен код программы от program до end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.