Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 29

Вычисление значения функции cos(x)^2 разложением в ряд Тейлора

22.04.2018, 13:53. Показов 1903. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите написать код для вычисления в цикле for. Мне не понятно как записать факториал.
Миниатюры
Вычисление значения функции cos(x)^2 разложением в ряд Тейлора  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.04.2018, 13:53
Ответы с готовыми решениями:

Вычисление значения функции cos(x) заданной разложением в ряд Тейлора
П.5.18.Правил Запрещено размещать задания и решения в виде картинок и других файлов с их текстом. Перепечатайте!

Вычисление значения функции cos(x) заданной разложением в ряд Тейлора
Не могу никак вывести рекурентную формулу.

Вычисление значения функции cos(x) заданной разложением в ряд Тейлора
Пытаюсь вычислить косинус используя ряд тейлора но постоянно показывает какие-то огромные уж числа #include <iostream> using...

21
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
22.04.2018, 14:07
C++
1
2
3
4
5
6
7
8
9
double factorial(double x)
{
    double rezult = 1;
 
    for (int i = 2; i <= x; ++i)
        rezult *= i;
 
    return rezult;
}
C++
1
cout << factorial(3) << endl;
0
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 29
22.04.2018, 14:13  [ТС]
QuakerRUS, а как это будет выглядеть все вместе? весь пример
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,236
22.04.2018, 15:42
Факториал отдельно считать не надо,
он должен вычисляться через рекуррентные соотношения
См. Вычисление функций разложением в ряд Тейлора
Ваши соотношения
a1=x*x
an+1 = -an*2*2*x*x/(2*n+1)/(2*n+2)
1
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 29
22.04.2018, 21:39  [ТС]
zss, извини, но я видимо глуп и все равно плохо понимаю, не могли бы вы это показать на моем примере?
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()
{
    int i=1, n=0;
    float x=0;
    double r=1, l=0,k;
 
    setlocale(LC_ALL, "rus");
    cout << "Введите значение x= ";
    cin >> x;
    cout<<"Левая часть ";
    cout<<pow(cos(x),2)<<std::endl;
    cout<<"Введите количество повторений ";
    cin>> n;
    
    for (int k=1; k <=n; k++)
    {
        
        cout<<l<<endl;  
    }
    cout<<"Вычисление с помощью for====="<<l<<endl;
return 0; 
}
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
22.04.2018, 22:36
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
#include <iostream>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
int main()
{
    double x, rezult = 0, t = 2, xp = 1, f = 2, b = 1;
 
    cin >> x;
    
    for (int i = 3; b > 1E-12; i += 2)
    {
        xp *= x * x;
        b = t * xp / f;
        t *= 4;
        f *= i * (i + 1);
        rezult += i % 4 == 3 ? b : -b;
    }
 
    rezult = 1 - fabs(rezult);
    cout << rezult << endl;
 
    system("pause");
    return 0;
}
1
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 29
22.04.2018, 22:49  [ТС]
QuakerRUS, я попытался подстроить немного под себя и видимо испортил
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
#include <iostream>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
int main()
{
    double x, rezult = 0, t = 2, xp = 1, f = 2, b = 1,n;
    setlocale(LC_ALL, "rus");
        cout << "Введите значение х= ";
        cin >> x;
        cout<<"Левая часть ";
        cout<<pow(cos(x),2)<<std::endl;
        
        cout << "Введите кол-во повторений n= ";
        cin >> n;
    
    for (int i = 3; i <=n; b>1E-12; i += 2)  //------в этой строке выдает ошибку
    {
        xp *= x * x;
        b = t * xp / f;
        t *= 4;
        f *= i * (i + 1);
        rezult += i % 4 == 3 ? b : -b;
        cout<<rezult<<endl;
    }
    rezult = 1 - fabs(rezult);
    cout <<"Вычисление с помощью FOR= "<< rezult << endl;
 
    system("pause");
    return 0;
}
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
22.04.2018, 22:53
Imaoooo, n не нужна.
0
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 29
22.04.2018, 22:54  [ТС]
QuakerRUS, а как тогда в данном случае сделать так, чтобы можно было задавать свое количество повторений?
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
22.04.2018, 22:56
Imaoooo, а зачем? Это ряд Тейлора, он бесконечный. Предел точности задается через b

C++
1
for (int i = 3; b > 1E-12; i += 2)
Цикл перестанет высчитываться, когда b будет меньше чем 0.000000000001
0
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 29
22.04.2018, 23:00  [ТС]
QuakerRUS, увы мне по заданию надо чтобы вычисляло с заданным количеством повторений, а с погрешностью (как я понимаю b) мне нужно сделать цикл с помощью while/do. Поэтому и спросил как в цикле for сделать с заданным количеством повторений.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
22.04.2018, 23:08
Лучший ответ Сообщение было отмечено Imaoooo как решение

Решение

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
#include <iostream>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
int main()
{
    double x, n, rezult = 0, t = 2, xp = 1, f = 2, b = 1;
 
    cin >> x >> n;
 
    for (int i = 0; i < n; ++i)
    {
        xp *= x * x;
        b = t * xp / f;
        t *= 4;
        f *= (2 * i + 3) * (2 * i + 4);
        rezult += i % 2 == 0 ? b : -b;
    }
 
    rezult = 1 - fabs(rezult);
    cout << rezult << endl;
 
    system("pause");
    return 0;
}
1
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 29
22.04.2018, 23:48  [ТС]
QuakerRUS, если вам еще не надоело, то помогите еще немного (в цикле do/while ряд тейлора должен быть с заданной точностью)

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
47
48
49
#include <iostream>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
int main()
{
    double x, n, rezult = 0, t = 2, xp = 1, f = 2, b = 1,g,m,i;
    setlocale(LC_ALL, "rus");
    cout << "Введите значение x= ";
    cin >> x;
    cout<<"Левая часть ";
    cout<<pow(cos(x),2)<<std::endl;
 
    cout<<"Введите количество повторений ";
    cin>> n;
 
    for (int i = 0; i <= n; ++i)
    {
        xp *= x * x;
        b = t * xp / f;
        t *= 4;
        f *= (2 * i + 3) * (2 * i + 4);
        rezult += i % 2 == 0 ? b : -b;
        g=1-fabs(rezult);
        cout<<g<<endl;
    }
    cout <<"Вычисление с помощью FOR "<< g << endl;
    
    cout <<"Введите точность вычисления ";
    cin >>m;
    do
    {
        xp *= x * x;
        b = t * xp / f;
        t *= 4;
        f *= (2 * i + 3) * (2 * i + 4);
        rezult += i % 2 == 0 ? b : -b;
        g=1-fabs(rezult);
        cout<<g<<endl;  
    }
    while (b>m)
    cout<<"Вычисление с помощью while/do "<<g<<endl;
    
 
    system("pause");
    return 0;
}
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
22.04.2018, 23:52
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
#include <iostream>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
int main()
{
    double x, rezult = 0, t = 2, xp = 1, f = 2, b;
    int i = 0;
 
    cin >> x;
 
    do
    {
        xp *= x * x;
        b = t * xp / f;
        t *= 4;
        f *= (2 * i + 3) * (2 * i + 4);
        rezult += i % 2 == 0 ? b : -b;
        ++i;
    }
    while (b > 1E-12);
 
    rezult = 1 - fabs(rezult);
    cout << rezult << endl;
 
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 29
23.04.2018, 00:44  [ТС]
QuakerRUS, не могли бы вы проверить, сейчас все правильно?

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
47
48
49
50
51
52
#include <iostream>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
int main()
{
    double x, n, rezult = 0, t = 2, xp = 1, f = 2, b = 1,g,m,z;
    int i=0;
    setlocale(LC_ALL, "rus");
    cout << "Введите значение х= ";
    cin >> x;
    cout<<"Левая часть ";
    cout<<pow(cos(x),2)<<std::endl;
 
    cout<<"Введите количество повторений ";
    cin>> n;
 
    for (int i = 0; i <= n; ++i)
    {
        xp *= x * x;
        b = t * xp / f;
        t *= 4;
        f *= (2 * i + 3) * (2 * i + 4);
        rezult += i % 2 == 0 ? b : -b;
        g=1-fabs(rezult);
        cout<<g<<endl;
    }
    cout <<"Вычисление с помощью FOR "<< g << endl;
    
    cout <<"Введите точность измерения ";
    cin >>m;
    do
    {
        xp *= x * x;
        b = t * xp / f;
        t *= 4;
        f *= (2 * i + 3) * (2 * i + 4);
        rezult += i % 2 == 0 ? b : -b;
        ++i;
        cout<<1-fabs(rezult)<<endl;
    }
    while (b > m);
    z = 1 - fabs(rezult);
    cout << z << endl;
    cout<<"Вычисление с помощью while/do "<<z<<endl;
    
 
    system("pause");
    return 0;
}
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
23.04.2018, 00:48
Imaoooo, во втором варианте начальные значения для rezult, t, xp, f не указали.
1
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 29
23.04.2018, 00:54  [ТС]
QuakerRUS, благодарю.
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,236
23.04.2018, 06:20
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
#include <iostream>
#include <cstdlib>
#include <cmath>
 
using namespace std;
double MyCos2(double x,double eps)
{
    int n=1;
    double an=x*x;
    double s=0;
    do
    {
        s+=an;
        an*=-4*x*x/( (2.*n+1.)*(2.*n+2.) );
        n++;
    }while(fabs(an)>eps);
    return 1.0-s;
}
int main()
{
    double x;
    cin >> x;
    double rezult = MyCos2(x,1e-10);
    cout << rezult << ' '<<cos(x)*cos(x)<<endl;
 
    system("pause");
    return 0;
}
QuakerRUS, сравните с результатом Вашего решения,
что-то мне кажется он будет другой....
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
23.04.2018, 11:45
zss, нет, все совпало. Почему вы думаете, что он будет другим?

Добавлено через 23 минуты
zss, ваш вариант лучше. Он более интуитивно-понятный. И я не догадался через умножение менять знак на противоположный.
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,236
23.04.2018, 15:51
Цитата Сообщение от QuakerRUS Посмотреть сообщение
нет, все совпало
Я заметил, что формулы слегка разные,
но, оказалось, что Вы начинаете суммирование с n=0,
а я - с n=1 (как написано в формуле ТС).
Поэтому результат одинаковый.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.04.2018, 15:51
Помогаю со студенческими работами здесь

Вычисление функции cos(x) разложением в ряд Тейлора
условие: разложить косинус по формуле Тейлора код: double cosin(double x,double pogr){ double k=-1;double chlen=0;double n=1; ...

Вычисление функции cos(x) разложением в ряд Тейлора
Описать функцию Cos1(x,eps)2 вещественного типа (параметры x, eps — вещественные, eps &gt; 0), находящую приближенное значение функции...

Вычисление значения функции разложением в ряд Тейлора
Разработать программу, состоящую из трех частей: – вычисление значения функции, описанной в левой части ва¬рианта; – вычисление суммы...

Вычисление значения функции разложением в ряд Тейлора
Нужна хелпа . Не могу понять почему не пашет. #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

Вычисление значения функции разложением в ряд Тейлора
П.5.4.Правил Запрещено создавать темы с бессмысленными названиями вроде &quot;Помогите!&quot;, &quot;Вопрос&quot; и т.п. П.5.18.Правил ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru