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

Ряд тейлора - C++

Восстановить пароль Регистрация
 
takewa
 Аватар для takewa
10 / 7 / 1
Регистрация: 15.08.2010
Сообщений: 372
21.12.2012, 01:19     Ряд тейлора #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
#include <iostream>
#include <iomanip>
#include <float.h>
#include <math.h>
using namespace std;
void dno()
{                                                                                                                                                                                                                        
    const int MaxIter=500;
    double eps,Xn,Xk,dx;
    cout<<"Xn";cin>>Xn;
    cout<<"Xk";cin>>Xk;
    cout<<"dx";cin>>dx;
    cout<<"eps";cin>>eps;
    cout<<"__________________________________"<<endl;
    cout<<"|"<<setw(5)<<"x"<<"|"<<setw(11)<<"y"<<"|"<<setw(5)<<"n"<<"|"<<setw(5)<<"sin(x)/x"<<"|"<<endl;
    cout<<"__________________________________"<<endl;
    int n=1;
    for(double x=Xn;x<=Xk;x+=dx)
    {
        double ch=-1/x,y=0;
        for(n=0;fabs(ch)>eps&&n<=MaxIter;n++)
        {
            y+=ch;
            ch*=**************;                                                                                                                                                                                                                                                                                  
        }
        cout<<"|"<<setw(5)<<x<<"|"<<setw(11)<<y<<"|"<<setw(5)<<n<<"|"<<setw(5)<<sin(x)/x<<"|"<<endl;
        cout<<"__________________________________"<<endl;
    }
}
int main()
{
    dno();
    return 0;
}
очень прошу помочь с разложением ряда Тейлора, пользовался поиском, все не то оказалось, а то что нашел не айс. после разложения функции в ряд Тейлора, Y и Sin(x)/x должны совпадать!!
Миниатюры
Ряд тейлора  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
radamaerl
27 / 6 / 1
Регистрация: 20.12.2012
Сообщений: 39
21.12.2012, 01:45     Ряд тейлора #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
float sum(float x, float eps)
 {
        int i=1;
        s=0;
        elem=1;
        while(fabs(elem)>eps)
        {
            s+=elem;
            elem*=-1*pow(x,2)/((2*i)*(2*i+1));
            i++;
            }
        return s;
        
        }
на через функцию
и читай МатАн, не обязаны совпадать значения, тем более ряд знакопеременный
не проверял но кажется четко
takewa
 Аватар для takewa
10 / 7 / 1
Регистрация: 15.08.2010
Сообщений: 372
21.12.2012, 02:30  [ТС]     Ряд тейлора #3
Цитата Сообщение от radamaerl Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
float sum(float x, float eps)
 {
        int i=1;
        s=0;
        elem=1;
        while(fabs(elem)>eps)
        {
            s+=elem;
            elem*=-1*pow(x,2)/((2*i)*(2*i+1));
            i++;
            }
        return s;
        
        }
на через функцию
и читай МатАн, не обязаны совпадать значения, тем более ряд знакопеременный
не проверял но кажется четко
Что то я не особо понял, что тут чем является... если даже брать отдельно -1*pow(x,2)/((2*i)*(2*i+1)) и посдавлять в мой код, эффекту 0.

Не по теме:

мне было намного прощу структуру написать чем Ряд тейлора...

radamaerl
27 / 6 / 1
Регистрация: 20.12.2012
Сообщений: 39
21.12.2012, 11:38     Ряд тейлора #4
sum это сумма ряда
х это х
eps это эпсилон то есть точность с которой считать ряд (как считать ряд с заданной точностью погугли)
моя функция считает для заданного x значение ряда с заданной точностью
тебе что нужно?
вывести в таблице значения функции посчитанной через ряд и напрямую с каким то шагом для x?

вот пример функции
в примере x=1, eps=0.001
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 <cstdlib>
#include <iostream>
#include <math.h>
 
using namespace std;
 
  float sum(float x, float eps)
 {
        int i=1;
        float s=0;
        float elem=1;
        while(fabs(elem)>eps)
        {
            s+=elem;
            elem*=-1*pow(x,2)/((2*i)*(2*i+1));
            i++;
            }
        return s;
        
        }
 
int main(int argc, char *argv[])
{
  
    cout<<sin(1)<<'\n';
    cout<<sum(1,0.001);
    cout << "Press the enter key to continue ...";
    cin.get();
    return EXIT_SUCCESS;
}
значение почти точное, чем меньше эпсилон тем точнее считает ряд
чего у тебя количество членов ряда ограничено 500?
takewa
 Аватар для takewa
10 / 7 / 1
Регистрация: 15.08.2010
Сообщений: 372
23.12.2012, 14:45  [ТС]     Ряд тейлора #5
Цитата Сообщение от radamaerl Посмотреть сообщение
sum это сумма ряда
х это х
eps это эпсилон то есть точность с которой считать ряд (как считать ряд с заданной точностью погугли)
моя функция считает для заданного x значение ряда с заданной точностью
тебе что нужно?
вывести в таблице значения функции посчитанной через ряд и напрямую с каким то шагом для x?

вот пример функции
в примере x=1, eps=0.001
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 <cstdlib>
#include <iostream>
#include <math.h>
 
using namespace std;
 
  float sum(float x, float eps)
 {
        int i=1;
        float s=0;
        float elem=1;
        while(fabs(elem)>eps)
        {
            s+=elem;
            elem*=-1*pow(x,2)/((2*i)*(2*i+1));
            i++;
            }
        return s;
        
        }
 
int main(int argc, char *argv[])
{
  
    cout<<sin(1)<<'\n';
    cout<<sum(1,0.001);
    cout << "Press the enter key to continue ...";
    cin.get();
    return EXIT_SUCCESS;
}
значение почти точное, чем меньше эпсилон тем точнее считает ряд
чего у тебя количество членов ряда ограничено 500?
Сори что не отвечал долго. Суть решения понял, про члены ряда я хз, на 1ому курсе препод сказал 500 и все) Да с шагом dx

Добавлено через 21 минуту
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
#include <iostream>
#include <iomanip>
#include <float.h>
#include <math.h>
using namespace std;
void dno()
{                                                                                                                                                                                                                        
    const int MaxIter=500;
    double eps,Xn,Xk,dx;
    cout<<"Xn";cin>>Xn;
    cout<<"Xk";cin>>Xk;
    cout<<"dx";cin>>dx;
    cout<<"eps";cin>>eps;
    cout<<"__________________________________"<<endl;
    cout<<"|"<<setw(5)<<"x"<<"|"<<setw(11)<<"y"<<"|"<<setw(5)<<"n"<<"|"<<setw(5)<<"sin(x)/x"<<"|"<<endl;
    cout<<"__________________________________"<<endl;
    int n=1;int i=1;
    for(double x=Xn;x<=Xk;x+=dx)
    {
        double ch=-1/x,y=0;
        for(n=0;fabs(ch)>eps&&n<=MaxIter;n++)
        {
            y+=ch;
            ch*=-1*pow(x,2)/((2*i)*(2*i+1));    
            i++;
        }
        cout<<"|"<<setw(5)<<x<<"|"<<setw(11)<<y<<"|"<<setw(5)<<n<<"|"<<setw(5)<<sin(x)/x<<"|"<<endl;
        cout<<"__________________________________"<<endl;
    }
}
int main()
{
    dno();
    return 0;
}
Yandex
Объявления
23.12.2012, 14:45     Ряд тейлора
Ответ Создать тему
Опции темы

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