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

Сосчитать ряд тейлора в точках - C++

Восстановить пароль Регистрация
 
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
11.12.2012, 02:08     Сосчитать ряд тейлора в точках #1
функция е4, отрезок [0; 4], точность 10-4, отрезок делится на 5 узловых точек, в каждой точке посчитать ряд.
собственно сумма считается, но требуется вывести количество итераций в каждой точке, но по неизвестным мне причинам переменная w не меняется. что в коде не так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream.h>//потоковый ввод-вывод
#include<math.h>//математический модуль
#include<iomanip.h>//манипулятор
int main()
{ 
double i,j=1,k=3,a,b,h,n,a2,an=0,e,p,s,w=2;//j - переменная факториала, k-счетчик степени, w - счетчик итераций
cout<<"a = "; cin>>a;//начало отрезка
cout<<"b = "; cin>>b;//конец отрезка
cout<<"e = "; cin>>e;//точность
cout<<"p = "; cin>>p;//степень точности
cout<<"n = "; cin>>n;//количество узловых точек
h=(b-a)/n;//находим шаг для вычисления
cout<<setprecision(4);//устанавливаем количество знаков после запятой, для чего был подключен манипулятор
for(i=a; i<=b; i+=h)//для отрезка от a до b с шагом h
{ a2=1+2*pow(i,4)/j; s=a2; //присваиваем a2 значение второго слагаемого, s присваиваем значение a2
while (fabs(an)>e)//пока не достигнута точность
{ j*=k;//считаем факториал
an=pow(a2,k)/j;//считем следующее слагаемое
 s+=an;//накапливаем сумму
 k++; w++;} //увеличиваем степень
cout<<"x = "<<i<<"\t"<<"s = "<<s<<"\t"<<"w = "<<w<<endl;//выводим точку и значение ряда в ней
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2012, 02:08     Сосчитать ряд тейлора в точках
Посмотрите здесь:

Ряд Тейлора C++
вычислить функцию с помощью разложения в ряд.(Ряд Тейлора) C++
C++ Вычисление функции через разложение в ряд (Ряд Тейлора)
C++ Ряд Тейлора
C++ Посчитать ряд тейлора в точках
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
11.12.2012, 02:28     Сосчитать ряд тейлора в точках #2
Так на вскидку, а зачем счетчики типа double?
А вы уверены что вы попадаете хоть раз в цикл while? 0>e ???
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
11.12.2012, 14:52  [ТС]     Сосчитать ряд тейлора в точках #3
присваивание вот тут идет
C++
1
2
for(i=a; i<=b; i+=h)//для отрезка от a до b с шагом h
{ a2=1+2*pow(i,4)/j; s=a2;
сумма считается. в вайл он вроде бы входит но счетчик не меняется. переделал код
C++
1
b,h,n,a2,an,e,p,s,w=2;
, итог тот же как на скрине
Миниатюры
Сосчитать ряд тейлора в точках  
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
11.12.2012, 16:55     Сосчитать ряд тейлора в точках #4
fabs(an)>e. an=0 на первом шагу, как онг может попасть в while?
у вас у e > 0 в любом случае.
Поставьте в while оператор вывода на экран и не гадайте.
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
11.12.2012, 17:04  [ТС]     Сосчитать ряд тейлора в точках #5
перепилил под do while
C++
1
2
3
4
5
do { j*=k;
an=pow(a2,k)/j;
 a2=an; s+=an; 
k++; w++; } 
 while (fabs(an)>=e);
итог на скрине. смущает что итерации на одну растут, но значение ряда различается
Миниатюры
Сосчитать ряд тейлора в точках  
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
11.12.2012, 23:39     Сосчитать ряд тейлора в точках #6
Цитата Сообщение от Дмитрий 93 Посмотреть сообщение
итог на скрине. смущает что итерации на одну растут, но значение ряда различается
А результат не смущает, то что в т.4 он равен exp(512)? Ищите ошибки в реализации.
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
12.12.2012, 00:09  [ТС]     Сосчитать ряд тейлора в точках #7
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.h>//потоковый ввод-вывод
#include<math.h>//математический модуль
#include<iomanip.h>//манипулятор
int main()
{ 
double i=1,j=1,k=2,a=0,b=0,h=0,n=0,a2=0,an=0,e=0,p=0,s=0.0;// int w=3;//j - переменная факториала, k-счетчик степени, w - счетчик итераций
cout<<"a = "; cin>>a;//начало отрезка
cout<<"b = "; cin>>b;//конец отрезка
cout<<"e = "; cin>>e;//точность
cout<<"p = "; cin>>p;//степень точности
cout<<"n = "; cin>>n;//количество узловых точек
h=(b-a)/n;//находим шаг для вычисления
e=pow(e,p);
cout<<setprecision(4);//устанавливаем количество знаков после запятой, для чего был подключен манипулятор
for(i=a; i<=b; i+=h)//для отрезка от a до b с шагом h
{ a2=2*pow(i,4)/j; s=a2; //присваиваем a2 значение второго слагаемого, s присваиваем значение a2
//пока не достигнута точность
do { j*=k;//считаем факториал
an=pow(a2,k)/j;//считаем следующее слагаемое
 s+=an;//накапливаем сумму
 k++; } //увеличиваем степень
 while (fabs(an)>=e); //пока не достигнута точность
 s++;//ряд экспоненты это 1+х+х[SUP]2[/SUP]/2!+... а в присваивании единицы нет
cout<<"x = "<<i<<"\t"<<"s = "<<s<<"\t"<<"iterations = "<<k<<endl;//выводим точку и значение ряда в ней
}
}
итог опять же на скрине, и на этот раз я ошибки не вижу. в общем нужна помощь ребят
Миниатюры
Сосчитать ряд тейлора в точках  
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
12.12.2012, 00:43     Сосчитать ряд тейлора в точках #8
А вы уверены в том, что правильно функцию разложили в ряд?
Миниатюры
Сосчитать ряд тейлора в точках  
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
12.12.2012, 01:00  [ТС]     Сосчитать ряд тейлора в точках #9
разложил правильно 1+х+х2/2!+х3/3! и так далее
что мне в коде исправить?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2012, 01:40     Сосчитать ряд тейлора в точках
Еще ссылки по теме:

Ряд Тейлора C++
C++ С++ Ряд Тейлора
C++ Ряд Тейлора

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

Или воспользуйтесь поиском по форуму:
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
12.12.2012, 01:40     Сосчитать ряд тейлора в точках #10
Цитата Сообщение от Дмитрий 93 Посмотреть сообщение
разложил правильно 1+х+х2/2!+х3/3! и так далее
что мне в коде исправить?
Вы картинку смотрели? Порядок результата видели, например для т.2? И посмотрите свой расчет.

Добавлено через 7 минут
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
#include<iostream> //потоковый ввод-вывод
#include<math.h> //математический модуль
#include<iomanip> //манипулятор
using namespace std;
int main()
{
    double x=1,fact=1,k=2,a=0,
                        b=4,h=0,
                        n=5,a2=0,an=0,
                        e=10,
                        p=-4,s=0.0;// int w=3;//j - переменная факториала, k-счетчик степени, w - счетчик итераций
    /*cout<<"a = ";
    cin>>a;//начало отрезка
    cout<<"b = ";
    cin>>b;//конец отрезка
    cout<<"e = ";
    cin>>e;//точность
    cout<<"p = ";
    cin>>p;//степень точности
    cout<<"n = ";
    cin>>n;//количество узловых точек
    */
     
    h=(b-a)/n;//находим шаг для вычисления
    e=pow(e,p);
    cout <<"e="<<e<<endl;
    cout<<setprecision(4);//устанавливаем количество знаков после запятой, для чего был подключен манипулятор
    for(x=a; x<=b; x+=h) { //для отрезка от a до b с шагом h
        a2=2*pow(x,4)/fact;
        s=a2; //присваиваем a2 значение второго слагаемого, s присваиваем значение a2
//пока не достигнута точность
        do {
            fact*=k;//считаем факториал
            an=pow(a2,k)/fact;//считаем следующее слагаемое
            s+=an;//накапливаем сумму
            k++;
        } //увеличиваем степень
        while (fabs(an)>=e); //пока не достигнута точность
        s++;//ряд экспоненты это 1+х+х[SUP]2[/SUP]/2!+... а в присваивании единицы нет
        cout<<"x = "<<x<<"\t"<<"s = "<<s<<"\t"<<"iterations = "<<k<<endl;//выводим точку и значение ряда в ней
        fact=1; k=1; s=0; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    }
}
Считает все равно не правильно, но правильней чем у вас

Добавлено через 6 минут
fact=1; k=2; s=0;
а вот теперь все.
Yandex
Объявления
12.12.2012, 01:40     Сосчитать ряд тейлора в точках
Ответ Создать тему
Опции темы

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