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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
Zverit
Уничтожитель печенек
277 / 205 / 21
Регистрация: 07.02.2010
Сообщений: 723
#1

Решение суммы ряда - C++

21.07.2011, 12:47. Просмотров 1949. Ответов 18

Не раз видел задачки типа "Дано вещественное число Х и целое число N (>0).Найти значение выражения 1-х^2/(2!)+x^4/(4!)-...+(-1)^n*X^(2*n)/((2*N)!)
(N!=1*2*...*N). ... "
, не понимал и откладывал в "дальний угол". Т.в. прошу, объясните подробно, как их решать? На что смотреть в первую очередь? Как я понимаю формула строится по последней части (...+(-1)^n*X^(2*n)/((2*N)!)), скорее всего я не прав. Знаю, что решается через цикл. Но вот построение формулы как-то не понятна.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2011, 12:47     Решение суммы ряда
Посмотрите здесь:

Суммы ряда - C++
Для вводимых x, N, E вычислить сумму N слагаемых и сумму тех слагаемых, которые по абсолютной величине больше Е (выполнить суммирование для...

суммы ряда - C++
f(x)=значок суммы ряда(вверху бесконечность;внизу i=1) (((-1)^2i+1))*(x^2i))\(3i-5)! !-фактариал ^-степень

Суммы ряда - C++
Помогите с написанием в с++. Но как я понимаю что где ошибка в условии. П.5.18.Правил Запрещено размещать задания и решения в виде...

Вычисление суммы ряда - C++
Вычисление суммы ряда Потрудитесь один раз нормально оформить свою тему, глядишь, и отвечать будут охотнее.

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
21.07.2011, 13:20     Решение суммы ряда #2
Обычно в таких формулах каждый следующий член можно получать рекуррентно из предыдущего.
Например в данном случае если последний член разделить на предпоследний, то получается множитель, на который надо умножать каждый член, чтобы получить следующий
http://www.cyberforum.ru/cgi-bin/latex.cgi?{(-1)^i x^{2i}\over (2i)!} {\cdot} {(2i-2)!\over (-1)^{i-1} x^{2i-2}} = -{x^2\over 2i(2i-1)}
осталось задать начальный член и организовать цикл (в данном случае можно только по чётным элементам)

Добавлено через 7 минут
То есть очередной член ряда из предыдущего получается так:
http://www.cyberforum.ru/cgi-bin/latex.cgi?T_i = -{x^2\over 2i(2i-1)}\cdot T_{i-1}
Zverit
Уничтожитель печенек
277 / 205 / 21
Регистрация: 07.02.2010
Сообщений: 723
21.07.2011, 13:22  [ТС]     Решение суммы ряда #3
grizlik78, благодарю, почти понял. Еще для полного усвоения не помешало бы привести пример в коде, желательно с комментариями.
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
21.07.2011, 13:27     Решение суммы ряда #4
Если не ошибаюсь, то данная формула, это разложение косинуса
bigar
53 / 53 / 23
Регистрация: 18.02.2011
Сообщений: 146
21.07.2011, 13:34     Решение суммы ряда #5
Можно так
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 "stdafx.h"
#include <math.h>
#include <iostream>
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"rus");
    const double e=0.0001;
    double s;
    double u1;
    double u2;
    double x;
    int n;
           s=0;u1=1;n=1;
             int i=1;
             while(i<=n) 
         {   
          s+=u1;
              u2=(-u1*x*x)/((n+2)*(n+1));
                  if(fabs(u1-u2)<e)break;
                 u1=u2;
                n++;
         } 
         std::cout<<"Сумма ряда "<<std::endl;
            std::cout<<"S="<<s<<std::endl;
         system("pause");  
      return 0;
}
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
21.07.2011, 13:37     Решение суммы ряда #6
bigar, что-то ты тут намудрил с i и n
Zverit
Уничтожитель печенек
277 / 205 / 21
Регистрация: 07.02.2010
Сообщений: 723
21.07.2011, 13:39  [ТС]     Решение суммы ряда #7
grizlik78, bigar, А комментарии можно к программам?
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
21.07.2011, 13:48     Решение суммы ряда #8
Ну а что там комментировать-то?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int main()
{
    int N = 2*20; /* число членов ряда (удвоенное из-за замены переменной) */
    double x   =  0.5, /* значение x, можно ввести с консоли */
           mx2 = -x*x; /* минус икс квадрат, чтобы не вычислять 10 раз*/
 
    int i;
    double part = 1, /* первый (нулевой) член ряда */
           sum = 1; /* начальная сумма (из одного члена) */
    /* Цикл по заданному количеству членов.
      Можно организовать до достижения заданной погрешности */
    for (i = 2; i < N; i+=2) {
        /* вычисляем следующий член умножением на знаменатель ряда */
        part *= mx2/((i-1)*i);
        sum += part; /* прибавляем его к сумме */
    }
    printf("cos(%lf) = %lf\n", x, sum); /* результат */
    
    return 0;
}
bigar
53 / 53 / 23
Регистрация: 18.02.2011
Сообщений: 146
21.07.2011, 13:57     Решение суммы ряда #9
Цитата Сообщение от grizlik78 Посмотреть сообщение
bigar, что-то ты тут намудрил с i и 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
29
#include <math.h>
#include <iostream>
 
