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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.73
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
#1

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

17.09.2009, 18:15. Просмотров 3423. Ответов 23
Метки нет (Все метки)

Необходимо вычислить сумму ряда 1/1+1/2+...+1/n. Известно, что в с++ подобные вычисления не точные и большую роль играет способ и порядок суммирования. Необходимо получить наиболее точный результат... Есть идеи?=)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2009, 18:15     Точное вычисление суммы ряда
Посмотрите здесь:

Вычисление суммы ряда - C++
Помогите составить функцию для данного выражения. \sum_{n=1}^{20} \frac{ln n}{\sqrt{{n}^{7}}}

Вычисление суммы ряда - C++
Народ, помогите пожалуйста. Всё это сделать нужно на обычном си Три программы: 1) Вычисление функции и с помощью стандартных...

Вычисление суммы ряда - C++
Составить программу для вычисления суммы ряда

Вычисление суммы ряда - C++
Всем доброго времени суток! Есть ряд: \sum_{n=0}^\infty (-1)^n * (a+b*n)/x^n Есть вот такая неработающая программа: ...

Вычисление суммы ряда - C++
Суммы жду помощи.

Вычисление суммы ряда - C++
Для заданных значений ε>0 и x вычислить сумму ряда с точностью ε. Суммирование ряда завершить, если модуль очередного члена ряда не...

Вычисление суммы ряда - C++
Вычислить \sum_{i=1}^{\propto }i^2 пока S<50 с помощью цикла while

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HIMen
4125 / 1374 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
17.09.2009, 18:37     Точное вычисление суммы ряда #2
Этот ряд расходится, у него нельзя посчитать точную сумму, только частичную
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 18:39  [ТС]     Точное вычисление суммы ряда #3
Цитата Сообщение от HIMen Посмотреть сообщение
Этот ряд расходится, у него нельзя посчитать точную сумму, только частичную
Возможно, не совсем правильно выразился...
Предположим, что n - известно, те количество слагаемых не бесконечно.
HIMen
4125 / 1374 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
17.09.2009, 18:44     Точное вычисление суммы ряда #4
C++
1
2
3
4
5
6
7
double sum=0.0;
int n=4;
for(int i=1; i<n+1; i++)
{
    sum+=1.0/i;
}
cout << sum;
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 18:56  [ТС]     Точное вычисление суммы ряда #5
Спасибо, конечно....
Но до этого я как бы и сам додумался=)
Фишка в том, что в c++ деление 1/i, когда i не степень двойки, не совсем точно.
Алгоритм, представленный Вами, даст ответ наиболее далекий от истины...
HIMen
4125 / 1374 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
17.09.2009, 19:00     Точное вычисление суммы ряда #6
Сумма n первых членов гармонический ряда:
Sn = ln(n) +С+ E,
где С = 0,577215... — Эйлера постоянная, а E->0 при n->к бесконечности.
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 19:11  [ТС]     Точное вычисление суммы ряда #7
Цитата Сообщение от HIMen Посмотреть сообщение
Сумма n первых членов гармонический ряда:
Sn = ln(n) +С+ E,
где С = 0,577215... — Эйлера постоянная, а E->0 при n->к бесконечности.
Это тоже не достаточно точно, особенно для небольших n....
Возможно, тут стоит подойти с другой стороны.
Например, сумма от 1/n до 1/1 будет вычислена более точно, чем от 1/1 до 1/n. Сумма дробей где знаменатель - степень двойки будет вычислена абсолютно точно. Так же есть некоторые дроби, например 1/3 и 1/6, чья сумма 1/2, что тоже дает точный результат....
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
17.09.2009, 19:23     Точное вычисление суммы ряда #8
Попробуйте, для начала, как-нибудь упростить ряд. Возможно, при некотором разложении, нектоторые элементы сократятся.

Добавлено через 5 минут
Точнее не сократятся, а дадут нужную степень.
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
17.09.2009, 19:26     Точное вычисление суммы ряда #9
можно считать в рациональных числах, представляя их как
C++
1
2
3
4
5
6
7
class rational
{
public:
  int numerator;
  int denominator;
.....
}
HIMen
4125 / 1374 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
17.09.2009, 19:26     Точное вычисление суммы ряда #10
Можно делить на i не единицу а какое-то число, чем оно больше, тем наверно точнее
C++
1
2
3
4
5
6
7
8
9
10
unsigned long double sum1=0.0, sum2=0.0;
_int64 num=1000000000;
for(_int64 i=1; i<num+1; i++)
{
    sum1+=1000000000000.0/i;
    sum2+=1.0/i;
}
cout.precision(40);
cout << sum1/1000000000000.0 << endl << sum2 << endl;
cout << log(1000000000.0)+0.57721566490153286060651209008240243;
Возможно будет еще точнее если взять это число 1*2*3*... например 18!
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
17.09.2009, 19:38     Точное вычисление суммы ряда #11
да, и еще, значения, при которых теряется точность составляют n~10 в 15
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 19:40  [ТС]     Точное вычисление суммы ряда #12
Цитата Сообщение от Lolcht0 Посмотреть сообщение
можно считать в рациональных числах, представляя их как
Не понял идеи Можно поподробнее?
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
17.09.2009, 19:45     Точное вычисление суммы ряда #13
скорее всего идея бессмысленна))) потому что пост номер 11.

