Общий член ряда

  • Автор темы Truymf
  • Дата начала
Статус
Закрыто для дальнейших ответов.
T

Truymf

Гость
#1
задан общий член ряда:
a[sub]n[/sub] = (-1)[sup](n-1)[/sup]/n[sup]n[/sup]
Я пишу программу, которая будет находить любой член ряда с заданной точностью "eps" по рекуррентной формуле : \\
Из
a[sub]n+1[/sub] = (-1)[sup]n[/sup]/(n+1)[sup](n+1)[/sup] ,
a[sub](n+1)[/sub]/a[sub]n[/sub] = -n[sup]n[/sup]/(n+1)[sup](n+1)[/sup] ,
a[sub](n+1)[/sub] = -n[sup]n[/sup]/(n+1)[sup](n+1)[/sup] * a[sub]n[/sub] .



<!--shcode--><pre><code class='c++'>//Programma 3.1
#include <iostream>

using namespace std;

double An_1(int n);

void main()
{
double an = 1;
double eps = pow((double)10,-4);
for (int n = 0;an>eps;n++)
{
an = An_1(n);
cout << an << endl;
}
}

double An_1(int k)
{
if (k = 0)
return 1;
else
{
int k1 = pow((double)k,k);
int k2 = pow((double)(k+1),(k+1));
double koef = -k1/k2;
return koef * An_1(k-1);
}
}[/CODE]
но почему-то у меня происходит зацикливание вроде...Подскажите новичку в чем проблема...а то сижу борюсь с этим уже пол дня!!!
 
T

Truymf

Гость
#4
Итак решил выложить полностью рабочую программу...Вдруг таким же новичкам, как и мне пригодиться...

Задание: 10) Найти сумму ряда с точностью ε=10-4, общий член которого :
a[sub]n[/sub] = (-1)[sup](n-1)[/sup]/n[sup]n[/sup]
В ходе решения задачи использовать рекуррентное соотношение, полученное путем преобразований :
a[sub]n+1[/sub] = (-1)[sup](n)[/sup]/(n+1)[sup]n+1[/sup]
=> a[sub]n+1[/sub] / a[sub]n[/sub] => a[sub]n+1[/sub] = K * a[sub]n[/sub]


Код программы :
<!--shcode--><pre><code class='c++'>//Programma 3.1
#include <iostream>

using namespace std;

double An_1(int n); // прототип функции, вычисляющей член(№) ряда

void main()
{
int n; //объявляем переменную под номер члена ряда;
double sum = 0; //объявляем переменную под сумму элементов;
double an = 1; //объявляем переменную под член ряда;
double eps = pow((double)10,-4); //инициализируем точность вычислений;
for (n = 1;abs(an)>eps;n++) //задаем цикл для нахождения суммы при заданной точности;
{ //заданная точность означает, что ищем и суммируем члены
an = An_1(n); //ряда до тех пор, пока очередной член ряда не будет
sum +=an; //меньше "eps"
}
cout << "sum = " << sum << endl; //выводим на экран сумму;
cout << "n = " << n << endl; //выводим на экран номер элемента,при котором цикл;
} //закончил работу;

double An_1(int k) //определение функции;
{
if (k == 0)
return 1;
else
{
double k1 = pow((double)k,k); //ищем числитель рекуррентной формулы;
double k2 = pow((double)(k+1),(k+1)); //ищем знаменатель рекуррентной формулы;
double koef = -k1/k2; //ищем коэффициент рекуррентной формулы;
return koef * An_1(k-1); //возвращаем значение рекуррентной формулы;
}
}[/CODE]
 
Статус
Закрыто для дальнейших ответов.