C/C++

Суммирование рядов. Нужна помощь!!!

Составить две программы расчета конечной суммы. Число членов суммы вводится с клавиатуры.
Получить 3 значения при различных N. Результат сравнить с контрольным значением. Вычислить
погрешность. В первом столбце - вид суммы, во втором - контрольное значение.
Ряд Маклорена для косинуса:
cos(x)=Σ(n=0;∞)(-1)ⁿx²ⁿ/(2n)!=1-x²/2!+x⁴/4!-...
А у Вас в задании что за бред написан? Не то описка, не то специальные ошибочные сведения чтобы людей запутать. Если вычислять косинус правильно, то можно поступить так:
 #include  
#include
double Abs(double x)
{ return x < 0 ? - x : x; }
double Cos(double x)
{
double y = - x * x, p = 1., s = p, q = 0.;
while (Abs(p) > 1e-17)
{
q += 2.;
p *= y / (q * (q - 1.));
s += p;
}
return s;
}
int main()
{
double x, y;
while (true)
{
printf("x: ");
scanf("%lf", &x);
y = Cos(x);
printf("%19.16f, err = %e\n", y, y - cos(x));
}
}
Смотрим результаты:В общем получается, что для небольших аргументов х вычислять косинус путём разложения этой функции в ряд Маклорена достаточно эффективно, а ошибка получается порядка машинной точности для используемых вещественных чисел.
Для проверки формулы Σ(k=1;n)(2k-1)=n²
программу можно сделать такой:
 #include  
int main()
{
unsigned long long i, n, s, S;
for (;;)
{
scanf("%llu",&n);
s = 0;
S = n * n;
for (i = 1; i
Толя Афанасьев
Толя Афанасьев
66 572
Лучший ответ
Александр Потапов по поводу составления задания - писал не я)) задания предоставил преподаватель вуза :)
# рассчитываем суммы
sum1 = 0
for i in range(1, 11):
sum1 += 1/i

sum2 = sum_recursion(10)

# выводим результаты и сравниваем с контрольными значениями
print("Сумма ряда (n=10) с помощью цикла for:", sum1, "\tПогрешность:", abs(sum1-2.9289682539682538))
print("Сумма ряда (n=10) с помощью рекурсии:", sum2, "\tПогрешность:", abs(sum2-2.9289682539682538))

sum1 = 0
for i in range(1, 101):
sum1 += 1/i

sum2 = sum_recursion(100)

print("Сумма ряда (n=100) с помощью цикла for:", sum1, "\tПогрешность:", abs(sum1-5.187377517639621))
print("Сумма ряда (n=100) с помощью рекурсии:", sum2, "\tПогрешность:", abs(sum2-5.187377517639621))def sum_recursion(n):
if n == 1:
return 1
else:
return 1/n + sum_recursion(n-1)

n = int(input("Введите количество членов ряда: "))
sum2 = sum_recursion(n)
print("Сумма ряда:", sum2)# рассчитываем суммы
sum1 = 0
for i in range(1, 11):
sum1 += 1/i

sum2 = sum_recursion(10)

# выводим результаты и сравниваем с контрольными значениями
print("Сумма ряда (n=10) с помощью цикла for:", sum1, "\tПогрешность:", abs(sum1-2.9289682539682538))
print("Сумма ряда (n=10) с помощью рекурсии:", sum2, "\tПогрешность:", abs(sum2-2.9289682539682538))

sum1 = 0
for i in range(1, 101):
sum1 += 1/i

sum2 = sum_recursion(100)

print("Сумма ряда (n=100) с помощью цикла for:", sum1, "\tПогрешность:", abs(sum1-5.187377517639621))
print("Сумма ряда (n=100) с помощью рекурсии:", sum2, "\tПогрешность:", abs(sum2-5.187377517639621))def sum_recursion(n):
if n == 1:
return 1
else:
return 1/n + sum_recursion(n-1)

n = int(input("Введите количество членов ряда: "))
sum2 = sum_recursion(n)
print("Сумма ряда:", sum2)n = int(input("Введите количество членов ряда: "))
sum1 = 0
for i in range(1, n+1):
sum1 += 1/i
print("Сумма ряда:", sum1)