Не выходит вывести результат в следующей программе

149
11 октября 2021, 15:10

Вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x) с точностью ε (табл. 8.1). Вывести число итераций, необходимое для достижения заданной точности. Вычисление S(x) и Y(x) оформить в виде функций. В таблице: 1-номер примера. 2-а 3-b 4-S(x) 5-ε 6-Y(x)

Проблема, скорее всего, в реализации рекуррентной формулы для S(x). Тем не менее, как ее сделать правильно-я не знаю.

Мой код-

#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
typedef double (*uf)(double, double, int&);
void tabl(double, double, double, double, uf);
double y(double, double, int&);
double s(double, double, int&);
int main()
{
cout << setw(8) << "x" << setw(15) << "y(x)" << setw(10) << "k" << endl;
tabl(-0.8, 0.9, 0.1, 0.0001, y);
cout << endl;
cout << setw(8) << "x" << setw(15) << "s(x)" << setw(10) << "k" << endl;
tabl(-0.8, 0.9, 0.1, 0.0001, s);
return 0;
}
void tabl(double a, double b, double h, double eps, uf fun)
{
int k = 0;
double sum;
for (double x = a; x < b + h / 2; x += h)
{
sum = fun(x, eps, k);
cout << setw(8) << x << setw(15) << sum << setw(10) << k << endl;
}
}
double y(double x, double eps, int& k)
{
return pow(x+1,1.0/4.0);
}
double s(double x, double eps, int& k)
{
double a, c, sum,t;
sum = a = c = x;
k = 2;
while (fabs(c) > eps)
{
c = (pow(-1,k-1)*(4*k-5)*(4*k-1)/4*k*4)*x ;
a *= -c;
sum += a;
k++;
}
return sum;
}

Answer 1

Должен вас огорчить. Приведенный ряд сходится к функции

(8 - 3*x - 8*pow(1 + x,0.75)*cos(3*atan(sqrt(x))/2))/24

а не к указанной в условии.

Сам ряд считается несложно -

double S(double x, double eps, unsigned int& k)
{
    double term = -3*x*x/(8*6*4*2);
    double sum  = term;
    for(k = 3; abs(term) > eps; ++k)
        sum += (term *= -x*(4*k-7)*(4*k-5)/(4*k-2)/4/k);
    return sum;
}

Ну, а в том, что он сходится не к тому, что указано - я не виноват :)

Убедитесь сами, первый столбец тут - x, второй - сумма ряда, третий - указанная в условии функция, четвертый - функция, приведенная мной...

Вот - в Wolfram Alpha.

READ ALSO