Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Вычисление суммы ряда sh(x)


Автор: cuore 22.11.2012, 00:21
Необходимо вычислить с помощью ряда значение гиперболического синуса sh(x), в задаваемом интервале, с задаваемым шагом изменением х, и начальным значением х (данные вводим с клавиатуры). 
Ряд разложения: (x^(2n+1)) / (2n+1)!
Пишу так:
Код

#include <stdio.h>
#include <conio.h>
#include <math.h>

int main()
{
    const double eps = 0.0001; // точность вычислений
    double x, a, b, l, y, f, sh ; // значение х, интервал от а до b, шаг, выражение под суммой, факториал, сумма ряда        
    int n,k;

    f = 1;
    sh = 0;
    y = 1;

    printf("enter interval\n");
    scanf("%lf, %lf", &a, &b);
    printf("enter step\n");
    scanf("%lf", &l);
    printf("enter x\n");
    scanf("%lf", &x);

while (a < x && x < b)
{
    for (n=0; y > eps; n++)
    {
        f=f*(2*n+1)*(2*n-1)*2*n;
        y = pow(x,2*n+1) / f;
        sh+=y;        
    }
x+=l;
printf("sh = %.3f\n ",sh);
}
    getch();
    return 0;
}

Выводит что-то совершенно невнятное. Где ошибка? 

Автор: feodorv 22.11.2012, 02:52
Цитата(cuore @  22.11.2012,  01:21 Найти цитируемый пост)
        f=f*(2*n+1)*(2*n-1)*2*n;

Если это вычисление (2n+1)!, то оно не верное:
Код

(2n+1)! = (2*n+1) * (2*n) * (2n-1)!

Никакого множителя (2*n-1) здесь нет.


Потом при n=0 у Вас f обращается в 0, на которое Вы потом делите, странно, что вообще хоть что-то выводит, пусть и невразумительное.
При n=0 факториал имеет значение 1 и рекурсивно не вычисляется:
Код

   for (n=0; y > eps; n++)
    {
        f = (n == 0) ? 1. : f*(2*n+1)*2*n;
        y = pow(x,2*n+1) / f;
        sh+=y;        
    }


Далее, перед циклом по n у Вас переменная sh не обнуляется (обнулить можно и сразу после печати), абсорбируя в себя значения, вычисленные на каждом шаге (интеграл от sh получается).
Аналогично f нужно передёрнуть в 1. y, кстати, тоже (чтобы условие y > eps удовлетворить).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)