- •1. Краткие теоретические сведения
- •1.1. Понятие ицвп
- •1.2. Алгоритмы вычисления сумм и произведений в цикле
- •А) суммы; б) произведения
- •1.3. Выбор типа общего члена суммы (произведения) при вычислении сумм и произведений в цикле
- •1.4. Вывод рекуррентных формул
- •А) вариант 1; б) вариант 2
- •1.4. Оператор цикла со спецификацией итерационного типа (типа условия)
- •А) выполнения оператора while ; б) функции примера 8.6
- •1.5. Уточнение корней уравнений
- •1.6. Использование оператора цикла do … while в ицвп
- •1.7. Использование операторов break и continue в ицвп
- •2. Задание
- •2.4.1.2. Пример
- •2.4.1.3. Программа
- •2.4.2.4. Тестирование
- •2.4.3. Задание 3. Использование рекуррентных формул в цикле
- •2.4.3.1. Условие задания
- •Варианты заданий
- •Варианты заданий
- •2.4.3.2. Пример
- •2.4.3.3. Программа
- •Варианты заданий
- •2.4.4.2. Пример
- •2.4.4.3. Программа
- •2.5.1.2. Пример программы
- •2.5.1.3. Программа
- •2.5.1.4. Тестирование
- •2.5.1.5. Типичные ошибки при выполнении работы
- •2.5.2. Задание 2. Накопление произведений в цикле
- •2.5.2.2. Пример 8.4
- •2.5.2.3. Программа
- •2.5.3.2. Пример для варианта 30
- •2.5.3.3. Программа
- •2.5.3.4. Тестирование
- •2.5.4. Задание 4. Вычисление значения функции с помощью разложения в ряд
- •2.5.4.1. Условие задания
- •Варианты заданий
- •2.5.4.2. Пример для варианта 30
- •2.5.4.3. Программа
- •2.5.4.4. Тестирование
- •3. Выводы
- •4. Требование к отчету
- •4. Краткие теоретические сведения.
- •Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Понятие ицвп 2
1.3. Выбор типа общего члена суммы (произведения) при вычислении сумм и произведений в цикле
Еще несколько замечаний относительно вычисления сумм и произведений в цикле. При нахождении сумм и произведений вида (8.5) и (8.6), соответственно, каждое слагаемое суммы (сомножитель произведения) зависит от параметра x и номера k, определяющего место этого слагаемого в сумме (сомножителя в произведении).
Обычно формула общего члена суммы (произведения) принадлежит к одному из следующих трёх типов:
В случае (а) для вычисления члена суммы (произведения) целесообразно использовать рекуррентные соотношения, то есть выражать последующий член суммы (произведения) через предыдущий. Это позволит существенно сократить объем вычислительной работы. Кроме того, вычисление члена суммы (произведения) по общей формуле в ряде случаев невозможно (например, из-за наличия к!.
В случае (б) применение рекуррентных соотношений нецелесообразно. Вычисления будут наиболее эффективными, если каждый член суммы (произведения) вычислять по общей формуле.
В случае (в) член суммы (произведения) целесообразно представить в виде двух сомножителей, один из которых вычисляется по рекуррентной формуле, а другой – непосредственно. Например, если , то полагаем и вычисляем рекуррентно , а 1/(4k+1) – непосредственно.
1.4. Вывод рекуррентных формул
При алгоритмизации ИЦВП для того, чтобы избежать повторения одних и тех же вычислений стремятся выразить (связать) выражения последующей итерации через выражения предыдущей итерации по определенной рекуррентной (итерационной) формуле.
Рекуррентная формула – формула, выражающая каждый член последовательности аk (k = 1, 2, … ) через р предыдущих членов вида:
аk = f(k, ak-1, аk-2, … , аk-р), k ≥ р + 1.
При помощи этой формулы, зная р первых членов последовательности, можно определить всю последовательность, то есть вычислить любой наперед заданный член последовательности. Этот прием оказывается полезным при программировании многих задач. Примерами рекуррентных формул являются уже приведенные формулы Ньютона (8.1) для вычисления приближенного значения квадратного корня из числа X и формулы для накопления сумм и произведений в цикле.
Организация многошагового вычислительного процесса при использовании одной и той же рекуррентной формулы позволяет сохранять предыдущие значения в полях памяти ЭВМ только до тех пор, пока не будут вычислены заменяющие их последующие значения, в том числе и окончательный результат. Это экономит память ЭВМ.
Использование рекурсии в алгоритмах таких задач, как вычисление сумм (произведений) конечного числа слагаемых (сомножителей) или бесконечных рядов, уточнение корней нелинейных уравнений, вычисление наибольшего (наименьшего) из множества значений, позволяет организовать алгоритмы циклической структуры и тем самым добиться сокращения записи алгоритма.
В некоторых же случаях разработанные вычислительные приемы (подобно формуле Горнера для определения значений степенных многочленов или рекуррентным формулам для вычисления значений ряда) представляют возможность максимально использовать циклические свойства формул и в целях сокращения объема вычислений.
Вывод рекуррентных формул для ИЦШ рассмотрим на конкретном примере.
Пример 8.7
Составить блок-схему алгоритма определения значения функции y = sin х для заданного х (0 ≤ х ≤ /4), воспользовавшись степенным разложением
с точностью
Вычисление функции y = sin x с помощью степенного ряда можно представить в виде
где Rn (х) – остаток ряда, представляющий ошибку (точность) вычислений.
Для того, чтобы вывести рекуррентную формулу, необходимо выразить k-й (Uk) и k-1 (Uk-1) члены рассматриваемого степенного ряда и определить их отношение (разность). Для ряда (8.11) k-й и k-1-й члены ряда задаются выражениями
а их отношение (разность)
Следовательно, рекуррентная (итерационная) формула для вычисления значений степенного ряда
Поскольку при k = 0, U = - , то k = 1, 2, … . Следовательно, с помощью полученного рекуррентного выражения можно определить члены, начиная не с k = 0, а только c k = 1. Тогда, чтобы определить первые члены ряда , необходимо задать начальные значения для первой итерации:
k = 1; Uk-1 = U0 = x.
Из полученной формулы (8.16) видно, что при определении значения (2к+1)!, входящего в k-й член ряда, используется значение (2к-1)!, вычисленное для получения Uk-1 . Если независимо произвести вычисление членов ряда, то приходится выполнять множество одинаковых действий по определению факториалов и возведению в степень переменной х.
Так как в промежутке (0, /4) ряд (8.11) знакочередующийся с монотонно убывающими по модулю членами, то для его остатка справедлива оценка
поэтому процесс суммирования членов ряда (8.11) может быть прекращен, как только очередной вычисленный член ряда Uk будет по модулю меньше допустимой погрешности . В противном случае вычисление очередного k-го члена ряда по итерационной формуле (8.16) продолжается.
Поскольку вычисление значения функции у = sin х сводится к накапливанию (суммированию) членов степенного ряда (8.11), то используется уже знакомая рекуррентная (итерационная) формула для накапливания суммы
Yk = Yk-1 + Uk (k =1, 2, ... ), (8.18)
при этом следует помнить правило накапливания сумм в цикле: переменной, с помощью которой будет накапливаться сумма, необходимо задать начальное значение нуль для первой итерации:
k = 1; Yk = Y0 =0 (либо Yk-1 = Y0 = х).
Таким образом, чтобы запрограммировать итерационные процессы, как правило, требуется знать:
– рекуррентную (итерационную) формулу;
– начальное значение нулевой (в ряде случаев первой) итерации;
– условие прекращения итерационного процесса (необходимо только в случае неизвестного заранее числа итераций (циклов)).
Для рассматриваемого нами примера имеем:
– рекуррентную (итерационную) формулу для вычисления членов ряда
– начальное значение для первой (нулевой) итерации формулы (8.20)
Yk-1 = Y0 = х (при k = 1) (8.20)
– условие прекращения итерационного процесса
– рекуррентную (итерационную) формулу для накопления суммы
Yk = Yk-1 + Uk (8.22)
– начальное значение для первой (нулевой) итерации но формуле (8.22)
Yk-1 = Y0 = 0 (при k =1) (8.23)
Формулы (8.19, 8.21, 8.22) справедливы для всех k = 1, 2, ..., n (при этом значение n заранее неизвестно).
В результате вычислений по формулам (8.19 8.23) число
приближенно дает искомый результат у = sin х.
С учетом формул (8.19 8.23) блок-схема ИЦВП вычисления значения функции у = sin х разложением в степенной ряд по двум вариантам показана на рис. 8.5.
Проанализируем действительность блок-схемы алгоритма на примере первого варианта, систематизировав основные самостоятельные этапы вычислений в виде таблицы 8.5.
Таблица 8.5
Основные этапы итерационного вычисления функции у = sin х
Значение k |
Значение U |
Вид соотношения |
Соблюдение соот- |
Вид оператора |
(блок 8) |
(блок 9) |
|U| ≥ (блок 6) |
ношения блока 6 |
y = y + U (блок 7) |
1 |
|
|
Да |
|
2 |
|
|
Да |
|
3 |
|
|
Да |
|
4 |
|
|
Нет (выход из цикла) |
|
Из таблицы 8.5 видно, что действия, задаваемые блок-схемой примера 8.7, соответствуют логике алгоритма вычисления суммы степенного ряда этого примера.
|
|
а) |
б) |
Рис. 8.5 Блок-схемы алгоритмов ИЦВП примера 8.5: