Лабораторная работа 5.
Оглавление
1. Вычисление конечных сумм и произведений 2
2. Использование рекуррентных соотношений 2
3. Вычисление бесконечных сумм с заданной точностью 3
4. Задания. Вычисление сумм и произведений 4
5. Задания. Использование рекуррентных формул 5
6. Задания. Вычисление бесконечных сумм 9
7. Практикум 13
Вычисление конечных сумм и произведений
Вычисление конечных сумм и произведений - это наиболее часто встречающийся тип элементарных задач (см. также лабораторную работу 1). Пусть требуется вычислить сумму вида
Для вычисления суммы можно применить следующий алгоритм:
//Инициализация переменных. Подготовительные вычисления
. . .
s=0;
for(int k=1; k<=n; k++)
{
//Вычислить текущий член суммы ak
…
s+=ak;
}
Если при вычислении текущего слагаемого ak (внутри цикла) выполняются операции, не зависящие от k, эти вычисления целесообразно вынести из цикла for() и выполнить их один раз перед циклом. Например, пусть требуется вычислить сумму вида
Соответствующий код может быть следующим:
//Инициализация переменных. Подготовительные вычисления
double ak=0, sx=Math.Sin(Math.PI*x);
s=0;
for(int k=1; k<=n; k++)
{
//Вычислить текущий член суммы ak
ak=sx/(k*k);
s+=ak;
}
Использование рекуррентных соотношений
Вернемся к задаче из лабораторной работы 1. Пусть требуется вычислить сумму вида
Здесь вычисление текущего члена суммы можно значительно упростить (и уменьшить количество операций), если для вычисления текущего слагаемого построить и использовать рекуррентную формулу вида
Такую формулу можно получить следующим образом. Выпишем сначала выражения для к-го и к+1-го слагаемого
Поделив к+1-е слагаемое на к-е слагаемое, получим рекуррентную формулу
Причем при k=0 имеем
алгоритм вычисления суммы с использованием рекуррентной формулы можно записать в виде
//Инициализация переменных. Подготовительные вычисления
//Предполагается, что значения переменных x и n определены ранее
//ak первоначально полагаем равным a0
double ak=x, dx=x*x;
S=ak;
for(int k=1; k<=n; k++)
{
//Вычислить текущий член суммы ak, используя рекуррентную формулу
ak*=-dx/(2*k+2)/(2*k+3);
S+=ak;
}
Вычисление бесконечных сумм с заданной точностью
Пусть теперь требуется вычислить сумму вида
с заданной точностью >0 (некоторое малое число). Под этим подразумевается, что очередные слагаемые ak нужно добавлять к текущему значению s(x), пока они достаточно большие по модулю, т.е. удовлетворяют условию
|ak|>
Поскольку в этом случае число слагаемых заранее неизвестно, для суммирования можно использовать циклы типа while() или do-while(). Предыдущий алгоритм суммирования модифицируется следующим образом
//Инициализация переменных. Подготовительные вычисления
//Предполагается, что значения переменных x, n и точность eps
//определены ранее
//ak первоначально полагаем равным a0
double ak=x, dx=x*x;
int k=0;
S=0;
While(Math.Abs(ak)>eps)
{
S+=ak;
//Вычислить следующий член суммы ak, используя рекуррентную формулу
k++;
ak*=-dx/(2*k+2)/(2*k+3);
}
Задания. Вычисление сумм и произведений
Дано натуральное число nmax и вещественное число b. Найти, если оно существует, такое наименьшее n, меньшее nmax, что:
Если сумма nmax членов гармонического ряда меньше b, то необходимо выдать соответствующее сообщение.
Дано натуральное число n. Вычислить сумму первых n членов ряда:
При суммировании исключается каждый третий член.
Дано натуральное число n. Вычислить сумму первых 2n членов ряда:
Вычислить эту сумму четырьмя разными способами: последовательно слева направо, последовательно справа налево, слева направо, вычисляя вначале положительные члены ряда, затем отрицательные, справа налево, вычисляя вначале положительные члены ряда, затем отрицательные. Сравните результаты вычислений. Чем объясняется различие в последних цифрах при больших n? Как влияет на результат использование типов float или double для переменных, задающих суммы и текущий член при суммировании?
Дано натуральное число n. Вычислить сумму первых 2n членов ряда:
Дано натуральное число n. Вычислить произведение первых n членов ряда:
Даны натуральные числа n и k (n>=k). Вычислить биномиальный коэффициент :
Даны натуральные числа n и m (n>=m). Вычислить сумму биномиальных коэффициентов:
Следует напомнить, что определения функций суммы и произведения предполагают:
Даны натуральные числа n и m, вещественное x. Вычислить:
Даны натуральные числа n и m, вещественное x. Вычислить: