ГЛАВА 2. Суммирование рядов

Основной алгоритм при вычислении суммы ряда – это к значению объекта, содержащего текущее значения суммы, добавляется значение текущего члена суммы, причем начальное значение суммы полагается равным нулю. Например,

s=0; // Начальное значение суммы ряда

Цикл, где s+=a; // a - значение текущего члена ряда

Следует отметить, что значение текущего члена ряда может вычисляться на каждом шаге цикла независимо от значения предыдущего члена суммы или нужно выявить зависимость ai =f (ai -1). Например, если , n= 0, 1, …, то an =an -1× x 2/(2 n -1)/2 n. Для этого примера следует отметить ещё одну особенность: при n = 0 значение a 0=1, так как 0!=1, то есть слагаемое a 0 необходимо присвоить значению объекта s до выполнения цикла.

При вычислении сумм могут быть сформулированы следующие задачи [26].

Задано явное выражение функции, представленной данным рядом. Например, ряд

s= . (2.1)

представляет функцию

f (x) = cos(x). (2.2)

Задана точность приближения этой функции рядом s - это d, то есть | f (x) – s| < d. Необходимо выяснить, сколько членов ряда нужно просуммировать, чтобы была достигнута заданная точность. Проводя этот эксперимент необходимо помнить, что при малых значениях точности значение текущего слагаемого должно быть больше минимального допустимого значения данного типа. Провести исследование, как число суммируемых членов зависит от значения точности приближения функции.

Второй вариант постановки задачи – это задать значение числа суммируемых членов ряда и оценить погрешность представления функции f (x) конечной суммой этого ряда.

Листинг 2.1. Вычислить сумму ряда, заданного формулой (2.1), двумя способами и сравнить результат с функцией (2.2).

//L2_1.cpp

#include <stdio.h>

#include <math.h> // Библиотека математических функций

#include <float.h> // Библиотека предельных значений вещественных значений

#include <iostream>

using namespace std;

int main()

{

setlocale(LC_CTYPE,"russian");

int i,n,m,v;

double s,a,delta,f,x;

do

{

cout << "Введите число вычислений ";

cin >> m;

}while(m <= 0);

cout << "Введите x ";

cin >> x;

f = cos(x);

delta = 0.1;

cout << " delta n \n";

for(i=0; i<m; i++)

{

n = 1;

s = 1;

a = 1;

v = 1;

while(fabs(s-f) >= delta && fabs(a) > DBL_MIN)

{

a = a*x*x/(2*n-1)/(2*n);

v = -v;

s+ = v*a;

n++;

}

cout.width(7);

cout << delta;

cout.width(6);

cout << n << '\n';

delta/ = 10;

}

do

{

cout << "Введите предельное значение n ";

cin >> m;

}while(m < 0);

cout << " delta n \n";

if(n = 0)

{

delta = fabs(f-s);

cout.width(7);

cout << delta;

cout.width(6);

cout << n << '\n';

}

else

{

cout.precision(3);

for(n=0; n <= m; n++)

{

s = 1;

a = 1;

v = 1;

for(i=1; i<=n; i++)

{

a = a*x*x/(2*i-1)/(2*i);

v = -v;

s+ = v*a;

}

delta = fabs(f-s);

cout.width(11);

cout << delta;

cout.width(6);

cout << n << '\n';

}

}

return 0;

}

Результат выполнения программы листинга 2.1 представлен на рис. 2.1:

Рис. 2.1. Результат работы программы листинга 2.1


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: