Скачать презентацию Программирование 1 Лекция 6 Часть 1 1 Кратко Скачать презентацию Программирование 1 Лекция 6 Часть 1 1 Кратко

L_06_1_Shema_iteratsii_Primery.ppt

  • Количество слайдов: 20

Программирование 1 Лекция 6 Часть 1 1. Кратко: доп. примеры из лекции 5 2. Программирование 1 Лекция 6 Часть 1 1. Кратко: доп. примеры из лекции 5 2. Схема итерации (продолжение). 3. Вычисления с вещественными числами: • Рекуррентные вычисления суммы ряда • Вычисления с вещественными числами и машинное эпсилон (в части 2) 06. 10. 2011 Схема итерации 2 1

Подытожим рассмотренные примеры: 06. 10. 2011 Схема итерации 2 2 Подытожим рассмотренные примеры: 06. 10. 2011 Схема итерации 2 2

Обобщение – схема итерации (iteratio – повторение) Многие вычисления укладываются в следующую схему: X Обобщение – схема итерации (iteratio – повторение) Многие вычисления укладываются в следующую схему: X = X 0; while (B(X)) { X = f (X) } * где X – множество переменных программы, X 0 – их начальные значения, B(X) – булевская функция (предикат) от переменных X, а f – некоторая функция преобразования переменных. В соответствии с семантикой цикла while–do предикат B(X) – условие продолжения цикла. Пояснить смысл слов «схема» и её интерпретация. 06. 10. 2011 Схема итерации 2 3

Например (1), при вычислении fact (n): X = (x, y), пояснить, почему не y*x Например (1), при вычислении fact (n): X = (x, y), пояснить, почему не y*x X 0 = (0, 1), B(X) (x < n), f: (x, y) (x + 1, y*(x+1)) (2) Если положить X = (u, v), u = a; v = b; X 0 = (a, b), while (v != 0) { B(X) (v <> 0), r =u%v; f: (u, v) (v, u mod v), u =v; то получим алгоритм Евклида v =r; } 06. 10. 2011 Схема итерации 2 4

Конец примера (схема и интерпретация) Вернемся к схеме итерации X = X 0; while Конец примера (схема и интерпретация) Вернемся к схеме итерации X = X 0; while (B(X)) { X = f (X) } * Все конкретные программы, порождаемые схемой *, обладают некоторыми общими свойствами. 06. 10. 2011 Схема итерации 2 5

Пусть цикл while-do в (*) завершился за n шагов и переменные x принимали последовательно Пусть цикл while-do в (*) завершился за n шагов и переменные x принимали последовательно значения x 0, x 1, …, xn – 1, xn, тогда последовательность {xi} (i [0; n]) обладает свойствами: 1. 2. 3. 4. xi = f (x i – 1) для всех i [1; n]; xi ≠ xj при i ≠ j и i, j [0; n]; B(xi) для всех i [0; n – 1]; not B(xn). 06. 10. 2011 Схема итерации 2 6

Замечания • Свойство 1: xi = f (x i – 1) для всех i Замечания • Свойство 1: xi = f (x i – 1) для всех i [1; n] - следует из семантики оператора присваивания x =f(x). • Свойство 2: xi ≠ xj при i ≠ j и i, j [0; n] - выражает необходимое условие завершения цикла. • Свойства 3 и 4 следуют из семантики конструкции цикла while. • Итерации заканчиваются, если существует n, соответствующее свойству 4: not B(xn). • При этом значение n является наименьшим из всех таких значений, что определяется свойством 3: B(xi) для всех i [0; n – 1] 06. 10. 2011 Схема итерации 2 7

Иногда эти свойства схемы * рассматривают как “Теорему о линейном просмотре”, поскольку такая программа Иногда эти свойства схемы * рассматривают как “Теорему о линейном просмотре”, поскольку такая программа осуществляет поиск среди значений x 0, xi = f(xi – 1), при i > 0 , значения xi с минимальным индексом i ≥ 0, при котором истинно not B(xi). x 0 06. 10. 2011 Схема итерации 2 xn 8

Резюме Очевидно, что схема * является слишком общей и в таком виде малоинтересна. Любой Резюме Очевидно, что схема * является слишком общей и в таком виде малоинтересна. Любой цикл while-do можно рассматривать как реализацию схемы *. Интерес представляют, как правило, частные случаи этой схемы. Однако и в таком виде она является подходящей формой программ, основанных на рекуррентных соотношениях: xi = f (xi – 1) 06. 10. 2011 Схема итерации 2 10

Рекомендации по разработке циклических программ, основанных на рекуррентных соотношениях 1. Сформулировать математическую модель задачи, Рекомендации по разработке циклических программ, основанных на рекуррентных соотношениях 1. Сформулировать математическую модель задачи, включающую математические объекты и рекуррентные соотношения, связывающие их значения на разных шагах вычислений. 2. Определить переменные, которые будут использоваться в программе и представлять математические объекты, введенные в п. 1. 3. Определить условие продолжения цикла while-do; записать инициализацию и тело цикла. 4. Записать для ключевых точек цикла утверждения, связывающие переменные программы и определенные ранее математические объекты. 06. 10. 2011 Схема итерации 2 11

Вычисления с вещественными числами: • • Рекуррентные вычисления суммы ряда Вычисления с вещественными числами Вычисления с вещественными числами: • • Рекуррентные вычисления суммы ряда Вычисления с вещественными числами и машинное эпсилон 06. 10. 2011 Схема итерации 2 12

Вещественные типы Название типа Длина, байт Количество значащих цифр Диапазон десятичного порядка float (C) Вещественные типы Название типа Длина, байт Количество значащих цифр Диапазон десятичного порядка float (C) 4 7, 8 – 45…+38 real (P) 6 11, 12 – 39…+38 double (C, P) 8 15, 16 – 324…+308 extended (P) 10 19, 20 – 4951…+4932 06. 10. 2011 Схема итерации 2 13

