Нахождение суммы ряда

Для заданных значений и вычислить сумму ряда

, где .

с точностью . Суммирование ряда завершить, если модуль очередного члена ряда не превосходит . Предусмотреть ограничение количества слагаемых ряда – если их количество превосходит максимально допустимое, выдать сообщение 'Требуемая точность вычислений не достигнута'.

Форма будет иметь следующий вид (рис. 14):

Рис.14

При анализе данной задачи необходимо отметить, что каждый новый член ряда должен быть получен, опираясь на предыдущий или его часть. Рассмотрим соотношение элементов . В рассматриваемой задаче для , соответственно . Отсюда . Далее важно определиться с начальным значением (в нашем случае ) и проследить, чтобы порядок накопления суммы и значения счетчика ряда менялись в нужной последовательности. Чтобы осознать значимость следования операторов, попробуйте поменять в теле цикла местоположение оператора i:= i+1 - “поднимите” его в начало тела цикла, сразу после слова begin. Выполнив фрагмент программы пошагово, вы убедитесь, что общий член ряда будет видоизменен – уже при вы получите вместо необходимого .

Фрагмент кода:

{***********************************************************}

procedureTfrm_Z3.btnOKClick(Sender: TObject);

var sum, x, eps, a, mnog: extended;

i, m_dop: Word;

begin

// Присвоение значенийx, eps, m_dop

i:= 0; {количество членов ряда}

a:= x; { a - первый член ряда }

Sum:= a; { Sum - первая частичная сумма ряда }

while (abs(a) > eps) and (i<=m_dop) do

begin

mnog:= -x*x/(2*i+2)/(2*i+3);

a:= a*mnog;

Sum:= Sum+a;

i:= i+1;

end;

// вывод результатов в поле mem_Result в зависимости от накопленного переменной i значения m_dop

{***********************************************************}

Но для случая рядов, в которых в общем виде члена ряда нет рекуррентных выражений (например, факториала или возведения в степень), использование соотношения должно быть иным. Рассмотрим в качестве примера ряд В нем . Т.о., если , то при . Но при вычислении следующего () члена ряда происходит умножение и деление на одно и то же число, в данном случае 3. Поэтому целесообразно включить в рекуррентно накапливаемое очередное значение члена ряда лишь числитель. Соответствующий фрагмент кода может выглядеть так:

mnog:= -x*x;

while (abs(a) >eps) and (i<=m_dop) do

begin

a:= a*mnog;

Sum:= Sum+a/(2*i+1);

i:= i+1;

end;

Лабораторная работа №3
Вычисление суммы ряда




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