Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычисление суммы ряда sh(x) 
:(
    Опции темы
cuore
Дата 22.11.2012, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 22.11.2012

Репутация: нет
Всего: нет



Необходимо вычислить с помощью ряда значение гиперболического синуса 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;
}

Выводит что-то совершенно невнятное. Где ошибка? 
PM MAIL   Вверх
feodorv
Дата 22.11.2012, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(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 удовлетворить).

Это сообщение отредактировал(а) feodorv - 22.11.2012, 03:01


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0388 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.