Рекуррентные вычисления суммы ряда Пусть задана последовательность членов ряда u 0, u 1, …, Рекуррентные вычисления суммы ряда Пусть задана последовательность членов ряда u 0, u 1, …, un …. Рассмотрим последовательность частичных сумм S 0, S 1, …, Sn, …, где Si = j = 0. . . i uj Если , то говорят, что ряд сходится и записывают это в виде S = j = 0. . . ∞ uj. 06. 10. 2011 Схема итерации 2 14

Задача приближенного вычисления суммы ряда Вычислить частичную суммы Sn, где номер последнего слагаемого n Задача приближенного вычисления суммы ряда Вычислить частичную суммы Sn, где номер последнего слагаемого n определяется дополнительным требованием. Например, при заданном (обычно малом) числе > 0 номер n таков, что n = min{i > 0 : |ui| ≤ }. Иначе говоря, для всех 0 i < n имеем |ui| > , а n номер последнего слагаемого в частичной сумме Sn и un . Соотношение |ui| > можно использовать как условие продолжения цикла вычисления суммы ряда. 06. 10. 2011 Схема итерации 2 15

Если слагаемые можно вычислить рекуррентно: ui = f (u i 1), то вычислить сумму Если слагаемые можно вычислить рекуррентно: ui = f (u i 1), то вычислить сумму Sn можно так: // i = 0 s = s 0; u = u 0; B(s, u, ) (|ui| > }) while (B(s, u, )) { // (s=S(i)) & (u=u(i)) & (i

Пример: Вычислить частичную сумму сходящегося бесконечного ряда разложения функции, f(x) = sin(x) = Σi Пример: Вычислить частичную сумму сходящегося бесконечного ряда разложения функции, f(x) = sin(x) = Σi = 0. . . ∞ (– 1)ix 2 i + 1/ (2 i + 1)!, x R. sin(x) = ui = (–x 2/(2 i + 1))) ui – 1; ui = (–x 2/di) ui – 1; d 0 = 0; dd 0 = – 2 06. 10. 2011 Схема итерации 2 17

sin 1. cpp // Вычисления по заданным x и Epsil i = 0; //. sin 1. cpp // Вычисления по заданным x и Epsil i = 0; //. . . dd = -2; d = 0; t = x; s = x; w = -x*x; //s=s(i) & t=t(i) & i=0 while (fabs(t) > epsil) { // s=s(i) & t=t(i) & d=d(i) & dd=dd(i) & i

Это старый вариант (см. вывод на экран) Лабораторная работа 3: Вычисление суммы ряда Тип: Это старый вариант (см. вывод на экран) Лабораторная работа 3: Вычисление суммы ряда Тип: Single. Epsilon = 1. 0 E-0006 x = 5. 0000000 Слагаемое t( 0)= 5. 0000000 E+0000 сумма S( 0)= 5. 0000000 E+0000 Слагаемое t( 1)= -2. 0833334 E+0001 сумма S( 1)= -1. 5833334 E+0001 Слагаемое t( 2)= 2. 6041668 E+0001 сумма S( 2)= 1. 0208334 E+0001 Слагаемое t( 3)= -1. 5500993 E+0001 сумма S( 3)= -5. 2926588 E+0000 Слагаемое t( 4)= 5. 3822889 E+0000 сумма S( 4)= 8. 9630127 E-0002 Слагаемое t( 5)= -1. 2232475 E+0000 сумма S( 5)= -1. 1336174 E+0000 Слагаемое t( 6)= 1. 9603325 E-0001 сумма S( 6)= -9. 3758416 E-0001 Слагаемое t( 7)= -2. 3337292 E-0002 сумма S( 7)= -9. 6092147 E-0001 Слагаемое t( 8)= 2. 1449716 E-0003 сумма S( 8)= -9. 5877647 E-0001 Слагаемое t( 9)= -1. 5679617 E-0004 сумма S( 9)= -9. 5893329 E-0001 Слагаемое t( 10)= 9. 3331055 E-0006 сумма S( 10)= -9. 5892394 E-0001 Слагаемое t( 11)= -4. 6112180 E-0007 сумма S( 11)= -9. 5892441 E-0001 Номер последнего слагаемого n= 11 Стандартная ф-ия Sin x =-9. 5892429 E-0001 Сумма S(x) =-9. 5892441 E-0001 Абсолютная погрешность r(x) = 1. 1920929 E-0007 Параметр точности Epsilon = 1. 0000000 E-0006 Замечание о форме записи вещественных чисел: -8. 9630127 E-0002 06. 10. 2011 Схема итерации 2 19

Эксперимент (!) sin 2. cpp x = 4*atan(1. ); const real pi=x; x = Эксперимент (!) sin 2. cpp x = 4*atan(1. ); const real pi=x; x = pi/6; j = 0; while (j<=5) { cout << “===" << " аргумент <" << j << "> = " << x << endl; ВЫЧИСЛЕНИЯ ПО АЛГОРИТМУ } cout << "S(x)=" << s << " : : sin x =" << sin(x) << " n= " << i << endl; x = x + 2. *pi; j++; Демонстрация (float / double, фоматирование) 06. 10. 2011 Схема итерации 2 20

КОНЕЦ ЛЕКЦИИ КОНЕЦ ЛЕКЦИИ 6. 1 06. 10. 2011 Схема итерации 2 21 КОНЕЦ ЛЕКЦИИ КОНЕЦ ЛЕКЦИИ 6. 1 06. 10. 2011 Схема итерации 2 21