Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не вижу ошибки (Разложение в ряд) 
:(
    Опции темы
admin82
Дата 25.8.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 22.8.2006

Репутация: нет
Всего: 1



Снова добрый!
Задача такая. Необходимо вычислить значение ф-ии e^(x+2)sin2x с заданной точностью, используя разложение в ряд Тейлора
Вот мой код:
Код

#include "stdafx.h"
#include "iostream"
#include "math.h"
using namespace std;
double Fun (double ,double);
double Fsin (double,int);
double Fe (double, int);
long fact(int);


int main(int argc, _TCHAR* argv[])
{
    double arg,t;
    cout<<"Vvedite x: ";
    cin>>arg;
    t= Fun(arg,0.001);
    cout<<t<<endl;
    cout<<exp(arg+2)<<endl;
    return 0;
}
double Fsin (double x, int n) //Вычисляет очередной член разложения функции f = sin{x)
{
    return pow(double(-1),n-1)*pow(x,(2*n-1))/fact(2*n-1);
}

double Fe (double x, int n) // Вычисляет очередной член разложения функции f = e^(x+2)
{
    return pow(x+2,n)/fact(n);
}


double Fun (double x,double eps)
{
    int N=1;
    double sn,e;
    sn = 0;
    e = 1;
    do
    {
        //sn = sn+ Fsin(2*x,N);
        e = e + Fe(x,N);
        N++;
    }
    while (fabs(double(Fe(x,N)>eps)));  
// Абсолютная погрешность произведения равна сумме относительных погрешностей множитетей
    //while (fabs(double(Fe(x,N)))+fabs(double(Fsin(2*x,N)))>eps);
    return e;
}

long fact(int n)
{
    if (n == 0)
        return 1;
    else
        return n * fact(n-1);
}



Пока считаю только e^(2+x). Так вот, при x = -2, -1, 0, 1 результаты правильные (рядом идет вывод cout<<exp(arg+2)<<endl; ). А дальше все слетает. Где может быть ошибка?
PM MAIL   Вверх
albertn
Дата 25.8.2006, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: нет
Всего: 34



Ошибка в расчете погрешности (44 строка):
Код

while (fabs(double(Fe(x,N)))>eps);

и сделай функцию fact типом double

Добавлено @ 10:26 
А вообще я бы все делал без вычисления факториала. Так быстрее и правильнее.
PM WWW ICQ   Вверх
admin82
Дата 25.8.2006, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 22.8.2006

Репутация: нет
Всего: 1



Факториал присутствует в разложении функций, как без него? По заданию строго по Тейлору!
Условие правильное, я могу отбросить члены ряда, меньшие погрешности.

Тип функции поменял, спасибо. Это я вроде как просто вылетал за границы Long?  Помогло с x = -2 и дальше вперед в положительном направлении. При х = -3, -4 и т.д. все сыплется....  Что еще не так?

PM MAIL   Вверх
albertn
Дата 25.8.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: нет
Всего: 34



Вот функция для вычисления функции exp(x) с погрешностью eps и без всяких факториалов (просто так оптимизирован алгоритм).
Код

double FunE(double x,double eps)
{
    double res=1,step = 1;
    for (int n=1;fabs(step)>eps;n++)
    {
        step*=x/n;
        res+=step;
    }
    return res;
}

PM WWW ICQ   Вверх
Sartorius
Дата 25.8.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



 Считай факториал не как long , а как long double
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.