Войти

Показать полную графическую версию : Ряд Тейлора


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

http://saveimg.ru/pictures/15-03-11/de226e4b48d37a34727f04a56fbdae4d.jpg (http://saveimg.ru)

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

#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
в чем собственно загвоздка?
сначала сделаем цикл перебирающий шаг

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
т.е. всё то, что я написал - чушня полная??? А то что-то я не въехал))

Beyound
16-03-2011, 20:01
да нормально ты написал... данные получаешь с клавиатуры через консоль, мало подятно зачем это?cout<<"-------------------------------------------------------------"<<endl;
cout<<"| i | X | F | arctg (x) |"<<endl;
cout<<"-------------------------------------------------------------"<<endl; »
а вообще тебя же просят ряд тейлора посчитать - вот так примерно его мона посчитать

pva
19-03-2011, 12:30
while ( **пока не достигнем точности eps****) »
с этим местом осторожней, ряд может и не сходиться из-за вычислительной ошибки. Лучше сделать (дополнительно) ограничение на кол-во шагов.
Ещё бывает интересный случай, когда 0.0 > 0.0000001 (по краней мере условие <= не выполняется). В общем вычисление с плавающей точкой - не очень точная вещь

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

Beyound
20-03-2011, 20:47
ну все зависит от того на каком ты курсе)) для начала стоит написать как я предложил и посмотреть что получится...

ka_omsk
21-03-2011, 11:09
я на втором курсе..

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

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

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




© OSzone.net 2001-2012