Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
sergei60
47 / 28 / 11
Регистрация: 10.06.2012
Сообщений: 374
1

Сумма бесконечного ряда

15.10.2014, 10:48. Просмотров 985. Ответов 19
Метки нет (Все метки)

Дана такая задача. Найти сумму бесконечного ряда с точностью Е где x принадлежит интервалу (-1;1) а сам ряд я пишу словами :ИКС минус дробь (ИКС в 5 стерени разделить на 5 умноженное на 2 факториал) плюс дробь (ИКС в 9 степени разделить на 9 умноженное на 4 факториал) минус дробь (Икс в 13 степени разделить на 13 умноженное на 6 факториал) плюс ...

Вот такая задача . После упрощения я получил такой ряд : x-x5+x9-x13+... правильно ли я упростил,подскажите пожалуйста.Я пишу сюда потому что код надо написать на с++.
А по коду получается вот такая схема:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
#include  <cmath>
using namespace std;
int main (){
    float s,x;
    cin>>x;
    s=0;
    for (int i=-1; i<=1; i++) {
        s=s+( x-x5+x9-x13+...)//<--  тут полная неясность
        cout<<s;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2014, 10:48
Ответы с готовыми решениями:

Сумма бесконечного ряда
Поступил в этом году в вуз, а там с первых дней программирование на уровне, мне...

Сумма бесконечного ряда
Есть формула , которую нужно расчитать:\xi =\frac{Q}{\pi x}M(w) . Тут...

Сумма бесконечного ряда
Задание : Ввести с клавиатуры х и точность вычисления Eps. Вычислить с...

Сумма бесконечного ряда
Рассчитать сумму членов бесконечного ряда с заданной пользователем точностью E...

Сумма бесконечного ряда с факториалом
Найти сумму ряда с заданной точностью e = 0,001, общий член которого: a = n! /...

19
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
15.10.2014, 11:12 2
sergei60, Точность задана или вводится пользователем?
0
sergei60
47 / 28 / 11
Регистрация: 10.06.2012
Сообщений: 374
15.10.2014, 11:18  [ТС] 3
Kerry_Jr, Просто написано с заданной точностью е,но это не принципиально. Я в уме планирую добавить
float s,x,t,e=0.01;//t-слагаемое. е- точность
...........
if(t>e)
что то подобное. Хочу сказать .эта задача 1 го курса института ,но я ее решаю для себя .
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
15.10.2014, 11:22 4
sergei60, это принципиально, т.к. от этого будет зависеть количество итераций цикла.
0
sergei60
47 / 28 / 11
Регистрация: 10.06.2012
Сообщений: 374
15.10.2014, 11:28  [ТС] 5
Kerry_Jr, Пишу дословно как напечатано в методичке . Найти сумму бесконечного ряда с точностью Е,....... и про точность больше ни слова.
0
D_in_practice
332 / 332 / 331
Регистрация: 02.10.2014
Сообщений: 666
15.10.2014, 11:57 6
Для следующей формулы:

http://www.cyberforum.ru/cgi-bin/latex.cgi?x - \frac{{x}^{5}}{5 * 2!} + \frac{{x}^{9}}{9 * 4!} - \frac{{x}^{13}}{13 * 6!} + ...

Важно заметить:

http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{1} = {a}_{0} * ( - \frac{{x}^{4}}{5 * 2 * 1})

http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{2} = {a}_{1} * ( - \frac{{x}^{4} * 5}{9 * 3 * 4})

http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{3} = {a}_{2} * ( - \frac{{x}^{4} * 9}{13 * 5 * 6})

Тогда в общем виде:

http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n+1} = {a}_{n} * ( - \frac{{x}^{4} * (4 *n + 1)}{(4 * n + 5) * (2 * n + 1) * (2 * n + 2)})

После этого пишется программа

Делать

http://www.cyberforum.ru/cgi-bin/latex.cgi?sum = sum + {a}_{n+1}

Пока(|http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n+1}| > eps)
1
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
15.10.2014, 11:59 7
D_in_practice, я почему-то посчитал так
http://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{i=1}^{n}{\left(-1 \right)}^{i+1}\frac{{x}^{4i-3}}{\left(4i-3 \right)\left(2i-2 \right)!}
0
zss
Модератор
Эксперт С++
7405 / 6797 / 4299
Регистрация: 18.12.2011
Сообщений: 17,955
Завершенные тесты: 1
15.10.2014, 12:00 8
У Вас
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n}=\frac{{-1}^{n}*{x}^{4n-3}}{(4n-3)*n!}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n+1}=-\frac{{a}_{n}*{x}^{4}*(4n-3)}{(4n+1)*(2n+1)*(2n+2)}
Далее см.
Вычисление функций разложением в ряд Тейлора.
0
D_in_practice
332 / 332 / 331
Регистрация: 02.10.2014
Сообщений: 666
15.10.2014, 12:02 9
Компьютер факториалы и степени плохо воспринимает, для него лучше писать рекурентные формулы
0
sergei60
47 / 28 / 11
Регистрация: 10.06.2012
Сообщений: 374
15.10.2014, 12:41  [ТС] 10
zss, извините ,а как в код вставить an ? Тут ведь факториал ,как упростить эту функцию для кода
и мне ведь нужна sum = sum +a(n+1) ?
0
zss
Модератор
Эксперт С++
7405 / 6797 / 4299
Регистрация: 18.12.2011
Сообщений: 17,955
Завершенные тесты: 1
15.10.2014, 13:00 11
А пример посмотрели?
Там все расписано:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// x - аргумент, значение функции которого надо вычислить
// epsilon - точность вычисления суммы
double MySum(double x,double epsilon)
{
    double s=0;// Тут копим сумму
    double an; // Тут храним N-ый член ряда
    int n;
    n=1; // начальное значение n
    an=x; // начальное значение an
    while(fabs(an)>epsilon) 
// Суммировать будем пока член ряда an не станет достаточно маленьким по модулю
    {
          s+=an; // суммируем очередной член ряда
           an*=-x*x*x*x*(4.*n-3)/((4.*n+1.)*(2.*n+1.)*(2.*n+2.)); // пересчитываем a(n+1) через a(n)
          n++; // переходим к следующему члену 
   }
    return s; // получившаяся сумма
}
0
sergei60
47 / 28 / 11
Регистрация: 10.06.2012
Сообщений: 374
15.10.2014, 17:02  [ТС] 12
zss,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main (){
 
double t,e=0.01;
int x,i;
    double s=0;// Тут копим сумму
    double an; // Тут храним n-ый член ряда
    int n;
    n=-1; // начальное значение n
  for(i=-1; i<(-x*x*x*x*(4*n-3)/((4*n+1)*(2*n+1)*(2*n+2)));i++);{
  if(t>e)
 
      s+=an; // суммируем очередной член ряда
  an=-x*x*x*x*(4.*n-3)/((4.*n+1.)*(2.*n+1.)*(2.*n+2.)); // пересчитываем a(n+1) через a(n)
    
}
    return s; // получившаяся сумма
}
я попытался этот код представить с циклом for ,но что то запутался. И все таки как получилась an(это длинное выражение.). Код с рядомТейлора я смотрел и даже его распечатал.
0
zss
Модератор
Эксперт С++
7405 / 6797 / 4299
Регистрация: 18.12.2011
Сообщений: 17,955
Завершенные тесты: 1
15.10.2014, 17:07 13
Лучший ответ Сообщение было отмечено sergei60 как решение

