
-
Расчет ряда
Пример программы расчета значения суммы заданного количества n членов ряда разложения функции cos x на интервале 0 ≤ x ≤ π/2 приведен ниже.
#include "stdafx.h"
#include <conio.h>
#include <math.h>
#include <locale.h>
int _tmain(int argc, _TCHAR* argv[])
{
/* Программа расчета значений суммы n членов ряда разложения
функции cos x на интервале 0 ? x ? pi/2 */
int
i; /*Номер члена ряда*/
int
n; /*Количество членов ряда*/
float
rcos; /*Сумма членов ряда, значение функции cos x*/
float
ai; /*Значение i-го члена ряда*/
float
x; /*Значение аргумента функции*/
int
n; /*Значение степени x*/
setlocale( LC_ALL, "russian" ); //Русский язык
printf("Программа расчета значений суммы членов \n");
printf("ряда разложения функции cos x на \n");
printf("интервале [0, pi/2]\n");
printf("\n");
printf("Введите значение аргумета функции\n");
scanf("%f", &x);
printf("Введите значение количества членов ряда\n");
scanf("%d", &n);
printf("Значения членов ряда разложения функции cos x:\n");
rcos = 0; /* Начальное значение суммы членов ряда */
ai = 1.0; /* Первый (нулевой) член */
n = 0; /* Подготовка к расчету ряда */
/* Задание i – номера члена ряда */
for (i = 0; i <= n - 1; i++)
{
/* Печать i-го члена */
printf("%4d) %10.6f\n", i, ai);
rcos = rcos + ai; /* Увеличение суммы на очередной член */
/* Подготовка следующей итерации */
/* Расчет значение степени x */
n = n + 2; /* Арифметическая прогрессия 2,4,6,… */
/* Расчет значения следующего члена */
ai = -ai * x * x / nFact);
}
printf("Рассчитанное значение cos %f = %f\n", x, rcos);
printf("Эталонное значение cos %f = %f\n", x, cos(x));
/*Завершение выполнения программы*/
printf("\nНажмите любую клавишу\n");
_getch();
return 0;
}
Для избегания переполнения машинного числа при расчетах факториала с большими значениями аргумента, вместо прямого расчета факториала использован прием расчета следующего значения члена ряда из значения предыдущего члена ряда. Этот же прием позволил избежать расчета высоких степеней x.
Наглядный тест составьте самостоятельно.