но вообще, суть в том, что представлять числа в виде дробей с целым числителем и знаменателем.
Delphin_KKC
UNIX-way
709 / 494 / 17
Регистрация: 15.01.2009
Сообщений: 1,721
17.09.2009, 19:49     Точное вычисление суммы ряда #14
Математически существует следующее равенство:
(1/a)+(1/b)=(a+b)/(a*b)
Его использование в два раза сократит количество операций деления.
Delphin_KKC
UNIX-way
709 / 494 / 17
Регистрация: 15.01.2009
Сообщений: 1,721
17.09.2009, 19:59     Точное вычисление суммы ряда #15
Кроме того, если сумму указанного ряда обозначить как S, то справедлива формула, указанная на рисунке.
Для вычисления суммы в числителе дроби можно использовать целочисленное деление, так как "i" является делителем "n!". А факториал достаточно вычислить один раз и сохранить в переменной.
Однако, способ годится лишь для n <= 12 (при условии отведения 4 байт на хранение факториала).
Миниатюры
Точное вычисление суммы ряда  
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 20:08  [ТС]     Точное вычисление суммы ряда #16
Цитата Сообщение от Lolcht0 Посмотреть сообщение
да, и еще, значения, при которых теряется точность составляют n~10 в 15
не скажи.... например
C++
1
2
3
4
5
6
7
8
9
10
11
12
unsigned long double sum1=0.0, sum2=0.0;
_int64 num=1000000000;
for(_int64 i=1; i<num+1; i++)
{
    sum1+=1.0/i;
}
for(_int64 i=num; i>0; i--)
{
    sum2+=1.0/i;
}
cout.precision(40);
cout << sum1 << endl << sum2 << endl;
В результате
sum1 = 21.30048150234855
sum2 = 21.300481502346148
А это уже большая разница...

Добавлено через 1 минуту
Цитата Сообщение от Delphin_KKC Посмотреть сообщение
Математически существует следующее равенство:
(1/a)+(1/b)=(a+b)/(a*b)
Его использование в два раза сократит количество операций деления.
Цитата Сообщение от Delphin_KKC Посмотреть сообщение
Однако, способ годится лишь для n <= 12 (при условии отведения 4 байт на хранение факториала).
Оба варианта не подходят для больших n...
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
17.09.2009, 20:09     Точное вычисление суммы ряда #17
это никакая разница. физические условия дадут на порядки большую погрешность
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 20:19  [ТС]     Точное вычисление суммы ряда #18
Цитата Сообщение от Lolcht0 Посмотреть сообщение
это никакая разница. физические условия дадут на порядки большую погрешность
Значение изменилось даже при изменении порядка суммирования....
Нужен более точный алгоритм...
И ответ: "И так пойдет!", не подходит....
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
17.09.2009, 20:27     Точное вычисление суммы ряда #19
да пожалуйста! то, что предлагал вам я, а это тоже самое, фактически, что предлагал Delphin_KKC. длинную арифметику и кластеры вам в руки!

только это лишено всяческого смысла)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2009, 21:07     Точное вычисление суммы ряда
Еще ссылки по теме:

Вычисление суммы ряда - C++
ребята помогите решить. составьте пожалуйста код!) б) \sum_{n = 1}^{12} (10n - 8/ 10*n*n - 3*n + 8)

Вычисление суммы ряда - C++
Помогите, задали задание написать программу. Пользователь вводит значение 2-х переменных: х-угол и n-количество раз. суть программы...

Вычисление суммы ряда - C++
Дано вещественное число А (&gt; 1). Вывести наименьшее из целых чисел N, для которых сумма 1 + 1/2 + ... + 1/N будет больше А, и саму эту...

Вычисление суммы ряда 1^k+2^k+...+n^k - C++
Даны натуральные числа n и k. Составить программу вычисления выражения 1^k+2^k+...+n^k. Помогите пожалуйста. Оператор pow использовать...

вычисление суммы ряда - C++
Условие http://img143.imageshack.us/img143/4586/93396673.jpg И вот мой код, подскажите в чем ошибка. Наверное весь код не правильный. ...


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

Или воспользуйтесь поиском по форуму:
HIMen
4125 / 1374 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
17.09.2009, 21:07     Точное вычисление суммы ряда #20
Цитата Сообщение от Nikituki Посмотреть сообщение
Оба варианта не подходят для больших n...
для очень больших n формула Эйлера, мне кажется будет самое точное
Yandex
Объявления
17.09.2009, 21:07     Точное вычисление суммы ряда
Ответ Создать тему
Опции темы

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