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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
#1

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

24.11.2012, 01:56. Просмотров 574. Ответов 13
Метки нет (Все метки)

посчитать sin2,5x2 в каждой точке отрезка [0; 4], отрезок делится на 5 частей. вместо суммы выводит нули, что исправить нужно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream.h>
#include<math.h>
using namespace std;
int main()
{ int k=1;
double a1,a2,n, i=a1, a,d,s=0,e;
cout<<"a1 = "; cin>>a1;
cout<<"a2 = "; cin>>a2;
cout<<"n = "; cin>>n;
cout<<"e = "; cin>>e;
d=(a2+1-a1)/n;
a=2.5*pow(i,2);
for (i=a1; i<=a2; i+=d)
{ while (fabs(a)>=e)
{ a*=(a*pow(a,2))/((2*k)*(2*k+1)*(-1)); 
s+=a; k++;}
cout<<"a1="<<i<<" s="<<s<<endl;
}
return 0;}
Добавлено через 3 часа 19 минут
почему вообще в накоплении суммы может получиться нуль?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2012, 01:56     Посчитать ряд тейлора в точках
Посмотрите здесь:

Ряд Тейлора на С++ C++
посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена C++
ln - ряд Тейлора C++
C++ Ряд Тейлора С++
C++ ряд Тейлора
Сосчитать ряд тейлора в точках C++
ряд Тейлора C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
24.11.2012, 11:40     Посчитать ряд тейлора в точках #2
У меня вообще выдает ошибку, потому что ты i инициализируешь a1 раньше, чем инициализируешь саму a1

Добавлено через 1 минуту
Вообще очень хорошая вещь дебаггер, ставишь точку останова, и смотришь, где у тебя что не так, по шагам в программе.
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
24.11.2012, 14:20  [ТС]     Посчитать ряд тейлора в точках #3
немного перепилил код, ошибок нет, с инициализацией вроде не напутал. только на выводе s равны нулю. походу в цикле ошибка, но я не вижу какая
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
int main()
{ int k=1,a,b,n;
float i=1.0, a1,an=0,d,s=0,e;
cout<<"a = "; cin>>a;
cout<<"b = "; cin>>b;
cout<<"n = "; cin>>n;
cout<<"e = "; cin>>e;
b++; d=(b-a)/n;
cout<<setprecision(4); 
for (i=a; i<=b-1; i+=d)
{ a1=2.5*pow(i,2);
 while (fabs(an)>=e)
{ an=a1*(pow(a1,2)/((2*k)*(2*k+1)))*(-1);
a1=an;  s+=an; k++;
} 
cout<<"x="<<i<<" s="<<s<<endl; } 
return 0;}
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
24.11.2012, 18:57     Посчитать ряд тейлора в точках #4
a, b - концы отрезка, а что за переменные n и e?
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
24.11.2012, 19:57  [ТС]     Посчитать ряд тейлора в точках #5
е это точность, ряд считается пока не достигнута точность, отрезок [a; b] делится на n частей. в каждой точке нужно посчитать ряд
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
24.11.2012, 23:04     Посчитать ряд тейлора в точках #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
#include<math.h>
#include<iomanip>
using namespace std;
int main()
{ 
    int k=1;
    double i=1, a1=0,an=0,d=0,s=0,e=0,a=0,b=0,n=0;
    cout<<"a = "; cin>>a;
    cout<<"b = "; cin>>b;
    cout<<"n = "; cin>>n;
    cout<<"e = "; cin>>e;
    b++; 
    d=(b-a)/n;
    cout<<setprecision(4); 
    for (i=a; i<=b-1; i+=d)
    { 
        a1=2.5*pow(i,2);
        while (fabs(an)>=e)
        { 
            an=a1*(pow(a1,2)/((2*k)*(2*k+1)))*(-1);
            a1=an;  
            s+=an;
            k++;
        } 
        cout<<"x="<<i<<" s="<<s<<endl; 
    } 
    system ("pause");
    return 0;
}

выводит s=0; Проблема вот в чем, он не разу не зашел в while, потому что считает постоянно fabs(an), а an=0 и нигде не инициализируется