int main()
{
        setlocale(LC_ALL,"rus");
        const double e=0.0001;
        double s;
        double u1;
        double u2;
        double x;
        int n;
        std::cout << "Введите x -> ";
        std::cin >> x;//вверху все понятно
               s=0;u1=1;n=1;// значение суммы сразу в 0, 1 член ряда 1 и n=1 
                 int i=1;
                 while(i<=n) //в цикле считаем сумму пока разность предыдущего и последующего членов    не будет больше погрешности
             {   
                  s+=u1;считаем сумму
                  u2=(-u1*x*x)/((n+2)*(n+1));//с помощью рекурентной формулы вычисляем следующий член
                  if(fabs(u1-u2)<e)break;
                     u1=u2;//если разность не больше идем в цикле дальше  и считаем сумму предыдущему присваиваем последующий
                        n++;
             } 
             std::cout<<"Сумма ряда "<<std::endl;
            std::cout<<"S="<<s<<std::endl;
             system("pause");  
          return 0;
}
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
21.07.2011, 14:01     Решение суммы ряда #10
Цитата Сообщение от bigar Посмотреть сообщение
все норм
Да не, программа-то, наверное, работает, но условие цикла
C++
1
while(i<=n)
станет ложным лишь если произойдёт переполнение в n.
Ведь в цикле i не меняется и не используется (что уже само по себе странно выглядит), а n только растёт
bigar
53 / 53 / 23
Регистрация: 18.02.2011
Сообщений: 146
21.07.2011, 14:07     Решение суммы ряда #11
i не должно расти
цикл прекратится когда выполнится условие
C++
1
  if(fabs(u1-u2)<e)break;
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
21.07.2011, 14:09     Решение суммы ряда #12
Это я понимаю. Я говорил только про i и n. Зачем здесь вообще i?
bigar
53 / 53 / 23
Регистрация: 18.02.2011
Сообщений: 146
21.07.2011, 14:13     Решение суммы ряда #13
Цитата Сообщение от grizlik78 Посмотреть сообщение
Это я понимаю. Я говорил только про i и n. Зачем здесь вообще i?
ну если вас что то смущает то
C++
1
2
3
4
5
6
7
8
9
s=0;n=1;u2=1;
do 
{   
u1=u2;
s+=u2;
u2=-u1*x*x/((N+2)*(n+1));
n++;
}
while(fabs(u1-u2)>=e);
так будет понятней и правильней. Разницы никакой
Zverit
Уничтожитель печенек
277 / 205 / 21
Регистрация: 07.02.2010
Сообщений: 723
22.07.2011, 11:49  [ТС]     Решение суммы ряда #14
А как проверить, правильно вычисляет или нет?

Добавлено через 16 минут
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну а что там комментировать-то?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int main()
{
    int N = 2*20; /* число членов ряда (удвоенное из-за замены переменной) */
    double x   =  0.5, /* значение x, можно ввести с консоли */
           mx2 = -x*x; /* минус икс квадрат, чтобы не вычислять 10 раз*/
 
    int i;
    double part = 1, /* первый (нулевой) член ряда */
           sum = 1; /* начальная сумма (из одного члена) */
    /* Цикл по заданному количеству членов.
      Можно организовать до достижения заданной погрешности */
    for (i = 2; i < N; i+=2) {
        /* вычисляем следующий член умножением на знаменатель ряда */
        part *= mx2/((i-1)*i);
        sum += part; /* прибавляем его к сумме */
    }
    printf("cos(%lf) = %lf\n", x, sum); /* результат */
    
    return 0;
}
Хм. А тут постоянно выводит результат 0.5 при любом значении N
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2011, 11:52     Решение суммы ряда
Еще ссылки по теме:

Вычисление суммы ряда - C++
Пожалуйста помогите написать программу для вычисления суммы ряда sinx= x-(x^3/3!)+(x^5/5!)-(x^7/7!)..... с заданной точностью, используя...

Вычисление суммы ряда в C++ - C++
Помогите пожалуйста балбеске написать программу вычисления суммы ряда \sum_{n=1}^{10} n / (4n^2-1)

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

Нахождение суммы ряда - C++
Составить и отладить процедуру для приближенного вычисления заданной функции y=f(x) путем суммирования членов заданного её ряда s(x)....


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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.07.2011, 11:52     Решение суммы ряда #15
Цитата Сообщение от ITZver Посмотреть сообщение
А как проверить, правильно вычисляет или нет?
ну дык посчитай косинус 0.5 на калькуляторе
Yandex
Объявления
22.07.2011, 11:52     Решение суммы ряда
Ответ Создать тему
Опции темы

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