Решение

Цитата Сообщение от sergei60 Посмотреть сообщение
И все таки как получилась an+1
Цитата Сообщение от zss Посмотреть сообщение
an*=-x*x*x*x*(4.*n-3)/((4.*n+1.)*(2.*n+1.)*(2.*n+2.)); // пересчитываем a(n+1) через a(n)
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
// x - аргумент, значение функции которого надо вычислить
// epsilon - точность вычисления суммы
double MySum(double x,double epsilon)
{
    double s=0;// Тут копим сумму
    double an; // Тут храним N-ый член ряда
    int n;
    n=1; // начальное значение n
    an=x; // начальное значение an
    while(fabs(an)>epsilon) 
// Суммировать будем пока член ряда an не станет достаточно маленьким по модулю
    {
          s+=an; // суммируем очередной член ряда
           an*=-x*x*x*x*(4.*n-3)/((4.*n+1.)*(2.*n+1.)*(2.*n+2.)); // пересчитываем a(n+1) через a(n)
          n++; // переходим к следующему члену 
   }
    return s; // получившаяся сумма
}
int main ()
{
    double e=1e-7;
    double xb=0.1,xe=2.0,step=0.1;
    for(double x=xb;x<=xe;x+=dx)
    {
         cout<<x<<"\t"<<MySum(x,e)<<endl;
    }
    return 0;
}
1
sergei60
47 / 28 / 11
Регистрация: 10.06.2012
Сообщений: 374
15.10.2014, 17:59  [ТС] 14
zss, хоть не до конца разобрался ,но я вас благодарю!