Добавлено через 3 минуты
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
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
int main()
{ 
    int k=1;
    double i=1, a1=0,an=0,d=0,s=0,e=0,a=0,b=0,n=0;
    cout<<"a = "; cin>>a;
    cout<<"b = "; cin>>b;
    cout<<"n = "; cin>>n;
    cout<<"e = "; cin>>e;
    b++; 
    d=(b-a)/n;
    cout<<setprecision(4); 
    for (i=a; i<=b-1; i+=d)
    { 
        a1=2.5*pow(i,2);
        an=a1*(pow(a1,2)/((2*k)*(2*k+1)))*(-1);
        while (fabs(an)>e)
        { 
            an=a1*(pow(a1,2)/((2*k)*(2*k+1)))*(-1);
            a1=an;  
            s+=an;
            k++;
        } 
        cout<<"x="<<i<<" s="<<s<<endl; 
    } 
    system ("pause");
    return 0;
}

Работает, выводит сумму, правда я не проверял правильность ряда)) это уже смотри сам
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
24.11.2012, 23:37  [ТС]     Посчитать ряд тейлора в точках #7
подрехтовал свой код,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
#include<math.h>
#include<iomanip>
long double main()
{ long double k=1,a,b,n,i=1.0, a1,d,s=0,e;
cout<<"a = "; cin>>a;
cout<<"b = "; cin>>b;
cout<<"n = "; cin>>n;
cout<<"e = "; cin>>e;
b++; d=(b-a)/n;
cout<<setprecision(4); 
for (i=a; i<=(b-1); i+=d)
{ a1=2.5*pow(i,2);
 while (fabs(a1)>=e)
{ s+=a1;  k++; 
a1*=pow(a1,2)/((2*k)*(2*k+1))*(-1); } 
cout<<"x="<<i<<" s="<<s<<endl; } 
return 0;}
отрезок [0; 4], точность 0,001. выводит первые три значения, потом зависает, походу слишком большое значение получается. в паскале например такая ошибка называется Floating point overflow, если я не протупил. с твоим кодом то же самое, только значения немного различаются.
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
25.11.2012, 00:46     Посчитать ряд тейлора в точках #8
Нет, зависает он, потому что зацикливается в while. И ещё довольно странная запись long double main()... Каким компилятором пользуетесь? У меня Visual Studio Express 2012, там отслеживаются ошибки на раз, особенно debug удобен
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
25.11.2012, 01:15  [ТС]     Посчитать ряд тейлора в точках #9
у меня c-free 4.0, компилятор в нем mingw2.95. почему вайл зацикливается? точность другая должна быть?
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
25.11.2012, 11:02     Посчитать ряд тейлора в точках #10
Зависает, потому что через 2 итерации цикла for начинает выполняться while, и a1 очень сильно увеличивается, и условие начинает выполняться всегда

Добавлено через 14 минут
К тому же на первой итерации в любом случае получается 0, на отрезке начинающемся от 0. Потому что i=0 и i^2 тоже 0, и ответ 0.

У меня всё выполняется, совет - поэкспериментируй с вводом e. Неизвестно, как твой компилятор воспринимает, 0,001 или 0.001 (с точкой или с запятой)
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
25.11.2012, 13:50  [ТС]     Посчитать ряд тейлора в точках #11
при точности 0,001 с запятой считает все 5 значений, а при вводе той же точности с точкой считает первые три и зависает
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
26.11.2012, 09:44     Посчитать ряд тейлора в точках #12
Потому что значение с точкой твой компилятор не воспринимает, для него это 0, поэтому он не считает и не будет считать, потому что зацикливается, это как в Excel, там вводится десятичный формат только через запятую, через точку он не воспринимает.
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
26.11.2012, 11:27  [ТС]     Посчитать ряд тейлора в точках #13
чтоб лишний раз не париться с точкой или запятой решил поступить проще. компилятор сам будет точности считать
C++
1
2
3
cout<<"e = "; cin>>e; //основание точности
cout<<"l = "; cin>>l; //показатель степени точности
e=pow(e,l);
допустим при точности 10-4 все отлично считается
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2012, 13:37     Посчитать ряд тейлора в точках
Еще ссылки по теме:

ряд Тейлора C++
Ряд Тейлора C++
C++ Ряд тейлора
Посчитать значения функции в точках, заданных массивом C++

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

Или воспользуйтесь поиском по форуму:
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
26.11.2012, 13:37     Посчитать ряд тейлора в точках #14
Ну вот, раз всё считается, значит всё, инцидент исцерпан
Yandex
Объявления
26.11.2012, 13:37     Посчитать ряд тейлора в точках
Ответ Создать тему
Опции темы

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