- •Билет №8 Вычисления с вещественными числами и машинное эпсилон №8
- •Машинное эпсилон может быть вычислено с помощью следующей программы:
- •Билет №9 Общая схема итерации и №9 рекуррентные вычисления
- •Вычисления с целыми числами
- •Билет№10 Схема интерации. Вычисление частичной суммы (вещ числа) №10
- •Общая формулировка задания
- •Пример выполнения задания
- •Вопрос №12 . Основные правила аналитической верификации программ №12
- •Вопрос №14 Ограничивающая ф-ция оператора цикла.Примеры №14
- •Билет№15. Теорема о цикле, его инварианте и ограничивающей функции №15
- •Билет №17 Теорема о цикле repeat- until ,его инварианте и ограничивающей его ф-ции. Аннотирование цикла и понимание аннотации №17
- •Вопрос№18 Алгоритм анализа двоичной записи натурального числа в двоичной сист счисления №18
- •Последовательности и файлы
- •Индуктивные функции
- •Стационарные значения индуктивных функций
- •Индуктивные расширения функций
- •Примеры задач с индуктивными функциями
- •Кванторы и запись утверждений о массивах
- •Правила вывода для цикла с параметром
- •Примеры программ работы с массивами
- •Решение последовательными обменами
- •Задача перестановки сегментов разной длины (второе решение)
- •Задача перестановки сегментов разной длины (третье решение)
- •Билет№35 Задача о равнинах (с испол массива) №35
- •Линейный поиск
- •Оптимизация программы бинарного поиска
- •Билет№44 Массивы в качестве параметров:открытые массивы №44 Сведения о массивах в языке Паскаль
- •Билет№45 Двумерные (многомерные массивы). Индексация. Исполбзование процедур. Задача: о МиниМаксе(матрица как массив строк) №45 обработка двухмерных массивов
Общая формулировка задания
Заданы вещественные и. Пользуясь разложением известной -ции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) = = Σi = 0...∞ (–1)ix2i + 1/ (2i + 1)!, , т.е.D = [–, +].
Математическая модель: -рекуррентное соотношение для вычисл. очередного эл-та ряда: ui + 1 = (–x2/(2i + 2)(2i + 3))ui; В программе вычисляется знач. Выражения: –x2/(2i + 2)(2i + 3), которое также производится по рекуррентным соотношениям: ui = (–x2/di)ui – 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.