Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Ряд Тейлора (http://forum.oszone.net/showthread.php?t=202073)

ka_omsk 15-03-2011 16:34 1635518

Ряд Тейлора
 
Помогите пожалуйста
Задание выглядит так:
Вычислить и вывести на экран значения исходной функции (функция записана слева от знака «=»), значения функции, рассчитанное с помощью ряда Тейлора, на интервале от X нач до X кон из области определения функции с шагом dx и точностью eps. На экране так же должно отображаться количество просуммированных членов ряда.



у меня есть небольшие наброски:

#include <iostream.h>
#include <vcl.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main()
{
int n(0),z(1);
long double xn,xk,eps,dx,f,q,p,w(0);
do{
cout<<"Vvedite X nahalinoe i X konechnoe X>0"<<endl;
cin>>xn>>xk;
} while (xn<0 && xn<=xk);
cout<<"Vvedite eps"<<endl;
cin>>eps;
cout<<"Vvedite shag"<<endl;
cin>>dx;
cout<<"-------------------------------------------------------------"<<endl;
cout<<"| i | X | F | arctg (x) |"<<endl;
cout<<"-------------------------------------------------------------"<<endl;
????????????????????????
????????????????????????
????????????????????????
getch();
}

Beyound 15-03-2011 17:54 1635571

в чем собственно загвоздка?
сначала сделаем цикл перебирающий шаг
Код:

while(xn <= xk)
{
***body****
xn+=dx;
}

в body описывается само вычисление arctg x.
это вычисление можно так-же сделать циклом
Код:

double otvet = - pi / 2;
int step = 1;
while ( **пока не достигнем точности eps****)
{
otvet += pow(-1,step)/ ((step*2 - 1)*pow(xn , step*2 - 1));
}

вот както так... eps я правда незнаю как тебе проверять надо, но я думаю в принципе мощно не плюсовать сразу а записывать куданить и проверять меньше епсилон это или нет.

ka_omsk 15-03-2011 18:29 1635592

т.е. всё то, что я написал - чушня полная??? А то что-то я не въехал))

Beyound 16-03-2011 20:01 1636464

да нормально ты написал... данные получаешь с клавиатуры через консоль, мало подятно зачем это?
Цитата:

Цитата ka_omsk
cout<<"-------------------------------------------------------------"<<endl;
cout<<"| i | X | F | arctg (x) |"<<endl;
cout<<"-------------------------------------------------------------"<<endl; »

а вообще тебя же просят ряд тейлора посчитать - вот так примерно его мона посчитать

pva 19-03-2011 12:30 1638580

Цитата:

Цитата Beyound
while ( **пока не достигнем точности eps****) »

с этим местом осторожней, ряд может и не сходиться из-за вычислительной ошибки. Лучше сделать (дополнительно) ограничение на кол-во шагов.
Ещё бывает интересный случай, когда 0.0 > 0.0000001 (по краней мере условие <= не выполняется). В общем вычисление с плавающей точкой - не очень точная вещь

ka_omsk 20-03-2011 20:20 1639614

в таком случае, подскажите пожалуйста как лучше написать такое выражение, буду очень признателен!

Beyound 20-03-2011 20:47 1639632

ну все зависит от того на каком ты курсе)) для начала стоит написать как я предложил и посмотреть что получится...

ka_omsk 21-03-2011 11:09 1639962

я на втором курсе..

Beyound 21-03-2011 18:18 1640303

ну вот и пиши не смущаясь всякими представлениями вещественных чисел в компе с помощью всяких мантисс и из-за этого возможной несходимости как те верно сказал pva. Давно бы уже написал и отнес преподу, переписал и сдал.

ka_omsk 22-03-2011 08:57 1640718

понимаешь ли в чём проблема, я учусь дистанционно (т.е. это предполагает САМООБУЧЕНИЕ в большинстве случаев) и у меня просто нет возможности кататься по преподам))

Beyound 22-03-2011 19:52 1641302

ну так вообще замечательно - отправил - что непонравилось поправил.. ни те ору, криков "отчислю" и "ты дурак". Пиши уже.. мне лень такое писать... врятли вообще это кого заинтересует.. не цепляет, не интересно.


Время: 02:07.

Время: 02:07.
© OSzone.net 2001-