Добавлено через 48 минут
zss, g++ -Wall -c "лаба2-4.cpp" -std=c++0x (в каталоге: /home/sergei/m)
лаба2-4.cpp: В функции «int main()»:
лаба2-4.cpp:27:30: ошибка: нет декларации «dx» в этой области видимости
лаба2-4.cpp:26:26: предупреждение: неиспользуемая переменная «step» [-Wunused-variable]
Сборка завершилась с ошибкой.
это такие ошибки выдает,что это может значить?
0
zss
Модератор
Эксперт С++
7405 / 6797 / 4299
Регистрация: 18.12.2011
Сообщений: 17,955
Завершенные тесты: 1
15.10.2014, 18:27 15
Лучший ответ Сообщение было отмечено sergei60 как решение

Решение

Это значит поменять dx на step.

Цитата Сообщение от zss Посмотреть сообщение
for(double x=xb;x<=xe;x+=step)
Означает выполнить цикл начиная с x=xb и заканчивая x=xe с шагом step
1
sergei60
47 / 28 / 11
Регистрация: 10.06.2012
Сообщений: 374
15.10.2014, 18:43  [ТС] 16
zss, Теперь полная ясность,спасибо.Разбираться легче чем самому написать.
0
zss
Модератор
Эксперт С++
7405 / 6797 / 4299
Регистрация: 18.12.2011
Сообщений: 17,955
Завершенные тесты: 1
15.10.2014, 18:44 17
Цитата Сообщение от sergei60 Посмотреть сообщение
Разбираться легче чем самому написать.
Зато пользы меньше!
0
sergei60
47 / 28 / 11
Регистрация: 10.06.2012
Сообщений: 374
16.10.2014, 16:22  [ТС] 18
zss, я это и имел ввиду и прекрасно это понимаю.

Добавлено через 21 час 24 минуты
zss,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include  <cmath>
using namespace std;
int main (){
    double x, eps=0.0001;
    double sum=0;// Тут копим сумму
    double an; // Тут храним N-ый член ряда
    int n;
    cout<<"введем x";
    cin>>x;
    n=1; // начальное значение n
    an=x; // начальное значение an
    while(an>eps) 
// Суммировать будем пока член ряда an не станет  маленьким 
    {
          sum+=an; // суммируем очередной член ряда
  an*=-x*x*x*x*(4*n-3)/((4*n+1)*(2*n+1)*(2*n+2)); 
          n++; // переходим к следующему члену 
   }
   cout<<sum;
    return 0; 
}
Вот код разобранный общими усилиями. Но почему ,когда пользователь вводит значение x ,то всегда программа выдает точно такое же значение. Может проблемма в том, что an периодически то положительное, то отрицательное.
А если оно отрицательное, то каким бы оно ни было, оно будет меньше, чем eps? как с эти м быть?

Добавлено через 11 минут
zss,я вставил while(abs(an)>eps) и вроде все заработало . Это правильное решение?
0
zss
Модератор
Эксперт С++
7405 / 6797 / 4299
Регистрация: 18.12.2011
Сообщений: 17,955
Завершенные тесты: 1
16.10.2014, 16:28 19
Цитата Сообщение от sergei60 Посмотреть сообщение
Это правильное решение?
Да. У меня изначально так было:
Цитата Сообщение от zss Посмотреть сообщение
while(fabs(an)>epsilon)
0
sergei60
47 / 28 / 11
Регистрация: 10.06.2012
Сообщений: 374
16.10.2014, 16:31  [ТС] 20
zss, это надо быть таким слепым .я только сейчас увидел......
0
16.10.2014, 16:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2014, 16:31

Сумма бесконечного ряда - это как ?
скажите мне пжлста когда дана сумма бесконечная с точностью что надо сделать...

Сумма бесконечного ряда с заданной точностью
Написать программу вычисления суммы бесконечного ряда с точностью eps=0.001: ...

Сумма бесконечного ряда с заданной точностью
как реализовать сумму бесконечного ряда? посмотрел пару примеров не понял...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru