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

посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.65
Shevva
 Аватар для Shevva
17 / 17 / 0
Регистрация: 13.09.2009
Сообщений: 140
08.09.2011, 19:41     посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена #1
Всем доброго времени суток, у меня возникла небольшая проблема, нужно посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена, я кое-что написал, но чёт не так, заранее благодарен за помощь
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h> 
#include<iostream>
#include <math.h>
using namespace std;
int main() 
{ 
  double n, i, x = 1; 
 cout<<"n = ";
cin>>n; 
  
 
for (i = 1; i <= n; i++) 
{x *= i; 
i++;}
  cout<<pow(-5, i)/x<<endl;
  
 system("pause");
 return 0; 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2011, 19:41     посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена
Посмотрите здесь:

вычислить функцию с помощью разложения в ряд.(Ряд Тейлора) C++
C++ Вычисление функции через разложение в ряд (Ряд Тейлора)
C++ Посчитать ряд тейлора в точках
C++ нахождение exp(-x) разложением в ряд Тейлора не используя эпсилон
C++ Провести программную реализацию расчета приблизительного значения функции y, разложив функцию в ряд Тейлора
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
08.09.2011, 20:16     посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена #2
Далось вам это pow(). Надо экономнее:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
using namespace std;
 
int main()
{
  double i, sum, p, x = -5;
  int n;
  cout << "n = ";
  cin >> n;
  sum = p = 1;
  for (i = 1; i <= n; i++)
  {
      p *= x/i;
      sum += p;
  }
  cout << sum << endl;
  system("pause");
  return 0;
}
Цитата Сообщение от Shevva Посмотреть сообщение
нужно посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена
Ошибка огромная будет, берите n побольше (больше 100). А вообще, так как при x=-5 ряд становится числовым рядом Лейбница, точность вычисления можно свести к любой наперед заданной погрешности
Shevva
 Аватар для Shevva
17 / 17 / 0
Регистрация: 13.09.2009
Сообщений: 140
08.09.2011, 20:25  [ТС]     посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена #3
Спасибо)
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
08.09.2011, 20:28     посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена #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
#include <stdio.h> 
 
//exp(x) = 1 + x + (x^2)/2!+(x^3)/3!....+(x^n)/n!+.....
double _exp(const double x, const double precision, int* step)
{
  double dVal, dTemp;
  int nStep = 1;
  for (dVal = 1.0, dTemp = 1.0; dTemp >= precision ; ++nStep)
  {
    dTemp *= x/nStep;
    dVal += dTemp;
  }
  *step = nStep;
  return dVal;
}
 
int main()
{
  int nStep = 0;
  printf("%f ", _exp( -5.0, 1e-6, &nStep));
  printf("with %d steps\n", nStep);
  return 0;
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
08.09.2011, 20:37     посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена #5
alex_x_x, надо заменить
C
1
dTemp >= precision
на
C
1
fabs(dTemp) >= precision
Цитата Сообщение от Thinker Посмотреть сообщение
Ошибка огромная будет, берите n побольше (больше 100). А вообще, так как при x=-5 ряд становится числовым рядом Лейбница, точность вычисления можно свести к любой наперед заданной погрешности
Это я погорячился, достаточно и n > 20 взять
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
08.09.2011, 21:32     посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена #6
Shevva, вы забыли об интервале сходимости ряда. Второе - целые степени по ряду не вычисляются обычно, а простым умножением. В данном случае считаем e в степени 5 и потом 1 делим на полученное число.
А по ряду считаются степени от -1 до 1, то есть меньше 1 по модулю.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
08.09.2011, 21:46     посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена #7
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Shevva, вы забыли об интервале сходимости ряда.
Данный степенной ряд сходится в любой точке числовой оси. Более того, на любом интервале он равномерно сходится.

Цитата Сообщение от ValeryLaptev Посмотреть сообщение
В данном случае считаем e в степени 5 и потом 1 делим на полученное число.
Это совсем не обязательно, можно в любой точке посчитать в силу сходимости ряда

Цитата Сообщение от ValeryLaptev Посмотреть сообщение
А по ряду считаются степени от -1 до 1, то есть меньше 1 по модулю.
Не понял о чем речь идет
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
08.09.2011, 21:52     посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена #8
Thinker, тем не менее при реальных вычислениях степень обычно разделяют на целую и дробную часть и считают отдельно. Целую степень умножением, а дробную - по ряду.
Об этом написано во всех хороших книжках по вычислительным методам.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
08.09.2011, 22:14     посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена #9
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Thinker, тем не менее при реальных вычислениях степень обычно разделяют на целую и дробную часть и считают отдельно. Целую степень умножением, а дробную - по ряду.
Об этом написано во всех хороших книжках по вычислительным методам.
ValeryLaptev, здесь тонкость в том, что мы не знаем точного значения числа e, которое равно
2 + 1/2! + 1/3! + ...,
поэтому просто в степень возвести мы не можем, через ряд нужны вычисления проводить
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
08.09.2011, 22:51     посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена #10
Цитата Сообщение от Thinker Посмотреть сообщение
ValeryLaptev, здесь тонкость в том, что мы не знаем точного значения числа e, которое равно
2 + 1/2! + 1/3! + ...,
поэтому просто в степень возвести мы не можем, через ряд нужны вычисления проводить
Мы знаем число е с некоторой ограниченной точностью.
Например, на Интеле это число равно: 2.71828182845904523536
Более точное при использовании аппаратных типов данных получить невозможно. Причем это число "зашито" в процессоре и загружается в регистр одной командой.
Если мы хотим иметь более точное представление, то нам надо работать с длинными числами, а не аппаратным представлением дробных чисел.
Поэтому целые степени числа е мы вполне можем вычислять с точностью, определенной аппаратурой и режимом округления процессора.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2011, 09:17     посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена
Еще ссылки по теме:

C++ Разложение в ряд Тейлора с заданной точностью
C++ Ряд Тейлора exp(x)
C++ Вычислить значение функции y, разложив cos(x) в ряд Тейлора

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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
09.09.2011, 09:17     посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена #11
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Мы знаем число е с некоторой ограниченной точностью.
Например, на Интеле это число равно: 2.71828182845904523536
Дело не в этом, а в том, что если неточное число возводить в степень, то неточность будет расти. Поэтому в таких случаях находят сумму ряда с любой наперед заданной точностью.
Yandex
Объявления
09.09.2011, 09:17     посчитать exp(-5) разложив в ряд Тейлора с точностью до 5-го члена
Ответ Создать тему
Опции темы

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