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

Вычисление ряда - C++

Восстановить пароль Регистрация
 
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
21.08.2012, 00:36     Вычисление ряда #1
Всем доброго время суток. Нужно написать программу для вычисления ряда:
http://www.cyberforum.ru/cgi-bin/latex.cgi?1 + 2*x + 3*{x}^{2} + 4*{x}^{3} + ... = \sum_{n=0}^{infinity}(n + 1)*{x}^{n}=\frac{1}{{(1-x)}^{2}}
Аргумент x (x по модулю меньше 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
37
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <iostream>
using namespace std;
const int N = 1000;
double slagaemoe(double slad_pred,int n, double x);
double SumObsch(double x);
double SumObsch(double x)
{
double Sum = 1, slag=1,slad_next;
int n;
 for ( x >  -1 && x < 1;; ++n)
{
slag=slagaemoe(slag,x,n);
        Sum+=slag;
   
    }
    return Sum;
  }
double slagaemoe(double slag_pred,int n, double x)
{  
return  slag_pred*1.0 / pow((1-x), 2.0);
}
int main()
{
    setlocale( LC_ALL,"Russian" );
    //int n;
    double x;
    /*cout<<"Enter n:";
    cin>>n;*/
    cout<<"Enter х:";
    cin>>x;
    cout<<"Сумма ряда равна:"<<SumObsch(x);
    system("pause");
    return 0;
}
Заранее огромное спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2012, 00:36     Вычисление ряда
Посмотрите здесь:

вычисление суммы ряда C++
C++ Вычисление суммы ряда
Вычисление ряда C++
Вычисление суммы ряда C++
C++ Вычисление суммы ряда
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.08.2012, 01:16     Вычисление ряда #2
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const int N = 1000;
double slagaemoe(int n, double x)
{  
    return  (n + 1.0) * pow(x, n);
}
double SumObsch(double x)
{
    double Sum = 0.0;
    for (int n = 0; n != N; ++n)
    {
        Sum += slagaemoe(n,x);
    }
    return Sum;
}
как-то так, разьве нет?
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
21.08.2012, 01:49  [ТС]     Вычисление ряда #3
Спасибо огромное за ответ как сделать, чтобы выполнялось условие x по модулю меньше 1? заранее огромное спасибо.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.08.2012, 02:14     Вычисление ряда #4
ну используй if сразу после места где производится ввод... ненадо этого делать в for - он предназначен для организации цыкла
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
21.08.2012, 11:49  [ТС]     Вычисление ряда #5
Вот что то надумал, посмотрите пожалуйста вроде бы правильно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    setlocale( LC_ALL,"Russian" );
    double x;
    cout<<"Enter х:";
    cin>>x;
    if ( x > -1 && x < 1 )
    cout<<"Сумма ряда равна:"<<SumObsch(x);
    else cout << "Error!\n";
    system("pause");
    return 0;
}
Заранее огромное спасибо.
-=ЮрА=-
Заблокирован
Автор FAQ
21.08.2012, 12:55     Вычисление ряда #6
Итератор
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = (n + 1)*{x}^{n}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n + 1} = (n + 2)*{x}^{n + 1}
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n + 1}}{{a}_{n}} = \frac{(n + 2)*{x}^{n + 1}}{(n + 1)*{x}^{n}} = x*\frac{(n + 2)}{n + 1}
-=ЮрА=-
21.08.2012, 13:23
  #7

Не по теме:

isaak, а формула разложения точно правильная???
Я на всякий случай цепляю код, но разность результатов суммы и проверки скорее говорит не об ошибке в моих вычилсениях а об ошибке в формуле. Можно посмотреть в каком источнике она указана, т.к. у меня для неё совсем другое разложение

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
37
38
39
40
41
42
43
44
45
46
47
48
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
double Sum(double x, double eps)
{
    double sum = 0;
    for
    (
        double an = 1, n = 0; 
        eps < fabs(an); 
        an *= x*(n + 2)/(n + 1)
    )
    {
        sum = sum + an;
        n   = n   + 1;
    }
    return sum;
}
 
double Check(double x)
{
    return 1/pow((1 - x),2.0);
}
 
