Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Проверка разложения функции в ряд

Автор: Tribunal 5.06.2006 17:22

задача в том,что нужно вычислить с заданной погрешностью вычислить
правую и левую части равенства a^x=1+x*lna/1!+(x*lna)^2/2!+...+(x*lna)^n/n!+...,
то есть численно убедиться в его справедливости.+вывести кол-во интеграций,
то бишь скорость сходимости.
вот то,что получилось...не могу понять,где ошибка...(деление на 0)

var
f:integer;
x,i,k,kol:byte;
eps,a,ri,le,s,e:real;
begin
writeln('Davayte proverim razlojenie funkcii a^x...');
write('Vvedite znachenie osnovaniya stepeni a=');read(a);
write('Vvedite znachenie argumenta x=');read(x);
write('Vvedite dopustimuyu pogreshnost eps=');read(eps);

le:=1;
for i:=1 to x do
le:=le*a;
writeln('Levaya chast=',le);

ri:=1;k:=1;kol:=0;
repeat
s:=1;f:=1;
for i:=1 to k do
begin
s:=s*x*ln(a);
f:=f*i;
end;
s:=s/f;
ri:=ri+s;
inc(kol);
e:=abs(le-ri);
inc(k);
until e<=eps;


writeln('Pravaya chast=',ri);
writeln('Kol-vo integracii = ',kol);

end.

Автор: volvo 5.06.2006 17:47

Цитата
не могу понять,где ошибка...(деление на 0)
Деление на 0 происходит потому, что F переполняется (даже LongInt "держит" только факториал 14, не говоря уже про Integer), и естественно, в F появляется 0... А ты на F делишь...

Именно поэтому, когда производится разложение в ряд желательно не вычислять факториал на каждом шаге, а домножать очередной элемент, как я сделал. Посмотри...
var
x,i,k,kol:byte;
next, eps,a,ri,le,s,e:real;
begin
writeln('Davayte proverim razlojenie funkcii a^x...');
write('Vvedite znachenie osnovaniya stepeni a=');read(a);
write('Vvedite znachenie argumenta x=');read(x);
write('Vvedite dopustimuyu pogreshnost eps=');read(eps);

le:=1;
for i:=1 to x do le:=le*a;
writeln('Levaya chast=',le:10:6);

ri:=1; k:=1; kol:=0;
next := 1;
repeat
next := next * (x * ln(a)) / k;
ri := ri + next;
inc(kol);
e:=abs(le-ri);
inc(k);
until e < eps;

writeln('Pravaya chast=',ri:10:6);
writeln('Kol-vo integracii = ',kol);
end.

Автор: Tribunal 5.06.2006 17:58

всё ясно)
большое спасибо