Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Ряд Тейлора, #IND

Ответить
Настройки темы
C/C++ - Ряд Тейлора, #IND

Новый участник


Сообщения: 37
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здраствуйте, задача состоит в просчете ряда Тейлора в области от -1 до 1, с вводом шага и точности.
Я уже набросал кое-что, вот код:
Код: Выделить весь код
#include <iostream>
#include <conio.h>
#include <math.h>
#include <iomanip>
using namespace std;
int fct(int arg)
{
return (arg == 1) ? 1 : arg * fct(arg - 1);
}
int main(){
long double f;
double Xstart=-1,Xend=1,x,dx,e,realF;
int n;
cout<<"Vvedite E"<<endl;
cin>>e;
cout<<"Vvedite shag"<<endl;
cin>>dx;
//------
cout<<"--------------------------\n";
cout<<"   x   |      F     | n |  real function) ";
cout<<endl;
//pow(x,n)*fct(n-3)/(fct(3)*fct(n));
for(x=Xstart;x<=Xend; x+=dx)
 {
  f = 0;
  realF = pow((x-1),-4);
  n = 0;
  while(fabs(realF-f)>e)
   {
    n++;
    f -=pow(x,n)*fct(n+3)/(fct(3)*fct(n));
   }
 cout<<setw(6)<<setprecision(2)<<x<<" | "<<setw(10)<<setprecision(7)<<f<<" | ";
 cout<<setw(3)<<n<<" | "<<setw(10)<<setprecision(7)<<realF<<endl;
 
}
	
	getch();
return 0;
}
Но в выводе отображаются не числа, а 1.#IND, подскажите в чем проблема, и правильно ли составлена программа.
Вот сам ряд Тейлора:

Отправлено: 13:53, 26-10-2013

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Ряд явно не сходится к функции:
Код: Выделить весь код
--------------------------
   x   |      F     | n |  real function)
    -1 |          0 |   0 |     0.0625
  -0.9 |          0 |   0 |  0.0767336
  -0.8 |          0 |   0 | 0.09525987
  -0.7 |         -2 |  32 |  0.1197304
  -0.6 |         -2 |  32 |  0.1525879
  -0.5 |   -1.#QNAN |   6 |  0.1975309
  -0.4 |         -2 |  32 |  0.2603082
  -0.3 | -2.353437e-185 |   2 |  0.3501278
  -0.2 | -9.255963e+061 |   2 |  0.4822531
  -0.1 |         -2 |  32 |  0.6830135
-1.4e-016 |         -2 |  32 |          1
   0.1 |         -2 |  32 |   1.524158
   0.2 |         -2 |  32 |   2.441406
   0.3 |         -2 |  32 |   4.164931
   0.4 |         -2 |  32 |   7.716049
   0.5 |         -2 |  32 |         16
   0.6 |         -2 |  32 |    39.0625
   0.7 |         -2 |  32 |   123.4568
   0.8 |         -2 |  32 |        625
   0.9 |         -2 |  32 |      10000
     1 |         -2 |  32 | 4.113761e+062
Если делать как написано на картинке, то получается так:
Код: Выделить весь код
precision=0.1
step=0.1
max(n)=30
--------------------------
     x |                    f |                realF |        fabs(f-realF) |   n |                   df |
 -1.00 |         2856.0000000 |            0.0625000 |         2855.9375000 |  30 |        32736.0000000 |
 -0.90 |          115.0506380 |            0.0767336 |          114.9739044 |  30 |         1387.7169573 |
 -0.80 |            3.2540949 |            0.0952599 |            3.1588351 |  30 |           40.5252051 |
 -0.70 |            0.1731763 |            0.1197304 |            0.0534459 |  30 |            0.7378478 |
 -0.60 |            0.1550833 |            0.1525879 |            0.0024954 |  26 |            0.0373983 |
 -0.50 |            0.1993942 |            0.1975309 |            0.0018634 |  18 |            0.0304413 |
 -0.40 |            0.2628344 |            0.2603082 |            0.0025262 |  12 |            0.0458018 |
 -0.30 |            0.3489074 |            0.3501278 |            0.0012204 |   9 |           -0.0259816 |
 -0.20 |            0.4834560 |            0.4822531 |            0.0012029 |   6 |            0.0322560 |
 -0.10 |            0.6835000 |            0.6830135 |            0.0004865 |   4 |            0.0210000 |
 -0.00 |            1.0000000 |            1.0000000 |            0.0000000 |   1 |           -0.0000000 |
  0.10 |            1.5235000 |            1.5241579 |            0.0006579 |   4 |            0.0210000 |
  0.20 |            2.4392960 |            2.4414062 |            0.0021102 |   6 |            0.0322560 |
  0.30 |            4.1622159 |            4.1649313 |            0.0027154 |   9 |            0.0259816 |
  0.40 |            7.7088083 |            7.7160494 |            0.0072411 |  12 |            0.0458018 |
  0.50 |           15.9931564 |           16.0000000 |            0.0068436 |  18 |            0.0304413 |
  0.60 |           39.0502607 |           39.0625000 |            0.0122393 |  26 |            0.0373983 |
  0.70 |          123.0628347 |          123.4567901 |            0.3939554 |  30 |            0.7378478 |
  0.80 |          581.2462473 |          625.0000000 |           43.7537527 |  30 |           40.5252051 |
  0.90 |         4461.8495183 |        10000.0000000 |         5538.1504817 |  30 |         1387.7169573 |
  1.00 |        46376.0000000 | 411376139330301510000000000000000000000000000000000000000000000.0000000 | 41137613933030
1510000000000000000000000000000000000000000000000.0000000 |  30 |        32736.0000000 |
почему-то не получилось заставить его работать с long double (Глюк gcc?)

Отправлено: 10:48, 27-10-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 37
Благодарности: 0

Профиль | Отправить PM | Цитировать


pva, можешь скинуть свой код?

Отправлено: 12:34, 27-10-2013 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


stalker_dj, этот путь каждый должен пройти сам
я взял твой код, вместо строчки
Код: Выделить весь код
 f -=pow(x,n)*fct(n+3)/(fct(3)*fct(n));
вставил то, что написано в картинке,
а вместо
Код: Выделить весь код
while(fabs(realF-f)>e)
условие сходимости ряда (к пределу сходимости, а не к ожидаемому значению предела, условие сходимости Коши). В граничных точках ряд по крайней мере численно не сходится, там потребовалось ограничение для n.
ну и добавил "косметики"...
не пользуйся чужим кодом, именно эту лабу сделай сам. У тебя получится и тебе понравится
"нет времени" - не считается аргументом. Время только у зеков есть
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:30, 27-10-2013 | #4


Новый участник


Сообщения: 37
Благодарности: 0

Профиль | Отправить PM | Цитировать


pva, спасибо, я понимаю, день сидел, думал, разными способами пробовал...
Код попросил не для того, думал ты другим способом делал, так, для общего развития

Отправлено: 01:00, 28-10-2013 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Ряд Тейлора, #IND

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - ряд простых задач элькхар Тест-форум 1 23-10-2012 10:41
C/C++ - Ряд Тейлора ka_omsk Программирование и базы данных 10 22-03-2011 19:52
Разное - Ряд проблем с семеркой treehel Microsoft Windows 7 1 05-02-2010 13:16
звуковой ряд CHIKANOV Видео и аудио: обработка и кодирование 2 21-10-2005 21:05
Ряд вопросов Guest Сетевые технологии 1 12-05-2004 14:55




 
Переход