int main()
{
    double xn, xk, dx, eps;
    cout<<"xn = ";cin>>xn; 
    cout<<"xk = ";cin>>xk; 
    cout<<"dx = ";cin>>dx;
    cout<<"eps= ";cin>>eps;
    cout<<setw(9)<<setfill(' ')<<"  x  |"
        <<setw(9)<<setfill(' ')<<"Sum  |"
        <<setw(9)<<setfill(' ')<<"Check\n";
    for(double x = xn; x <= xk; x += dx)
    {
        
        if(x == 1)
            cout<<"x not from ODZ of function\n";
        else
            cout<<setprecision(4)<<setw(8)<<setfill(' ')<<x<<"|"
                <<setprecision(4)<<setw(8)<<setfill(' ')<<Sum(x,eps)<<"|"
                <<setprecision(4)<<setw(8)<<setfill(' ')<<Check(x)<<endl;
    }
    return 0;
}

isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
21.08.2012, 15:20  [ТС]     Вычисление ряда #8
-=ЮрА=- спасибо огромное за ответ задача взята из Васильева А.Н. "Самоучитель С++ с примерами и задачами" здесь: http://www.twirpx.com/file/408500/ ее можно вроде бы скачать. Посмотри пожалуйста если не сложно заранее огромное спасибо!!!!

Добавлено через 52 минуты
-=ЮрА=- как сделать чтобы выполнилось условие x по модулю меньше 1???? Чтобы при вводе -1 и 1 выскакивало сообщение "x не входит в область допустимых значений"???? Я ради експеримента ввел xn = -1 и xk = 1 ни кого сообщения не было программа тупо зависла? Заранее огромное спасибо!!!!
-=ЮрА=-
21.08.2012, 15:22
  #9

Не по теме:

isaak, хорошо я сейчас буду разбираться, возможно в чём то просчитался...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2012, 16:02     Вычисление ряда
Еще ссылки по теме:

C++ Вычисление суммы ряда в C++
Вычисление ряда C++
C++ Вычисление суммы ряда

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
21.08.2012, 16:02     Вычисление ряда #10
isaak, я разобрался, ошибка была в цикле, верней в очерёдности домножения на итератор и инкрементированию n

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for
* * (
* * * * double an = 1, n = 0;
* * * * eps < fabs(an);
* * * * an *= x*(n + 2)/(n + 1)
* * )
* * {
* * * * sum = sum + an;
* * * * n * = 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
double Sum(double x, double eps)
{
    double sum = 0;
    for
    (
        double an = 1, n = 0; 
        eps < fabs(an); 
        n   = n   + 1
    )
    {
        sum = sum + an;
        an *= x*(n + 2)/(n + 1);
    }
    return sum;
}
 
double Check(double x)
{
    return 1/pow((1 - x),2.0);
}
 
int main()
{
    double xn, xk, dx, eps;
    cout<<"xn = ";cin>>xn; 
    cout<<"xk = ";cin>>xk; 
    cout<<"dx = ";cin>>dx;
    cout<<"eps= ";cin>>eps;
    cout<<setw(9)<<setfill(' ')<<"  x  |"
        <<setw(9)<<setfill(' ')<<"Sum  |"
        <<setw(9)<<setfill(' ')<<"Check\n";
    for(double x = xn; x <= xk; x += dx)
    {
        
        if(x == 1)
            cout<<"x not from ODZ of function\n";
        else
            cout<<setprecision(4)<<setw(8)<<setfill(' ')<<x<<"|"
                <<setprecision(4)<<setw(8)<<setfill(' ')<<Sum(x,eps)<<"|"
                <<setprecision(4)<<setw(8)<<setfill(' ')<<Check(x)<<endl;
    }
    return 0;
}
Касательно
Цитата Сообщение от isaak Посмотреть сообщение
Чтобы при вводе -1 и 1 выскакивало сообщение "x не входит в область допустимых значений"????
- ввод чисел по модулю равных либо больших единицы концептуально запрещён применимостью самой формулы разложения (см второй скрин). Так что вот эту строку cout<<"x not from ODZ of function\n"; вообще можно исключить

Не по теме:

От себя:Для начинающего ссылка на тот ресурс просто подарок свыше, очень хорошая книга, написано просто и понятно - самое оно для человека на этапе становления как программиста

Миниатюры
Вычисление ряда   Вычисление ряда  
Yandex
Объявления
21.08.2012, 16:02     Вычисление ряда
Ответ Создать тему
Опции темы

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