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

Вычисление ряда - C++

Восстановить пароль Регистрация
 
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
19.05.2014, 12:37     Вычисление ряда #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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
 
float F(float tekSlagaemoe, int chisliteli, int znamenateli, float x, float E)
{
    tekSlagaemoe *= -chisliteli*x;
    tekSlagaemoe /= znamenateli;
 
    if (abs(tekSlagaemoe) < E)
        return tekSlagaemoe;
    else
        return tekSlagaemoe + F(tekSlagaemoe, chisliteli + 2, znamenateli + 2, x, E);
}
 
float Tsikl(float x, float E)
{
    float res = x*x, tekSlag = x*x;
    int chisl = 1, znam = 6;
 
    while (abs(tekSlag) >= E)
    {
        tekSlag *= -chisl*x;
        tekSlag /= znam;
        res += tekSlag;
        chisl += 2, znam += 2;
    }
    return res;
}
 
void main()
{
    float E, x;
    setlocale(LC_ALL,"rus");
 
    cout << "Введите точность: ";
    cin >> E;
    cout << "Введите х: ";
    cin >> x;
 
    cout << "С помощью разложения: " << x*x + F(x*x,1,6,x,E) << endl
        << "С помощью контрольной формулы: " << 8/3*(pow(1+x,1.5f) - 1) - 4*x << endl
        << Tsikl(x,E) << endl;
    system("pause");
}
Вопрос, в чем ошибка?
Миниатюры
Вычисление ряда  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2014, 12:37     Вычисление ряда
Посмотрите здесь:

Вычисление суммы ряда C++
Вычисление суммы ряда C++
Вычисление ряда C++
Вычисление ряда C++
C++ Вычисление суммы ряда
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
EnzoMatrix
 Аватар для EnzoMatrix
119 / 119 / 4
Регистрация: 14.03.2009
Сообщений: 462
19.05.2014, 12:56     Вычисление ряда #2
Цитата Сообщение от Керра Посмотреть сообщение
Вопрос, в чем ошибка?
1. в функции F() не корректная проверка на точность, есть мнение что точность считается либо количество иттераций, либо суммой двух слогаемых, но никак не одним
2. в функции Tsikl() я так понимаю должно быть просто вычисление по формуле, без каких-либо загонов с циклами и непонятными числителями и знаменателями, которые там используются на данный момент
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,196
Завершенные тесты: 1
19.05.2014, 13:48     Вычисление ряда #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
float Tsikl(float x, float E)
{
    float res = x*x, tekSlag = x*x;
    int i=3;
    while (fabs(tekSlag) >= E)
    {
        tekSlag *= -x/(2.*i)*(2.*i-3.);
        res += tekSlag;
        i++;
    }
    return res;
}
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
19.05.2014, 14:56  [ТС]     Вычисление ряда #4
Цитата Сообщение от EnzoMatrix Посмотреть сообщение
в функции Tsikl() я так понимаю должно быть просто вычисление по формуле, без каких-либо загонов с циклами и непонятными числителями и знаменателями, которые там используются на данный момент
почему непонятными? зачем вычислять эти дроби каждый раз по новой, если можно домножать на одно число и делить на одно число?
попробовала изменить точность как вы сказали, но это не помогло - точность стала больше, но все равно результат отличается от того что по формуле.
я спрашивала в разделе математики - там ответили, что ряд действительно является разложением данной формулы.

zss, не сработало
EnzoMatrix
 Аватар для EnzoMatrix
119 / 119 / 4
Регистрация: 14.03.2009
Сообщений: 462
19.05.2014, 15:39     Вычисление ряда #5
Цитата Сообщение от Керра Посмотреть сообщение
почему непонятными? зачем вычислять эти дроби каждый раз по новой, если можно домножать на одно число и делить на одно число?
потому что судя по output'у функция Tsikl() используется для вычисления по формуле, а не по сумме ряда, что подразумевает прямое вычисление корня и возведения в степень без сложений и домножений
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,196
Завершенные тесты: 1
19.05.2014, 15:43     Вычисление ряда #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Керра Посмотреть сообщение
не сработало
А как Вы думаете, чему равно 8/3?
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<iostream>
#include <cmath>
using namespace std;
double Tsikl(double x, double E)
{
    double res = x*x, tekSlag = x*x;
    int i=2;
    while (fabs(tekSlag) >= E)
    {
        tekSlag *= -x/(2.*i+2.)*(2.*i-3.);
        res += tekSlag;
        i++;
    }
    return res;
}
int main()
{
    double E, x;
    setlocale(LC_ALL,"rus");
 
    cout << "Введите точность: ";
    cin >> E;
    cout << "Введите х: ";
    cin >> x;
 
    cout << 8./3.*(sqrt(pow(1.+x ,3.))-1.) - 4.*x << endl << Tsikl(x,E) << endl;
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2014, 16:22     Вычисление ряда
Еще ссылки по теме:

Вычисление суммы n ряда C++
Вычисление суммы ряда C++
C++ Вычисление суммы ряда

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

Или воспользуйтесь поиском по форуму:
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
19.05.2014, 16:22  [ТС]     Вычисление ряда #7
zss, блиииииииииииин постоянно забываю про эти свойства деления... спасибо большое))

Добавлено через 59 секунд
EnzoMatrix, функция Цикл вычисляет не по формуле, а по ряду, но не рекурсивно. я пыталась ею проверить решение.
Yandex
Объявления
19.05.2014, 16:22     Вычисление ряда
Ответ Создать тему
Опции темы

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