Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2020, 19:06   #1
Асдин
 
Регистрация: 01.04.2020
Сообщений: 9
По умолчанию Вычисление функции разложением в ряд с рекурсией. С++

Вложение 99168
В чём ошибка не понимаю, результат выдаёт не правильный
Код:
#include <cmath>
#include <iostream>
using namespace std;
double Yun(double arg, double e, int i)
{double rt=arg;
double y=arg;
rt*=pow(-1.0, i-1)*arg*(3*i-4)/(3.0*i);
cout << rt<<endl;
y=y+rt;
if (fabs(rt)>e)
return y+Yun(arg, e, i+1);
else
return 0;}
int main()
{
    int i(2);
    double x, res, e;

    //Ввод исходных данных
    cout <<"Enter x ( 0<|x|<1 ): "<<endl;
    cin >>x;
    if (fabs(x)>=1)
    {
        cout <<"Uncorrect x, 0<|x|<1. ";
        return -1;
    }
    cout <<"Enter accuracy ( e>0 ): "<<endl;
    cin >>e;
    if (e<=0)
    {
        cout <<"e must be positive. ";
        return -1;
    }

    //Поиск контрольного значения
    res=3*pow((1+x), 1.0/3.0)-3;
    cout <<"The control value: "<<res<<endl;

    //Вычисление с помощью рекурсивной функции
    res=Yun(x, e, i);
    cout <<"Result: " << res;
    return 0;
}
Х- выводится отдельно я так понимаю, так как через формулу с чистым значением не получается.
Изображения
Тип файла: png hbc.png (41.7 Кб, 10 просмотров)
Асдин вне форума Ответить с цитированием
Старый 01.04.2020, 21:26   #2
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Вы не учитываете, что кроме множителя -(3i-4)/(3i) нужно ещё умножать на x.
Код:
#include <iostream>
#include <cmath>

using namespace std;

#define EPS 0.000001

double Y(double x)
{
    return 3*pow(1+x, 1.0/3.0)-3;
}

double YCalc(double a, double x, int i)
{
    if (fabs(a)<EPS)
         return a;
     else
        return YCalc(-a*x*(3.0*i-4.0)/(3.0*i), x, i+1)+a;
}

int main()
{
    double x=0.2;

    cout << Y(x) << endl;
    cout << YCalc(x, x, 2) << endl;

    return 0;
}
В YCalc передаю a - предыдущее слагаемое, x - значение x (для увеличения степени), i - порядковый номер слагаемого.
Причём, первый член ряда не подчиняется общей формуле, поэтому отсчёт от 2.

И вопрос. Вам точно нужно через рекурсию?
FPaul вне форума Ответить с цитированием
Старый 01.04.2020, 21:36   #3
Асдин
 
Регистрация: 01.04.2020
Сообщений: 9
По умолчанию

Да, т.к. задание нацелено на использование рекурсии... Спасибо
Асдин вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление функции разложением ее в ряд Аелд Паскаль, Turbo Pascal, PascalABC.NET 3 04.10.2017 20:39
Вычисление функции разложением ее в ряд Марина357 Помощь студентам 6 26.10.2015 09:53
Вычисление функции разложением её в ряд Hita4 Паскаль, Turbo Pascal, PascalABC.NET 1 17.12.2011 21:00
Вычисление функции разложением её в ряд Hita4 Паскаль, Turbo Pascal, PascalABC.NET 0 12.12.2011 18:02
Вычисление функции разложением ее в ряд 5nizza77 Паскаль, Turbo Pascal, PascalABC.NET 1 15.10.2009 10:55