ФУНКЦИИ
Нажмите для просмотра прикрепленного файла
Для аргумента X, изменяющегося от 0 с шагом 0.04 вычислить 20 значений функций:
Функцию f2(x) вычислить для ряда точностей - е=0.01, е=0.001, е=0.0001. Для указанных точностей определить количество N элементов ряда, суммируемых для достижения заданной точности. При составлении алгоритма использовать рекуррентные зависимости между соседними компонентами итераций (каждый член итерационного ряда считать через предыдущий член). Результаты расчетов свести в таблицу.
Вот тут есть пример, как подобное делается, но пример гораздо проще, без факториалов и степеней.
docs.google.com/Doc?docid=0AWCsLtJmOPr4ZGQ2dDlucnRfNWNwbTI3Mmc2&hl=en
Заранее спасибо.
program fun;
const
eps1 = 0.01;
eps2 = 0.001;
eps3 = 0.0001;
a = 0;
b = 0.04;
N = 20;
Var
z,stmn,k1, k2, k3, i, fac2_2, fac1, fac2: Integer;
fac1_1, mnoj,x, f1, f2_1, f2_2, f2_3, func1, func2, func3, step, step1, step2, slag : Real;
begin
x := a; {Начальное значение Х}
for i := 1 to N do
begin
f1:=ln(1+sqrt(1+sqr(x))); {значение функции f1}
{далее вычисляется f2}
{-----------Итерационный цикл для точности 10-2-------------}
k1:=0;
func1:=0;
repeat
inc(k1);
if (k1 mod 2)=0 then {вычисляю степень числа -1}
step:=1
else
step:=-1; {1 если степень четная и -1 если степень нечетная}
fac1_1:=1; { вычисляю факториал (2k-1)! }
fac1:=2*k1-1;
repeat
fac1_1:=fac1_1*fac1;
fac1:=fac1-1;
until fac1=0; {fac1_1 - мой полученный факториал}
step1:=exp(ln(2)*(2*k1)); {step1 - результат 2^2k}
fac2_2:=1; { вычисляю факториал k! }
fac2:=k1;
repeat
fac2_2:=fac2_2*fac2;
fac2:=fac2-1;
until fac2=0; {fac2_2 - мой полученный факториал}
step2:=fac2_2*fac2_2; {вычисляю степень (k!)^2}
stmn:=2*k1; {вычисляю множитель после дроби}
mnoj:=1;
for z:=1 to stmn do mnoj:=mnoj*x; {mnoj - мой множитель}
slag:=(step*fac1_1*mnoj)/(step1*step2);
func1:=func1+slag;
until abs(func1)<=eps1;
{-----------Итерационный цикл для точности 10-2-------------}
{-----------Итерационный цикл для точности 10-3-------------}
k2:=k1;
func2:=func1;
repeat
inc(k2);
if (k2 mod 2)=0 then {вычисляю степень числа -1}
step:=1
else
step:=-1; {1 если степень четная и -1 если степень нечетная}
fac1_1:=1; { вычисляю факториал (2k-1)! }
fac1:=2*k2-1;
repeat
fac1_1:=fac1_1*fac1;
fac1:=fac1-1;
until fac1=0; {fac1_1 - мой полученный факториал}
step1:=exp(ln(2)*(2*k2)); {step1 - результат 2^2k}
fac2_2:=1; { вычисляю факториал k! }
fac2:=k2;
repeat
fac2_2:=fac2_2*fac2;
fac2:=fac2-1;
until fac2=0; {fac2_2 - мой полученный факториал}
step2:=fac2_2*fac2_2; {вычисляю степень (к!)^2}
stmn:=2*k2; {вычисляю множитель после дроби}
mnoj:=1;
for z:=1 to stmn do mnoj:=mnoj*x; {mnoj - мой множитель}
slag:=(step*fac1_1*mnoj)/(step1*step2);
func2:=func2+slag;
until abs(func2)<=eps2;
{-----------Итерационный цикл для точности 10-3-------------}
{-----------Итерационный цикл для точности 10-4-------------}
k3:=k2;
func3:=func2;
repeat
inc(k3);
if (k3 mod 2)=0 then {вычисляю степень числа -1}
step:=1
else
step:=-1; {1 если степень четная и -1 если степень нечетная}
fac1_1:=1; { вычисляю факториал (2k-1)! }
fac1:=2*k3-1;
repeat
fac1_1:=fac1_1*fac1;
fac1:=fac1-1;
until fac1=0; {fac1_1 - мой полученный факториал}
step1:=exp(ln(2)*(2*k3)); {step1 - результат 2^2k}
fac2_2:=1; { вычисляю факториал k! }
fac2:=k3;
repeat
fac2_2:=fac2_2*fac2;
fac2:=fac2-1;
until fac2=0; {fac2_2 - мой полученный факториал}
step2:=fac2_2*fac2_2; {вычисляю степень (к!)^2}
stmn:=2*k3; {вычисляю множитель после дроби}
mnoj:=1;
for z:=1 to stmn do mnoj:=mnoj*x; {mnoj - мой множитель}
slag:=(step*fac1_1*mnoj)/(step1*step2);
func3:=func3+slag;
until abs(func3)<=eps3;
{-----------Итерационный цикл для точности 10-4-------------}
x:=x+b;
end;
end.