24.09.2008, 18:03
общий
это ответ
Здравствуйте, Dragonlio!
наверное вы все таки имели ввиду, ряд: y=2!/(x^2*3!)+3!/(x^4*4!)+4!/(x^6*5!)+.....
т.к. иначе ряд монотонно возрастает, т.к. числитель всегда больше единицы, а знаменатель всегда меньше
но даже этот ряд расходится и выполнить задание не возможно, доказательство в приложении.
и судя по доказательству у вас еще и условие должно быть не |x| < 1, а как раз таки наоборот |x| > 1
вот для этих исправленных начальных данных и представлена программа (под доказательством)
Приложение:
Доказательство:
Запишем общий член ряда: s(n) = (n+1)!/((x^(2*n) * (n+2)!)
s(n+1) (n+2)!/((x^(2*(n+1)) * (n+3)!)
---------- = -----------------------------------------------
s(n) (n+1)!/((x^(2*n) * (n+2)!)
(n+2)! * x^(2*n) * (n+2)!
= ---------------------------------------------
(n+1)! * x^(2*(n+1)) * (n+3)!
n + 2
= ----------------------------
x^2 * (n + 3)
n + 2
lim ---------------------------- =
n->inf x^2 * (n + 3)
1
= --------, что при |x| < 1
x^2
всегда больше единицы и согласно вытекающему из условия сходимости Коши признаку Даламбера этот ряд расходится
// программа с исправленным рядом и условием
#include <iostream>
#include <math.h>
float seriesSum(float x, float eps)
{
float sum = 0.f;
x *= x;
float xx = 1.f;
for(int i = 3; i < 1000000; ++i){
xx *= x;
float s = 1.f / (xx * (float)i);
sum += s;
if(s < eps)
break;
};
return sum;
}
int main(int argc, char* argv[])
{
float x = 0.f;
while(fabs(x) <= 1.f){
std::cout << "Input x, |x| > 1\n x = ";
std::cin >> x;
}
std::cout << "sum = " << seriesSum(x, 0.0001f);
return 0;
}