Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Нахождение суммы рядаСтр 1 из 2Следующая ⇒
Для заданных значений и вычислить сумму ряда , где . с точностью . Суммирование ряда завершить, если модуль очередного члена ряда не превосходит . Предусмотреть ограничение количества слагаемых ряда – если их количество превосходит максимально допустимое, выдать сообщение 'Требуемая точность вычислений не достигнута'. Форма будет иметь следующий вид (рис. 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;
|