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

Найти значение косинуса по формуле тейлора - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
vikichocolate
 Аватар для vikichocolate
25 / 14 / 1
Регистрация: 11.11.2011
Сообщений: 94
13.11.2011, 19:14     Найти значение косинуса по формуле тейлора #1
с точностью eps
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
#include <iostream>
#include <math.h>
using namespace std;
double vozv_v_n_step(double x, int n)
{
    double k=1;
    for(int i=1;i<=n;i++)
    {
    k=k*x;
    }
    return k;
}
int fakt(int n)
{
    int f=1;
    while (n>1)
    {
        f=f*n;
        n--;
    }
    return f;
}
double FunctionName(double x, double eps)
{
    
    double result=0; int i=0;   
    while (abs(result)>eps)   // пока текущее слагаемое больше точности
    {
        result+=(vozv_v_n_step(-1,i)*vozv_v_n_step(x,2*i))/(fakt(2*i)); // сама формула
        i++;
    }
    return result;
}    
 
void main()
{
    cout<<"please, enter x "<<endl;
    double x;double z=0;
    cin>>x;
    cout<<"please, enter n "<<endl;
    int n;
    cin>>n;
    z=FunctionName(x,eps);
    cout<<"result="<<z<<endl;
}






выводит ноль при любых иксах...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rikk
45 / 5 / 1
Регистрация: 10.06.2011
Сообщений: 263
13.11.2011, 19:33     Найти значение косинуса по формуле тейлора #2
помню с таким мучился к экзамену, люди добрые помогли с этим)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include<conio.h> 
int main()
{
    int N = 2*20;
    double x = 0.5, mx2 = -x*x;
 
    int i;
    double part = 1, sum = 1;
    for (i = 2; i < N; i+=2) {
        part *= mx2/((i-1)*i);
        sum += part;
    }
    printf("cos(%lf) = %lf\n", x, sum);
    
    return getch();
}
где double x = 0.5 это изменяемое значение, т.е. от чего тебе надо косинус найти
vikichocolate
 Аватар для vikichocolate
25 / 14 / 1
Регистрация: 11.11.2011
Сообщений: 94
13.11.2011, 19:39  [ТС]     Найти значение косинуса по формуле тейлора #3
спасибо огромное, но наверное я не точно задание описала. там еще точность фигурирует....
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
13.11.2011, 20:00     Найти значение косинуса по формуле тейлора #4
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
#include <stdio.h>
#include <math.h>
#define M_PI ((double)3.141592653589793)
 
double factorial(double x)
{
    if (x > 1)
        return x * factorial(x - 1);
    else
        return 1;
}
 
double mcos(double x, double eps)
{
    int i = 1, z = 1;
    double res = 1, x0, tmp = 1;
    x = fmod(x, M_PI * 2);
    x0 = x;
    x *= x;
 
    while(tmp > eps)
    {
        z = -z;         
        tmp = x / factorial((double)(i * 2));
        res += z *tmp;
        x *= x0 * x0;
        i++; 
    }
    return res;
}
 
int main()
{
    double x, eps = 1e-5;
    printf("vvedite x: ");
    scanf("%lf", &x);
    printf("cos(%lg) = %lf", x, mcos(x, eps));
    getchar();
    getchar();
    return 0; 
}
vikichocolate
 Аватар для vikichocolate
25 / 14 / 1
Регистрация: 11.11.2011
Сообщений: 94
13.11.2011, 20:05  [ТС]     Найти значение косинуса по формуле тейлора #5
спасибо огромное
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
13.11.2011, 20:12     Найти значение косинуса по формуле тейлора #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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <math.h>
using namespace std;
 
double power(double x, long n)
{
    double k = 1;
    for(int i = 1; i <= n; i++)
    {
        k *= x;
    }
    return k;
}
 
double fakt(long n)
{
    double f = 1;
    while (n > 1)
    {
        f *= n;
        n--;
    }
    return f;
}
 
double FunctionName(double x, double eps)
{
    double result = 1, tmp = 0; 
    long i = 1;   
    while (abs(result - tmp) > eps)   
    {
        tmp = result;
        result += power(-1, i) * power(x , 2 * i) / fakt(2 * i); 
        i++;
    }
    return result;
}    
 
int main(void)
{
    cout << "please, enter x " << endl;
    double x, eps = 1e-5, z;
    cin >> x;
    z = FunctionName(x, eps);
    cout << "result = " << z << endl;
    system("pause");
}
Yandex
Объявления
13.11.2011, 20:12     Найти значение косинуса по формуле тейлора
Ответ Создать тему
Опции темы

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