0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 29
1

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

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

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

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

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

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

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

21
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,793
22.04.2018, 14:07 2
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  [ТС] 3
QuakerRUS, а как это будет выглядеть все вместе? весь пример
0
Модератор
Эксперт С++
13322 / 10626 / 6350
Регистрация: 18.12.2011
Сообщений: 28,375
22.04.2018, 15:42 4
Факториал отдельно считать не надо,
он должен вычисляться через рекуррентные соотношения
См. Вычисление функций разложением в ряд Тейлора
Ваши соотношения
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  [ТС] 5
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
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,793
22.04.2018, 22:36 6
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  [ТС] 7
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
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,793
22.04.2018, 22:53 8
Imaoooo, n не нужна.
0
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 29
22.04.2018, 22:54  [ТС] 9
QuakerRUS, а как тогда в данном случае сделать так, чтобы можно было задавать свое количество повторений?
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,793
22.04.2018, 22:56 10
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  [ТС] 11
QuakerRUS, увы мне по заданию надо чтобы вычисляло с заданным количеством повторений, а с погрешностью (как я понимаю b) мне нужно сделать цикл с помощью while/do. Поэтому и спросил как в цикле for сделать с заданным количеством повторений.
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,793
22.04.2018, 23:08 12
Лучший ответ Сообщение было отмечено 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  [ТС] 13
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
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,793
22.04.2018, 23:52 14
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  [ТС] 15
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
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,793
23.04.2018, 00:48 16
Imaoooo, во втором варианте начальные значения для rezult, t, xp, f не указали.
1
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 29
23.04.2018, 00:54  [ТС] 17
QuakerRUS, благодарю.
0
Модератор
Эксперт С++
13322 / 10626 / 6350
Регистрация: 18.12.2011
Сообщений: 28,375
23.04.2018, 06:20 18
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
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,793
23.04.2018, 11:45 19
zss, нет, все совпало. Почему вы думаете, что он будет другим?

Добавлено через 23 минуты
zss, ваш вариант лучше. Он более интуитивно-понятный. И я не догадался через умножение менять знак на противоположный.
0
Модератор
Эксперт С++
13322 / 10626 / 6350
Регистрация: 18.12.2011
Сообщений: 28,375
23.04.2018, 15:51 20
Цитата Сообщение от QuakerRUS Посмотреть сообщение
нет, все совпало
Я заметил, что формулы слегка разные,
но, оказалось, что Вы начинаете суммирование с n=0,
а я - с n=1 (как написано в формуле ТС).
Поэтому результат одинаковый.
0
23.04.2018, 15:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2018, 15:51
Помогаю со студенческими работами здесь

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

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

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

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

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

Вычисление значения функции разложением в ряд Тейлора
Помогите написать код. ln \left(1 - x \right) = - \sum_{n=1}^{\infty} \frac{{x}^{n}}{n} = -...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru