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

Гиперболический Синус в ряд - неправильный подсчет - C++

Восстановить пароль Регистрация
 
Live4Sky
6 / 1 / 1
Регистрация: 04.10.2013
Сообщений: 42
20.03.2014, 04:57     Гиперболический Синус в ряд - неправильный подсчет #1
Имеется ряд sh(x) = Сумма от i до N 1/(2i+1)!*x2i+1
вот код
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
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int main()
{
 double n,j=0,fact=1,x,x1=1,res,sum=0;
 cout<<"Enter N"<<endl;
 cin>>n;
 cout<<"Enter X"<<endl;
 cin>>x;
 for(int i=1;i<=n;++i){
    j+=2;
    fact*=j*(j+1);
    x1*=x*x;
    sum+=(x1*x)/fact;
    res=sinh(x);
 }
 
cout<<"Factorial(2*i+1)"<<" "<<"->"<<fact<<endl;
cout<<"X pow (2*i+1)"<<" "<<"->"<<x1*x<<endl;
cout<<"sum"<<" "<<"->"<<fixed<<sum<<endl;
cout<<"sh(x)"<<" "<<"->"<<fixed<<res<<endl;
    return 0;
}
в общем проблема в неправильном подсчете,т.е. левая часть правой не равна..помогите((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2014, 04:57     Гиперболический Синус в ряд - неправильный подсчет
Посмотрите здесь:

C++ гиперболический тангенс
гиперболический синус C++
C++ Используя разложение в ряд, найти синус 0,4
C++ Гиперболический косинус - из градусов в радианы или наоборот
Вычислить инверсный гиперболический тангенс используя разложение в ряд C++
Вычислить значения функции ch x (гиперболический косинус) с помощью бесконечного ряда Тейлора C++
синус C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
6053 / 5656 / 1828
Регистрация: 18.12.2011
Сообщений: 14,444
Завершенные тесты: 1
20.03.2014, 16:50     Гиперболический Синус в ряд - неправильный подсчет #2
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
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    double n,x,res,sum,eps,an;
    cout<<"Enter precission"<<endl;
    cin>>eps;
    cout<<"Enter X"<<endl;
    cin>>x;
    sum=0;
    an=x;
    n=0;
    do
    {
        sum+=an;
        n++;
        an*=x*x/(2.*n*(2.*n+1.));
        
    }while(fabs(an)>eps);
    res=sinh(x);
    cout<<"sum"<<" "<<"->"<<fixed<<sum<<endl;
    cout<<"sh(x)"<<" "<<"->"<<fixed<<res<<endl;
    system("pause");
    return 0;
}
Sibmax1988
3 / 3 / 0
Регистрация: 22.09.2015
Сообщений: 121
12.10.2015, 08:11     Гиперболический Синус в ряд - неправильный подсчет #3
zss, подскажи как посчитал знаменатель вот в этом выражении
an*=x*x/(2.*n*(2.*n+1.));
я считаю у меня знаменатель получается (2n+2)*(2*n+3) но считает неправильно
а ваш вариант работает
zss
Модератор
Эксперт С++
 Аватар для zss
6053 / 5656 / 1828
Регистрация: 18.12.2011
Сообщений: 14,444
Завершенные тесты: 1
12.10.2015, 08:56     Гиперболический Синус в ряд - неправильный подсчет #4
Все зависит от того что Вы выражаете an через an-1, или an+1 через an
В первом случае получается
C++
1
2
n++;
an*=x*x/(2.*n*(2.*n+1.));
А во втором
C++
1
2
an*=x*x/( (2n+2)*(2*n+3));
n++;
У Вас считает неправильно, потому, что n++ во втором случае должно стоять ПОСЛЕ формулы.
Sibmax1988
3 / 3 / 0
Регистрация: 22.09.2015
Сообщений: 121
12.10.2015, 09:08     Гиперболический Синус в ряд - неправильный подсчет #5
zss, так n++ у меня вообще в цикле фор наращивается так что получается должно работать но не работает

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (s=1, sn=1,n=1;fabs(sn)>eps;n++)
{
    sn*=(x*x)/(2*n*(2*n+1));
    s+=sn;
    if (fabs(s-sn)>ud) 
    {
        cout<<"При х= " <<x<<"  процесс становится расходящимся "<<endl;
        ud = fabs(s-sn);
        cout<< "Удаление от корня = "<<ud<<endl;
        break;      
    }
}
правда это кусок программы уже для гиперболического косинуса но суть такая же
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 636
12.10.2015, 12:10     Гиперболический Синус в ряд - неправильный подсчет #6
zss,
1. а что именно из cmath используется в вашем коде?
2. где объявлена функция system в вашем коде?
nmcf
4441 / 3779 / 1278
Регистрация: 14.04.2014
Сообщений: 14,872
12.10.2015, 13:34     Гиперболический Синус в ряд - неправильный подсчет #7
sinh(), например, в cmath, а для system() нужно подключить cstdlib.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2015, 16:36     Гиперболический Синус в ряд - неправильный подсчет
Еще ссылки по теме:

UnixPosix, не ври мне! (неправильный подсчет времени вручную) C++
Быстрая сортировка, неправильный подсчет количества сравнений и перестановок C++
C++ Неправильный подсчет количества треугольников
C++ Вычисление приближенного значения tan(x) через ряд Тейлора/ряд Маклорена
C++ Ряд Тейлора, синус

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
6053 / 5656 / 1828
Регистрация: 18.12.2011
Сообщений: 14,444
Завершенные тесты: 1
12.10.2015, 16:36     Гиперболический Синус в ряд - неправильный подсчет #8
Цитата Сообщение от Sibmax1988 Посмотреть сообщение
sn*=(x*x)/(2*n*(2*n+1));
s+=sn;
Та же ошибка. Сначала пересчитали, а потом просуммировали
Переставьте строки
C++
1
2
3
4
for (s=0.0, sn=1.0,n=1;fabs(sn)>eps;n++)
{
   s+=sn;
   sn*=(x*x)/(2*n*(2*n+1));
Yandex
Объявления
12.10.2015, 16:36     Гиперболический Синус в ряд - неправильный подсчет
Ответ Создать тему
Опции темы

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