Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/34: Рейтинг темы: голосов - 34, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 22.09.2019
Сообщений: 2
1

Ряд Тейлора для синуса

22.09.2019, 12:54. Показов 6207. Ответов 5
Метки нет (Все метки)

Необходимо вычислить y = sin x = x - x3/3! +x5/5! -...+ (-1)^n*x^(2n+1)/(2n+1)!+... с точностью eps=0.00001.
Но значения y не совпадают со значением находимым через sin(x).
Уже всю голову сломал, помогите пожалуйста найти в чем ошибка

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
#include <iostream>
#include <cstdlib>
#include <clocale>
#include <cmath>
 
using std::cout;
using std::cin;
using std::endl;
 
int main()
{
    setlocale(0, "");
 
    int i = 1;
    unsigned long long factorial = 1, n = 0;
    double x = 0, eps = 0.000001;
    long double z = 1, y = 0;
 
    cout << "Введите x: " << endl;
    cin >> x;
 
    while (abs(z)>eps)
    {
        for (i = 2 * n + 1; i > 0; i--)
        {
            factorial *= i;
        }
        
        z = pow(-1.0, n) * (pow(x, 2 * n + 1) / factorial) ;
        y = y + z;
        n++;
    }
    
    cout << "y = " << y << endl;
    
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2019, 12:54
Ответы с готовыми решениями:

Разложение в ряд Тейлора синуса
Здравствуйте! Разложил синус в ряд Тейлора, но почему-то при X &gt; 35 прога выдаёт неверный ответ....

Разложение синуса и косинуса в ряд Тейлора
Есть следующая функция с разложением косинуса и синуса в ряд: void sincos (double a) { ...

Ряд Тейлора для arctg x
// arctg x в интервале с шагом #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; ...

Реализация синуса ряды Тейлора
Здрасте, помогите пожалуйста, пытаюсь реализовать функцию, которая считает синус через ряды...

5
Эксперт C
25590 / 15961 / 3417
Регистрация: 24.12.2010
Сообщений: 34,910
22.09.2019, 13:30 2
Лучший ответ Сообщение было отмечено 0_Lee_0 как решение

Решение

0_Lee_0, factorial = 1 поставь после while.
Но все равно все очень запущено. Так ряды не считают. Следует вообще обходиться без факториалов.

Добавлено через 55 секунд
Посмотри внизу страницы. Может быть найдешь что-нибудь подходящее...

Добавлено через 2 минуты
Для правильного расчета нужно понять, чем очередной член ряда отличается от предыдущего...
1
0 / 0 / 0
Регистрация: 22.09.2019
Сообщений: 2
22.09.2019, 13:36  [ТС] 3
Спасибо, буду разбираться
0
5928 / 4024 / 2334
Регистрация: 18.12.2017
Сообщений: 12,596
22.09.2019, 13:40 4
0_Lee_0, сумма ряда расситывается через рекуррентные соотношения
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 <iomanip>
#include <cmath>
using namespace std;
 
int main()
{    
    int n=0;
    double x, eps=0.00001;    
    
    cout << "x="; cin >> x;         
    
    double an=x, y=0.0;    
       
    while(fabs(an)>eps)    
    {   
        y+=an;
        n++;
        an*=-x*x/(2*n*(2*n+1));         
    }
    
    cout << "y=" << y << "\n";
    
system("pause");
return 0;
}
1
0 / 0 / 0
Регистрация: 12.12.2020
Сообщений: 4
15.12.2020, 14:28 5
Привет, я новичок в с++ , можешь подробнее описать что есть что здесь. У меня подобная программа, но этот ряд она должна считать до введенного числа n (x-x3/3!+x5/5!...xn/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
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
using namespace std;
 
int factorial(int n) //Факториал
{
    if (n == 0)
        return 0;
    if (n == 1)
        return 1;
    return n * factorial(n - 1);
}
 
int main()
{
    setlocale(LC_ALL, "ru");
    double a,x, stepen,s,sum,eps=0.0001;
    int n;
 
    
    cout << "Введите число n для проверки на нечетность ";
    cin >> n;
    if (n % 2 == 0)
    {
        cout << "Число " << n << " является четным " << endl;
        cout << "Введите нечетное число, чтобы продолжить" << endl;
        return 0;
        }
    else
    {
        cout << "Число " << n << " является нечетным " << endl;
    }
    //Проверка на четность
    cout << "Введите x " << endl;
    cin >> x;
    stepen = x;
    
    for (int i = 1; i < n; i++)
    {
        stepen *= x;    //Возведение в степень        
    } 
 
    a =  stepen / factorial(n);
0
5928 / 4024 / 2334
Регистрация: 18.12.2017
Сообщений: 12,596
15.12.2020, 18:35 6
Цитата Сообщение от ProgramN Посмотреть сообщение
можешь подробнее описать что есть что здесь
расчёт частичной суммы ряда. ссылку с теорией по этому поводу я Вам уже предоставлял. что именно Вам непонятно ?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2020, 18:35

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Подсчёт синуса рядом Тейлора на C++
Подскажите, пожалуйста, почему данная программа работает правильно не на всех входных данных: //...

Расчет синуса и косинуса по ряду Тейлора
помогите посчитать синус и косинус с помощью ряда Тейлора Как я понимаю синус и косинус это тип...

Поясните алгоритм вычисления синуса по ряду Тейлора
void sinus1(int x1) { float a, s1; a = x1; s1 = x1; for (int i = 1; i &lt;= 15; i++) ...

Меню для программы Числа Фибоначчи, ряд Тейлора
//--------------------------------------------------------------------------- #pragma hdrstop...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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