Форум программистов, компьютерный форум CyberForum.ru

Вычислить сумму ряда - C++

Восстановить пароль Регистрация
 
templas
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
07.12.2013, 21:35     Вычислить сумму ряда #1
Почему не правильно вычисляется? Где у меня ошибки?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    setlocale (LC_ALL, "Russian");
    double k, y=0, a=10, b=1, x, xs=0, z=1, c=1, fact=1 ;
 
    cout<<"Введите: k, x ";
    cin>>k>>x;
    
    cout.setf(ios_base::fixed, ios_base::floatfield);
    cout.precision(4);
 
    while(a<k)
{
    y+=a;
    cout<<y<<endl;
    b+=2;
    xs++;
    b=b*pow(x,xs);
        
do
{z*=c; c++; }
while (c<=fact);
fact++;
    
if(xs==10||xs==13){cout<<"\nПереход на следующую итерацию цикла...\n"<<endl; continue;}
 
a=b/fact;
 
}
system ("pause >> void");
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
templas
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
07.12.2013, 21:49  [ТС]     Вычислить сумму ряда #2
Забыл прикрепить....
Миниатюры
Вычислить сумму ряда  
-=ЮрА=-
Заблокирован
Автор FAQ
08.12.2013, 00:42     Вычислить сумму ряда #3
Цитата Сообщение от templas Посмотреть сообщение
Где у меня ошибки?
- в алгоритме

Почему когда народ видит разложение в ряд, то старается сделать тупое деление на факториал?Хоть раз кто-то подумал, что если потребуется точность разложения до 1000-ного члена нужно будет на последних итерация вычислять 1000! С таким подходом можно ждать решения некоторых задач годами...
На пальцах
http://www.cyberforum.ru/cgi-bin/latex.cgi?10 + \frac{3*x}{1!} + \frac{5*{x}^{2}}{2!} + ... = 9 + \sum \frac{(2*n + 1)*{x}^{n}}{n!}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = \frac{(2*n + 1)*{x}^{n}}{n!}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n + 1} = \frac{(2*n + 3)*{x}^{n + 1}}{n!*(n + 1)}
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n + 1}}{{a}_{n}} =\frac{ \frac{(2*n + 3)*{x}^{n + 1}}{n!*(n + 1)}}{\frac{(2*n + 1)*{x}^{n}}{n!}} = x*\frac{(2*n + 3)}{(2*n + 1)*(n + 1)}

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <cmath>
#include <iostream>
using namespace std;
 
double Sum(double x, double err)
{
    double S = 1;
    double an  = 3*x;
    for( double n = 1; err < fabs(an); n++ )
    {
        S += an;
        cout<<"\rn = "<<n<<" an = "<<an<<" S = "<<S;
        an*= x*(2*n + 3) / ((2*n + 1)*(n + 1));
    }
    cout<<endl;
    return S;
}
 
 
int main()
{
    double x, err;
    cout<<"Enter     x : ";cin>>x;  cin.get();
    cout<<"Enter error : ";cin>>err;cin.get();
    cout<<"Sequence Sum: "<<9 + Sum(x, err)<<endl;
    cin.get();
    return 0;
}
Миниатюры
Вычислить сумму ряда  
-=ЮрА=-
08.12.2013, 00:46
  #4

Не по теме:

Прочесть теорию можно здесь http://www.cyberforum.ru/faq/thread4...ml#post2449607

kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.12.2013, 01:50     Вычислить сумму ряда #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
double Sum(double x, double err)
{
double S = 1;
double an *= 3*x;
for( double n = 1; err < fabs(an); n++ )
{
S += an;
cout<<"\rn = "<<n<<" an = "<<an<<" S = "<<S;
an*= x*(2*n + 3) / ((2*n + 1)*(n + 1));
}
cout<<endl;
return S;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double Sum(double x, double err)
{
* * double S = 10. + 3*x;
* * double an *= 3*x;
* * for( double n = 2; an > err; n++ )
* * {
* * * * an *= x / n;
        S += (2*n+1)*an;
* * * * cout<<"\rn = "<<n<<" an = "<<an<<" S = "<<S;
* * }
* * cout<<endl;
* * return S;
}
-=ЮрА=-
Заблокирован
Автор FAQ
08.12.2013, 02:45     Вычислить сумму ряда #6
kazak,
Цитата Сообщение от kazak Посмотреть сообщение
double an *= 3*x;
- тут баг, попробовал собрать твой код для данных примера 149,6 пока даже не пахнет

http://codepad.org/4hWL7ih8
Enter x : Enter error :
n = 2 an = 13.5 S = 86.5
n = 3 an = 13.5 S = 181
n = 4 an = 10.125 S = 272.125
n = 5 an = 6.075 S = 338.95
n = 6 an = 3.0375 S = 378.438
n = 7 an = 1.30179 S = 397.964
n = 8 an = 0.48817 S = 406.263
n = 9 an = 0.162723 S = 409.355
n = 10 an = 0.048817 S = 410.38
n = 11 an = 0.0133137 S = 410.686
n = 12 an = 0.00332843 S = 410.769
n = 13 an = 0.000768099 S = 410.79
Sequence Sum: 410.79
Попробовал поменять начальный инит суммы http://codepad.org/OSNSXnzM, опять не то.
Вобщем поправь там у себя алгоритм с n и инитом ты явно накосил (предположу бегло писал)

Цитата Сообщение от kazak Посмотреть сообщение
an *= x / n;
* * * * S += (2*n+1)*an;
- сама идея да приемлима - для простых разложений итератор выглядет проще и читабельней
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.12.2013, 14:03     Вычислить сумму ряда #7
Цитата Сообщение от kazak Посмотреть сообщение
C++
1
double an *= 3*x;
C++
1
double an = x;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2013, 15:25     Вычислить сумму ряда
Еще ссылки по теме:

C++ Вычислить сумму ряда
Вычислить сумму ряда C++
Вычислить сумму четных и сумму нечетных чисел натурального ряда от 1 до N C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
TwilightTwinkle
6 / 6 / 0
Регистрация: 27.11.2013
Сообщений: 26
08.12.2013, 15:25     Вычислить сумму ряда #8
Цитата Сообщение от kazak Посмотреть сообщение
C++
1
double an = x;
О да, действительно, an=x то же самое, что и an=an*3*x...
Yandex
Объявления
08.12.2013, 15:25     Вычислить сумму ряда
Ответ Создать тему
Опции темы

Текущее время: 06:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru