Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпаргалка по программированию.DOC
Скачиваний:
50
Добавлен:
01.05.2014
Размер:
1.9 Mб
Скачать

Общая формулировка задания

Заданы вещественные и. Пользуясь разложением известной -цииf(x) в бесконечный ряд f(x) = Σi = 0...∞ ui(x) вычислить частичную сумму Sn(x) = Σi = 0...n ui(x), номер n последнего слагаемого частичной суммы, абсолютную и относительную ошибки приближения значения функцииf(x) частичной суммой: an(x) = |f(x) – Sn(x)|; rn(x) = an(x) / |f(x)|.

Пример выполнения задания

Пример(sin) Вычислить частичную сумму сходящегося бесконечного ряда разложения ф-ции , f(x) =sin(x) = = Σ= 0...∞ (–1)ix2+ 1/ (2+ 1)!, , т.е.= [–, +].

Математическая модель: -рекуррентное соотношение для вычисл. очередного эл-та ряда: ui + 1 = (–x2/(2i + 2)(2i + 3))ui; В программе вычисляется знач. Выражения:x2/(2+ 2)(2i + 3), которое также производится по рекуррентным соотношениям: ui = (–x2/di)u– 1; ; ; ; ; d0 = 0; dd0 = –2.

  • , ,;

  • суммирование следует прекратить при .

{ Вычисление суммы ряда }

{ Для заданных epsil : (0..1) и x вычисляется

S(n;x) = Sum (i:0..n) u(i;x),

где u(i;x) = (-)^i* x^(2i+1)/(2i+1)!

и n = Min [ k>=0 : Abs(u(k;x)) <= epsil ] }

type MyReal = Single;

var x, {аргумент }

epsil, {точность }

s, {частичная сумма }

u, {слагаемое}

ss, r,

w : MyReal;

p : Byte; {параметр точности для epsil}

d,dd : Integer;

i : Integer;

{Далее при записи утверждений использованы обозначения:}

s(i) = Sum (j:0..i) u(j) ,

u(j) = (-)^j * x^(2j+1)/(2j+1)! .

Вычисления производятся по рекуррентным соотношениям

u(i) = u(i-1)*(-x*x)/d(i);

d(i) = 2i(2i+1); d(i) = d(i-1) + dd(i);

dd(i)= 8i-2; dd(i) = dd(i-1) + 8; }

{============================================ }

begin

Assign(fout,'sinSngl2.dat');

Rewrite(fout);

WriteLn(fout, Вычисление суммы ряда');

WriteLn(' Вычисление суммы ряда ');

Write(fout,'Тип: Single. ');

Write( 'Тип: Single. ');

Write('Epsilon = 10^(-p); Введите p (p>0):'); ReadLn(p);

epsil := exp(-p*ln(10.0)); {Epsil = 10^(-p)}

Write(fout,'Epsilon = ',epsil:10);

WriteLn( 'Epsilon = ',epsil:10);

Write('Введите значение аргумента x=');

ReadLn(x);

Write('Введено значение аргумента x=',x :10:7,' );

Writeln(fout,' x = ',x:10:7);

ReadLn;

{ ------------------------------ }

{Вычисления по заданным x и Epsil:}

i := 0;

dd := -2; d := 0;

u := x; s := x;

w := -x*x;

{s=s(i) & u=u(i) & i=0}

WriteLn( 'Слагаемое t(',i:3,')= ',u:16,' сумма S(',i:3,')= ',s :16 );

WriteLn(fout, 'Слагаемое u(',i:3,')= ',u:16,'сумма S(',i:3,')= ',s :16 );

{ ------------------------------ }

while Abs(u) > epsil do

begin { s=s(i) & u=u(i) & d=d(i) & dd=dd(i) & i<n }

i := i + 1;

dd := dd + 8;

d := d + dd;

u := u * w / d;

s := s + u;

WriteLn( 'Слагаемое u(',i:3,')= ',u:16,' сумма S(',i:3,')= ',s :16 );

WriteLn(fout, 'Слагаемое u(',i:3,')= ',u:16,' сумма S(',i:3,')= ',s :16 );

{ s=s(i) & u=u(i) & d=d(i) & dd=dd(i) & i<=n }

end {while};

{ s = s(n) & u=u(n) }

{Вывод результатов:}

WriteLn(fout,'Номер последнего слагаемого n=',i:4);

WriteLn( 'Номер последнего слагаемого n=',i:4);

ss:=Sin(x);

WriteLn(fout,'Стандартная ф-ия Sin x =',ss:16);

WriteLn( 'Стандартная ф-ия Sin x =',ss:16);

WriteLn(fout,'Сумма S(x) =',s :16);

WriteLn( 'Сумма S(x) =',s :16);

r:=abs(s-ss);

WriteLn(fout,'Абсолютная погрешность r(x) =',r :16);

WriteLn( 'Абсолютная погрешность r(x) =',r :16);

WriteLn(fout,'Параметр точности Epsilon =',epsil :16);

WriteLn( 'Параметр точности Epsilon =',epsil :16);

Close(fout);

end.